почему я не могу встроить свой шаблон в основную тему в prestashop 1.7? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь следовать официальному руководству prestashop, но сталкиваюсь с двумя проблемами:

  1. Я вижу display.tpl как необработанный текст, а не встроенный в основную тему.
  2. Я не вижу сообщения, хранящегося в переменной "my_module_message"

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');
}

контроллеры / front / 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');
  }
}

просмотры / шаблоны / front / display.tpl

    {extends file=$layout}

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

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Все в коде правильно, но поскольку я отключил кеш в административной панели, я не думал, что это проблема с кешем.

Admin > Настройка> Расширенные параметры > Производительность > Smarty > Компиляция шаблонов > Перекомпиляция шаблонов, если файлы были обновлены .

0 голосов
/ 30 мая 2018

Первый: вы передаете переменную 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');
    }
}

и, кстати, ваш класс лучше назвать в соответствии с правилами конвенций верблюдов.

Второй: чтобы встроить свой код в страницу, вы должны расширить его и переопределить или заполнить ту часть, которая вам нужна.Например, если вы хотите, чтобы ваш код был основным содержанием страницы, вам нужно сделать следующее в вашем display.tpl

{extends file=$layout}

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