我需要在adminController类中与.tpl文件进行交互,但是当我尝试这样做时,会出现此错误
致命错误:在第48行的/home/USER/public_html/prestashop/modules/RiddleModule/controllers/admin/RiddlePage.php中调用未定义的方法RiddlePageController :: getCacheId()
这是我的管理控制器代码:
class RiddlePageController extends AdminController {
public function __construct()
{
$this->html = '';
$this->display = 'view';
$this->meta_title = $this->l('metatitle');
$this->module = "RiddleModule";
parent::__construct();
}
public function initContent()
{
$this->postProcess();
$this->show_toolbar = true;
$this->display = 'view';
$this->meta_title = $this->l('Modulo');
parent::initContent();
}
public function initToolBarTitle()
{
$this->toolbar_title = $this->l('Titulo');
}
public function initToolBar()
{
return true;
}
public function renderView() {
$this->context->smarty->assign(
array(
'img1' => "http://www.free-3dmodels.com/image/Flowers-3D-Model-3662994d.png",
'img2' => "http://www.all3dmodel.com/Images/39.jpg"
)
);
// in return have error "getCacheId"
return $this->display(__FILE__, 'content.tpl', $this->getCacheId());
// return "<b>This works fine!!</b>";
}
我的tpl文件只有{$img1}
和{$img2}
进行测试。
也许我做错了,这不是在我自己的管理页面中制作的最佳方式。
答案 0 :(得分:4)
您的错误是因为AdminController类没有getCacheId
方法。
要回答你的问题,你必须做一些修复。
首先(延伸ModuleAdminController
而非AdminController
):
class AdminRiddlePageController extends ModuleAdminController { }
然后,如果要查看自定义tpl,请将view.tpl
文件放入:
prestashop/modules/RiddleModule/views/templates/admin/riddlepage/helpers/view/
或
prestashop/modules/RiddleModule/views/templates/admin/riddle_page/helpers/view/
(如果下划线是必要的,我不记得了)
你的renderView
方法应该是这样的:
public function renderView()
{
/* Your code */
/* Use this snippet to assign vars to smarty */
$this->tpl_view_vars = array(
'myvar' => 1,
'secondvar' => true
)
return parent::renderView();
}
答案 1 :(得分:0)
AdminController
类没有用于呈现TPL的display
方法的实现。
在设置模块var:
之后,你可以使用这样的东西$this->module->display(_PS_MODULE_DIR_.$this->module->name.DIRECTORY_SEPARATOR.$this->module->name.'.php', 'content.tpl')
祝你好运。
答案 2 :(得分:0)
正如@TheDrot告诉我们的,答案是使用$this->context->smarty->fetch(location)
,但不是在renderList中,但是在renderView的return语句中是正常的,prestashop获取tpl文件并正确加载smarty变量。例如:
public function renderView(){
$this->context->smarty->assign(
array(
'img1' => "http://www.free-3dmodels.com/image/Flowers-3D-Model-3662994d.png",
'img2' => "http://www.all3dmodel.com/Images/39.jpg"
)
);
return $this->context->smarty->fetch(_PS_MODULE_DIR_ . "RiddleModule/controllers/front/prueba.tpl");
}
在这种情况下,加载TPL文件
的文件位置并不重要