Пользовательский модуль PrestaShop 1.6.1.1 не отображается во Front Office

1

Я создал mymodule, следуя новейшей документации PrestaShop 1.6. Модуль установлен и удален правильно, также добавлен файл css прямо в разделе заголовка. Но в фронт-офисе нет содержимого.

Это файл /module/mymodule/mymodul.php

<?php

if (!defined('_PS_VERSION_'))
{exit;
}

class MyModule extends Module
{
    public function __construct()
    {
        $this->name = 'mymodule';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'www12';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_);

        $this->bootstrap = true;

        parent::__construct();

        $this->displayName = $this->l('My module');
        $this->description = $this->l('Description of my module.');

        $this->confirmUninstall = $this->l('Are you sure you want to uninstall?');

        if (!Configuration::get('MYMODULE_NAME'))
        {$this->warning = $this->l('No name provided');}
    }

    public function install() {
        if (Shop::isFeatureActive()) {
            Shop::setContext(Shop::CONTEXT_ALL);
        }
        if (!parent::install() ||
                !$this->registerHook('leftColumn') || !$this->registerHook('header') || !Configuration::updateValue('MYMODULE_NAME', 'my friend')
        ) {
            return false;
        } else {
            return true;
        }
    }

    public function uninstall() {
        if (!parent::uninstall() ||
                !Configuration::deleteByName('MYMODULE_NAME')
        ) {
            return false;
        } {
            return true;
        }
    }

    public function getContent()
    {
        $output = null;

        if (Tools::isSubmit('submit' . $this->name)) {
            $my_module_name = strval(Tools::getValue('MYMODULE_NAME'));
            if (!$my_module_name || empty($my_module_name) || !Validate::isGenericName($my_module_name)) {
                $output .= $this->displayError($this->l('Invalid Configuration value'));
            } else {
                Configuration::updateValue('MYMODULE_NAME', $my_module_name);
                $output .= $this->displayConfirmation($this->l('Settings updated'));
            }
        }
        return $output . $this->displayForm();
    }

    public function displayForm()
    {
        // Get default language
        $default_lang = (int)Configuration::get('PS_LANG_DEFAULT');

        // Init Fields form array
        $fields_form[0]['form'] = array(
            'legend' => array(
                'title' => $this->l('Settings'),
            ),
            'input' => array(
                array(
                    'type' => 'text',
                    'label' => $this->l('Configuration value'),
                    'name' => 'MYMODULE_NAME',
                    'size' => 20,
                    'required' => true
                )
            ),
            'submit' => array(
                'title' => $this->l('Save'),
                'class' => 'button'
            )
        );

        $helper = new HelperForm();

        // Module, token and currentIndex
        $helper->module = $this;
        $helper->name_controller = $this->name;
        $helper->token = Tools::getAdminTokenLite('AdminModules');
        $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;

        // Language
        $helper->default_form_language = $default_lang;
        $helper->allow_employee_form_lang = $default_lang;

        // Title and toolbar
        $helper->title = $this->displayName;
        $helper->show_toolbar = true;        // false -> remove toolbar
        $helper->toolbar_scroll = true;      // yes - > Toolbar is always visible on the top of the screen.
        $helper->submit_action = 'submit'.$this->name;
        $helper->toolbar_btn = array(
            'save' =>
            array(
                'desc' => $this->l('Save'),
                'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.
                '&token='.Tools::getAdminTokenLite('AdminModules'),
            ),
            'back' => array(
                'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
                'desc' => $this->l('Back to list')
            )
        );

        // Load current value
        $helper->fields_value['MYMODULE_NAME'] = Configuration::get('MYMODULE_NAME');

        return $helper->generateForm($fields_form);
    }

    public function hookDisplayLeftColumn($params)
    {
      $this->context->smarty->assign(
          array(
              'my_module_name' => Configuration::get('MYMODULE_NAME'),
              'my_module_link' => $this->context->link->getModuleLink('mymodule', 'display')
          )
      );
      return $this->display(__FILE__, 'mymodule.tpl');
    }

    public function hookDisplayRightColumn($params)
    {
      return $this->hookDisplayLeftColumn($params);
    }

    public function hookDisplayHeader()
    {
      $this->context->controller->addCSS($this->_path.'css/mymodule.css', 'all');
    }  
}

и это файл mymodule.tpl, расположенный в этом же каталоге:

<!-- Block mymodule -->
<div id="mymodule_block_home" class="block">
  <h4>Welcome!</h4>
  <div class="block_content">
    <p>Hello,
       {if isset($my_module_name) && $my_module_name}
           {$my_module_name}
       {else}
           World
       {/if}
       !       
    </p>   
    <ul>
      <li><a href="{$my_module_link}" title="Click this link">Click me!</a></li>
    </ul>
  </div>
</div>
<!-- /Block mymodule -->

Я нашел подобную тему, но он забыл о важных методах. Я не :-(

Теги:
module
prestashop-1.6
smarty

3 ответа

0
Лучший ответ

Если у кого-то такая же проблема... Код в порядке! Проблема в том, что в учебнике говорится, что вы найдете сообщение на дому, но оно отсутствует, потому что у него нет левой колонки.

Вы найдете сообщение на внутренних страницах (любое с левым столбцом)

  • 0
    У меня вроде такие же проблемы, можешь привести пример страницы с левым столбцом ?
  • 0
    Их много ... с домашней страницы просто перейдите по ссылкам, и вы найдете один
0

В вашем методе install():

$this->registerHook('leftColumn')

должно быть:

$this->registerHook('displayLeftColumn')

Имя крючка фактически имеет "отображение" в нем, если вы ссылаетесь на крючок, который уже существует в Prestashop (тот, который используется в фронт-офисе).

То, что вы на самом деле делаете здесь, - это создать новый крючок с именем "leftColumn", который получит контент из метода hook с именем "hookLeftColumn". Я думаю, что не то, что ты хочешь :)

  • 0
    затем сбросьте модуль для установки снова
0

замените hookdisplayLeftColumn ($ params) на hookLeftColumn ($ params)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню