我被迫使用Smarty进行项目,但服务器运行缓慢,所以我尝试在MAMP本地使用它。
对于Smarty来说,我是一个完全的初学者。
首先,我在index.php中为我正在制作的网站下载了smarty,我上了课:
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] =>
)
似乎&#34;价值&#34;应该等于我分配它的实例,但它只是空白。这可能是什么原因?我正在使用Smarty 3.1.20。
答案 0 :(得分:0)
你应该确保你做的一切都很好,所以请尝试使用此代码以确保在当前范围内定义了$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
版