Как настроить вид модуля для пользовательского поисковика в prestashop 1.6

Я пытаюсь интегрировать Fotolia Api с Prestashop 1.6.0.9.

Я уже делаю модуль с настраиваемой вкладкой, но понятия не имею, как настроить вид из папки модуля для этой вкладки. Извините, но "документация для разработчиков" ОТСТОЙ. Не могу найти рабочего решения.

public function install() {
    if (!parent::install()
            || !$this->registerHook('backOfficeHeader')
            || !$this->registerHook('header')
    ) return false;

    $tab = new Tab();
    $tab->class_name = 'AdminFotoliaSelector';
    $tab->id_parent = 0;
    $tab->module = $this->name;
    $tab->name[(int)(Configuration::get('PS_LANG_DEFAULT'))] = 'Fotolia Selector';
    $tab->add();

    return true;
}

У меня была большая проблема с созданием правильного контроллера, и теперь я просто не могу ничего загрузить / понятия не имею, как это сделать.

<?php
if (!defined('_PS_VERSION_'))
  exit;

class AdminFotoliaSelectorController extends ModuleAdminController {

public $name;

public function __construct() {
    $this->lang = (!isset($this->context->cookie) || !is_object($this->context->cookie)) ? intval(Configuration::get('PS_LANG_DEFAULT')) : intval($this->context->cookie->id_lang);
    parent::__construct();
}


public function initContent() {
    parent::initContent();
    $this->renderForm();
}

public function renderForm() {
    $path = _MODULE_DIR_."fotoliaselector";

    $more = $this->module->display($path, 'views/templates/admin/fotoliaselector.tpl');

    return $more.parent::renderForm();
}

Когда я пытаюсь умереть ($more), он дает мне содержимое .tpl, в любом случае, когда я нажимаю вкладку в бэк-офисе, он все еще пуст. У меня включены параметры отладки, компиляция, кеширование отключено.

Так просто просветите меня, пожалуйста, как я могу показать ЧТО-НИБУДЬ там?


person amnestia    schedule 06.08.2014    source источник


Ответы (2)


Я думаю, проблема в том, что вы вообще не отображаете содержимое вкладки.

Я не знаю, что делает метод module->display, но я думаю, что вы должны изменить строку метода initContent():

$this->renderForm();

в

echo $this->renderForm();

Если это не поможет, посмотрите эту документацию и попробуйте сделать это без внешних классов - попробуйте использовать Smarty только для отображения простого контента без использования Tab класса или AdminFotoliaSelector

person Marcin Nabiałek    schedule 07.08.2014
comment
Привет, спасибо четыре Ваш повтор. Эхо вставляет мой код в случайное место в заголовке, разрушая всю структуру html. module->display вернуть содержимое файла .tpl. Я пытаюсь понять, как это работает, но это ужасно для меня, какой хук я должен использовать для присоединения к моей пользовательской созданной вкладке? Должен ли я создать новый и загрузить его в TPL, если да, как я должен правильно предоставить этот TPL модулю? Пример с интерфейсом — это нормально, но для фронт-офиса. У меня проблемы с использованием в бэк-офисе. Pozdrawiam ;) (привет) - person amnestia; 07.08.2014
comment
@amnestia Извините, но я больше не могу вам в этом помочь. Может быть, кто-то еще, кто знает Prestashop, сделает это. - person Marcin Nabiałek; 07.08.2014

Ну, я знаю, это прозвучит странно, но вам нужно взять несколько похожих модулей, прочитать его код и увидеть, что имена некоторых методов одинаковы в каждом модуле.

Затем скопируйте это, установите и поиграйте с некоторыми изменениями и т. д.

Имхо, вам не хватает формы стандартного метода getContent(), где вам нужно передать некоторые данные для smarty:

public function getContent()
    {
          global $smarty, $cookie;
......
//some code 
......
          $this->_html .= '<script type="text/javascript"   src="'.__PS_BASE_URI__.'js/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>';
          $this->_html .= '<h1>My module title or stuff</h1>';
          $this->_html .= $this->getMyCoolFormOrConfig();
          $smarty->assign('errors', $this->errors);
          $smarty->assign('message', $this->message);
          $this->_html .=  $this->display(__FILE__, 'name_of_tpl_file.tpl');
          return $this->_html;

     }

чтобы просто добавить вкладку в код BackOffice следующим образом:

        $id_tab=Tab::getIdFromClassName('AdminPayment'); 
        $newtab=new Tab();
        $newtab->id_parent=$id_tab;
        $newtab->module=$this->name;
        $newtab->class_name='MyClassName'; //will be same like MyClassName.php in folder of you module where you need to create you class and extend the AdminTab and from there with function you need to echo you name module
        $newtab->position=Tab::getNbTabs($id_tab)+1;
        $newtab->name[$cookie->id_lang]=$this->l("Name of you stuff");
        $newtab->name[Configuration::get('PS_LANG_DEFAULT')]=$this->l("Name of you stuff");
        $newtab->add();

Изучите этот файл /controllers/admin/AdminModulesController.php и вы увидите, какие методы используются в каждом модуле.

Воспользуйтесь расширенной функцией для создания структуры вашего модуля (требуется регистрация) https://validator.prestashop.com/generator

person qant    schedule 17.10.2014