Я вынужден использовать Smarty для проекта, но сервер работает медленно, поэтому я попытался работать с ним локально на MAMP.
Я начинающий, когда дело доходит до Смарти.
Сначала я скачал smarty, затем в index.php для сайта, который я делаю, я создал класс:
class Panel{
public function __construct__(){}
public function get_articlelist_primary(){return array();}
}
Затем я сделал пример:
$panelObj=new Panel();
Сделал мою вещь с Smarty:
require_once("../Smarty-3.1.20/libs/Smarty.class.php");
$smarty = new Smarty();
$smarty->template_dir = 'views';
$smarty->compile_dir = 'tmp';
$smarty->assign("panelObj",$panelObj);
$smarty->display("index.tpl");
Затем я сделал шаблон, и он не работает. В журнале ошибок PHP написано:
[17-Oct-2014 20:48:38 Europe/Berlin] PHP Fatal error: Call to a member function get_articlelist_primary() on a non-object in /Applications/MAMP/htdocs/LanderTemplate/tmp/3dd4ab168909a8c2acf37974fa4b15c661cc2857.file.index.tpl.php on line 377
Строка 377 в скомпилированном шаблоне:
if (count($_smarty_tpl->tpl_vars['panelObj']->value->get_articlelist_primary())) {?></div><?php }?>
Написал эту строку в скомпилированном шаблоне, чтобы регистрировать ошибки:
<?php error_log(print_r($_smarty_tpl->tpl_vars['panelObj'],1));
Он вернулся:
[17-Oct-2014 20:48:38 Europe/Berlin] Smarty_Variable Object
(
[value] =>
[nocache] =>
[scope] => 0
[_loop] =>
)
Кажется, что «значение» должно быть равно экземпляру, так как я его назначил, но оно просто пустое. Что может быть причиной этого? Я использую Smarty 3.1.20.
Вы должны убедиться, что вы все делаете хорошо, поэтому, пожалуйста, попробуйте этот код, чтобы убедиться, что у вас есть $panelObj
определено в текущей области.
class Panel{
public function __construct(){}
public function get_articlelist_primary(){return array();}
}
$panelObj=new Panel();
var_dump($panelObj);
$smarty->assign("panelObj",$panelObj);
$smarty->display("index.tpl");
И в index.tpl
файл:
{$panelObj->get_articlelist_primary()}
Если у вас включена функция error_reporting, вы увидите только уведомление:
object(Panel)#17 (0) { }
Notice: Array to string conversion in ...\templates_c\6a7a7402e26bab6fe66fe3d214cc5fb929376cc9.file.sb.tpl.php on line 34
Array
потому что вы возвращаете массив в этой функции, но, как видите, этот метод класса может быть запущен без каких-либо проблем. Я проверил это в 3.1.19
версия
Других решений пока нет …