0

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

Fatal error: Call to undefined method RiddlePageController::getCacheId() in /home/USER/public_html/prestashop/modules/RiddleModule/controllers/admin/RiddlePage.php on line 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

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

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

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

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

удачи.

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/
(я не» t хорошо помнить, если подчеркивание необходимо)

И вашметод должен быть таким:

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(); 
} 
+0

он не работает мой друг ... но хорошие новости с вашим решением теперь показывают пустую страницу только, нет ошибки ... позвольте мне показать вам http://prnt.sc/dy8bp5 – manhattan

+1

@manhattan [This] (http://stackoverflow.com/questions/40544689/render-helper-form-from-prestashop-admin -controller /) должен помочь вам в загрузке пользовательского tpl в контроллере администратора. – TheDrot

+0

@manhattan Я внес изменения, попробуйте 'AdminRiddlePageController' вместо' RiddlePageController', не забудьте обновить таблицу 'tab' в БД – sarcom