在AdminController中包含tpl的最佳prestashop方法是什么?

时间:2017-01-20 17:28:27

标签: php model-view-controller module prestashop prestashop-1.6

我需要在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}进行测试。

也许我做错了,这不是在我自己的管理页面中制作的最佳方式。

3 个答案:

答案 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文件

的文件位置并不重要