Какой лучший prestashop-способ включить TPL в AdminController?

Мне нужно взаимодействует с файлом .tpl в моем классе adminController, но когда я пытаюсь это сделать, появляется эта ошибка

Неустранимая ошибка: вызов неопределенного метода RiddlePageController :: getCacheId () в /home/USER/public_html/prestashop/modules/RiddleModule/controllers/admin/RiddlePage.php в строке 48

Это мой код контроллера администратора:

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

Решение

Ваша ошибка в том, что класс AdminController не имеет getCacheId метод.

Чтобы ответить на ваш вопрос, вы должны сделать небольшое исправление.

Первый (расширяется ModuleAdminController не AdminController):

Класс AdminRiddlePageController расширяет 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();
}
4

Другие решения

AdminController класс не имеет реализации display метод, который вы используете для визуализации TPL.

Вы можете использовать что-то вроде этого после установки модуля var:

$this->module->display(_PS_MODULE_DIR_.$this->module->name.DIRECTORY_SEPARATOR.$this->module->name.'.php', 'content.tpl')

Удачи.

0

Как сказал нам @TheDrot, ответ заключается в использовании $this->context->smarty->fetch(location), но не в renderList, а в операторе return renderView в порядке, и 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 в этом случае

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector