Пользовательский заголовок страницы Modx Revolution

Я пытаюсь создать фрагмент, который будет отображать настраиваемый заголовок страницы для моего портфолио. Проблема, с которой я столкнулся, заключается в том, что мой код возвращает только «else», но когда я запускаю запрос в MySql, я получаю name.

Что я делаю неправильно?

<?php
// Show All Errors
error_reporting(E_ALL);
ini_set('display_errors', '1');

$getID = $modx->quote($getID);

$ret = '';
$qry = "SELECT `name` FROM `modx_gallery_items` WHERE REPLACE(LOWER(`name`), ' ', '-') = $getID;";

$result = $modx->query($qry);
if ($result) {
    $row = $result->fetch(PDO::FETCH_ASSOC);
    if($row){
        $ret = 'o7th Web Design &raquo; Portfolio &raquo; ' . $row['name'];
    }else{ //It's showing this one on the page, yet the same query in MySQL returns `name`
        $ret = 'o7th Web Design &raquo; Portfolio &raquo; Our Portfolio' . $qry;
    }
    unset($row);        
}else{
    $ret = 'o7th Web Design &raquo; Portfolio &raquo; Our Portfolio' . $qry;
}

// Return everything
echo $ret;
?>

person Kevin    schedule 02.01.2013    source источник
comment
Вы var_dump($result)? Если он возвращает 0 или FALSE, тогда вы получаете последнее else, которое является дубликатом else, которое вы прокомментировали.   -  person phpisuber01    schedule 02.01.2013
comment
Это похоже на большой объем кода для заголовка страницы. Можете ли вы более конкретно описать желаемый результат?   -  person mmcglynn    schedule 02.01.2013
comment
@ phpisuber01 - var_dump ($ row) возвращает (bool) False. Я еще не сделал $ result, но я предполагаю, что это будет что-то, поскольку это пройдет. Я дам вам знать через несколько   -  person Kevin    schedule 02.01.2013
comment
@mmcglynn это не типичный заголовок страницы. Я создал специальную «галерею» для своего портфолио, поэтому, когда вы находитесь на странице моего списка и нажимаете ссылку на элемент, он переходит на поддельную страницу, которая извлекает сведения об элементах. На этой странице я хочу отобразить заголовок, отформатированный в приведенном выше коде.   -  person Kevin    schedule 02.01.2013
comment
@ phpisuber01 - var_dump ($ result) показывает object(PDOStatement)#26 (1) { ["queryString"]=> string(109) "SELECT name` FROM modx_gallery_items WHERE REPLACE (LOWER (name), '', '-') = 'accu-time-systems'; } `   -  person Kevin    schedule 02.01.2013
comment
да, запрос правильный, пожалуйста, посмотрите мой вопрос. созданный запрос возвращает правильные результаты при запуске в phpMyAdmin для базы данных   -  person Kevin    schedule 02.01.2013
comment
что действительно заставляет меня чесать в затылке, тот же метод используется для извлечения содержимого страницы, на самом деле единственная разница в том, что есть еще 2 поля   -  person Kevin    schedule 02.01.2013


Ответы (3)


Нашел проблему.

$row = $result->fetch(PDO::FETCH_ASSOC);

Необходимо изменить на:

$row = $result->fetchAll(PDO::FETCH_ASSOC);

И затем я могу либо зациклить возвращенный массив, либо вернуть элемент по индексу: $row[0]['name']

person Kevin    schedule 02.01.2013

Вы совершенно не умеете делать запросы в modx Revolution. Прочтите http://bobsguides.com/revolution-objects.html. Правильный пример этого кода выглядит так -

// add class to work with gallery extra
$gallery = $modx->getService('gallery','Gallery',$modx->getOption('gallery.core_path',null,$modx->getOption('core_path').'components/gallery/').'model/gallery/',$scriptProperties);
if (!($gallery instanceof Gallery)) return '';

// get id of album
$getID = (int) $modx->getOption('getID',$scriptProperties,false);
if (empty($getID)) return 'no id';

// make query
$c = $modx->newQuery('galAlbum')
$c->where(array(
    'id' => $getID,
));
$item = $modx->getObject('galAlbum',$c);

// get result
if (!empty($item)) {
    $output = 'o7th Web Design &raquo; Portfolio &raquo; ' . $item->get('name');
}
else {
    $output = 'o7th Web Design &raquo; Portfolio &raquo; Our Portfolio' . ' empty';
}

return $output;
person Vasis    schedule 02.01.2013
comment
Вы совершенно не умеете делать запросы в modx Revolution. На самом деле я благодарен вам, и код, который я опубликовал, намного меньше накладных расходов, чем то, что вы опубликовали - person Kevin; 02.01.2013
comment
кроме того, моя галерея не является объектом modx, это просто таблица в базе данных modx для моего использования - person Kevin; 02.01.2013
comment
the code I posted is much less overhead than what you have posted - код, который вы написали, не использует огромных возможностей, обеспечивающих кеширование xpdo, поэтому ваш код будет тратить больше ресурсов - person Vasis; 02.01.2013
comment
rtfm.modx.com/ display / Revolution20 / - вот как работать со своими пользовательскими таблицами. Просто используйте собственные возможности, предлагаемые Modx Revolution. - person Vasis; 02.01.2013
comment
ты прав. Если бы я хотел потратить время на включение простой таблицы в Modx, то именно так это и следовало бы сделать, однако, поскольку у меня нет времени и мне не нужно тратить время на это, я построил простую таблицу для хранения данных и отображения содержащихся в них значений (заняло 2 минуты), и я делаю это таким образом. Пожалуйста, вернитесь к теме - person Kevin; 02.01.2013
comment
Если вы действительно используете дополнительную галерею, я бы выбрал то, что Васис опубликовал, поскольку «пакет» уже существует. Но это не значит, что неправильно использовать простые методы PDO, поскольку xPDO в основном является их расширением. В зависимости от доступного времени и бюджета иногда необходимо выбирать между «рекомендуемым» или более быстрым способом, но оба они достигают одного и того же результата. Будьте дружелюбны, ребята ... - person okyanet; 03.01.2013
comment
Кроме того, хотя метод Васиса действительно выигрывает от встроенного кеширования, если вы вызываете фрагмент кешированным, то после первой загрузки никакой разницы в производительности не будет. - person okyanet; 03.01.2013
comment
# 1 Я не использую дополнительную галерею (как я уже сказал), # 2 мне не нужно и не нужно никакого кеширования с этим - person Kevin; 03.01.2013

это проблема?

$qry = "SELECT `name` FROM `modx_gallery_items` WHERE REPLACE(LOWER(`name`), ' ', '-') = $getID;";

должно быть:

$qry = "SELECT `name` FROM `modx_gallery_items` WHERE REPLACE(LOWER(`name`), ' ', '-') = ".$getID.";";

похоже, что ваш запрос будет искать "$ getID", а не его фактическое значение

person Sean Kimball    schedule 02.01.2013
comment
php - это язык сценариев с шаблонами. использование делает его буквальным (я думаю, так оно и называется), что означает, что запрос правильный - person Kevin; 02.01.2013
comment
нет, чувак - ты ошибаешься, твоя переменная php не интерпретируется. Посмотрите еще раз и проверьте свой синтаксис. - person Sean Kimball; 02.01.2013
comment
нет, чувак, я не ошибаюсь, и это интерпретируется. Если вы прочтете 5-й комментарий под вопросом, то увидите, что он делает именно то, что я хотел, и возвращает мне правильный запрос в нужное время. - person Kevin; 02.01.2013
comment
php.net/manual/en/ - person okyanet; 03.01.2013
comment
Спасибо, что доказали мою точку зрения ... цитирую The most important feature of double-quoted strings is the fact that variable names will be expanded. See string parsing for details. - person Kevin; 03.01.2013