为什么我不能在prestashop 1.7的主题中嵌入我的模板?

时间:2018-05-29 20:19:59

标签: php module prestashop smarty

我正在尝试遵循prestashop的官方指南,但我面临两个问题:

  1. 我将display.tpl视为原始文本而未嵌入主题中。
  2. 我看不到存储在变量“my_module_message”
  3. 中的消息
      

    g2a.php(主模块文件)

    public function hookDisplayLeftColumn($param)
    {
        $this->context->smarty->assign(
            array(
                'my_module_name' => configuration::get('G2A_NAME'),
                'my_module_link' => $this->context->link->getModuleLink('g2a','display'),
                'my_module_message' => $this->l('This is a simple text message')));
    
        return $this->display(__FILE__ , 'g2a.tpl');
    }
    
      

    控制器/前/ Display.php的

    class g2adisplayModuleFrontController extends ModuleFrontController
    {
      public function initContent()
      {
        parent::initContent();
         $this->context->smarty->assign('my_module_message', $this->l('This is a simple text message'));
            $this->setTemplate('module:g2a/views/templates/front/display.tpl');
      }
    }
    
      

    视图/模板/前/ display.tpl

        {extends file=$layout}
    
    {block name='content'}
      welcome to my shop!
      {$my_module_message}
    {/block}
    

2 个答案:

答案 0 :(得分:0)

第一个: 您将my_module_message变量传递到mymodule.tpl模板,但不传递给之前呈现的display.tpl。因此,您需要在设置模板之前从控制器类传递该变量。你可以用同样的方式做到这一点

class mymoduleDisplayModuleFrontController extends ModuleFrontController
{
    public function initContent()
    {
        parent::initContent();
        $this->context->smarty->assign('my_module_message', $this->l('This is a simple text message'));
        $this->setTemplate('module:mymodule/views/templates/front/display.tpl');
    }
}

并且顺便说一下,最好根据camelcase约定规则命名你的类。

第二个: 要将代码嵌入到页面中,您必须扩展它并覆盖或填充您需要的部分。例如,如果您希望代码成为网页的主要内容,则需要在display.tpl

中执行下一步操作
{extends file=$layout}

{block name='content'}
  welcome to my shop!
{/block}

答案 1 :(得分:0)

代码中的所有内容都是正确的,但由于我在管理面板中禁用了缓存,因此我认为这不是缓存问题。

  

管理员> 配置> 高级参数> 效果> Smarty > 模板编译> 如果文件已更新,则重新编译模板