Мне нужно взаимодействует с файлом .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}
для тестирования.
Может быть, я все делаю неправильно, и это не лучший способ сделать это на своей странице администратора.
Ваша ошибка в том, что класс 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();
}
AdminController
класс не имеет реализации display
метод, который вы используете для визуализации TPL.
Вы можете использовать что-то вроде этого после установки модуля var:
$this->module->display(_PS_MODULE_DIR_.$this->module->name.DIRECTORY_SEPARATOR.$this->module->name.'.php', 'content.tpl')
Удачи.
Как сказал нам @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 в этом случае