2015-12-21 5 views
1

Я создал функцию для запуска SQL-запроса, выводя данные, и это кажется прекрасным. Проблема в том, что я ничего не могу с этим сделать, поскольку я не могу сделать выход к шаблонам работает.Невозможно создать функцию TPL из PHP-кода с помощью Smarty

PHP код:

function getCategories() { 
    try { 
     foreach($this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories") as $row) { 
      $rows[] = $row; 
     } 
    } catch(PDOException $e) { 
     print "Error!:" . $e->getMessage(); 
     return false; 
    } 
    return $rows; 
    $smarty = new Smarty(); 
    $smarty->assign('categories', $rows); 
} 

который просто возвращает это:

enter image description here

Замена return $rows; с return $smarty->assign('categories', $rows); просто делает пустую страницу.

Я использую это в шаблоне: {$categories.cat_name}

Может кто-нибудь помочь мне исправить это?

Я пытаюсь переписать уязвимый скриптовый сценарий форума с помощью Smarty, поэтому он стоит использовать для разработки сценария. Это буквально только категории, темы и система входа/регистрации atm, которые я пытаюсь переписать с помощью Smarty.

+1

Можете ли вы показать нам html, где вы хотите использовать категории? –

+0

HTML не имеет никакого отношения к этому вопросу, потому что Smarty должен объявить переменную для этого, чтобы даже работать ... Предполагается использовать «$ smarty-> assign (« categories », $ rows); для назначения $ категорий. переменную, а затем добавить остальные после (точки), чтобы Smarty извлекал информацию из этой строки. Smarty делает это иначе, чем сам PHP. Php является единственным подходящим для этого вопросом. – alex809

ответ

0

Проблема заключается в том, что вы создаете новый объект smarty, назначаете ему переменную, но не используете ее для отображения вашего шаблона - так что этот объект теряется.

Я предлагаю передать объект Smarty к вашей функции, как это:

function getCategories(&$smarty) { 
    $rows = array(); 
    if($result = $this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories")) { 
     $rows = $result->fetchAll(); 
    } 
    $smarty->assign('categories', $rows); 
} 

Таким образом, ссылка на объект будет передана в функцию - вы будете иметь возможность назначать любой ВАР вы хотите к нему без необходимо вернуть его. Просто убедитесь, что вы отправляете объект Smarty, который вы используете для визуализации шаблона.

+0

Хорошо, но как бы я мог запустить запрос и вернуть результаты, чтобы это даже работало? Потому что я на самом деле не смог выполнить эту работу. Я попытался это сделать до этого, но не могу найти какой-либо существующий код или примеры того, как SQL-запрос выполняется и выводится в строку, отличную от улова, и в конце концов я заканчиваю с моим существующим кодом, который не работает ... Потому что, если я это сделаю: http://i.imgur.com/FIWlM73.png , то я в конечном итоге с http://i.imgur.com/VuEVH4j .png & if я пытаюсь $ sql = query, тогда я получаю ошибку $ sql для переменной, и я хочу использовать PDO в любом случае ... – alex809

+0

Вы используете неправильный PDO - вы должны получить результат, чтобы получить массив. ['PDO :: query'] (http://php.net/manual/en/pdo.query.php) возвращает [' PDOStatement'] (http://php.net/manual/en/class.pdostatement .php), который должен быть выбран с помощью ['PDOStatement :: fetchAll'] (http://php.net/manual/en/pdostatement.fetchall.php), например. Я обновил свой ответ, чтобы привести пример правильного использования PDO. – vard

+0

Удивительный! Я думал, что это сработает. И затем http://i.imgur.com/nXI9NfQ.pngS Строка 51: 'код', если ($ результат = $ this-> pdo-> запрос -> ("SELECT categories.cat_id, категории. cat_name, categories.cat_description FROM categories ")) { – alex809

Смежные вопросы