Хуки - как с Вами работать? Помогите!

Тема в разделе "PrestaShop", создана пользователем Menro, 20 окт 2014.

Информация :
Хочешь в разделе без проблем общаться - прочти правила, чтобы потом с форумом на время не прощаться. Читать обязательно!
Внимание! Читайте внимательно правила!Предупреждения выдаются без всяких вопросов. Нарушил - получил. Будьте Внимательнее! Постинг нескольких постов подряд приравнивается к НАРУШЕНИЮ! Будьте вежливы и соблюдайте правила ;-)
Модераторы: ZiX
  1. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    604
    Симпатии:
    115
    Всем привет!
    Совсем недавно столкнулся с PrestaShop 1.6, на первый взгляд всё очень понравилось, но вот как дошло дело до правки шаблона, я ужаснулся...как-то всё сложно, а может и нет, просто я чего-то не понимаю...

    Я решил, что мне определенно нужен новый хук, так как текущие находятся не в тех местах где мне нужно ну и т д. Пошел в phpMyadmin, выполнил запрос:

    Код:
    INSERT INTO `ps_hook` (`id_hook`, `name`, `title`, `description`, `position`, `live_edit`) VALUES (NULL, 'displayRegister', 'Register page top', 'This hook displays content Rigister links', 1, 1);
    Далее вывел хук в шаблоне:

    Код:
    {if $HOOK_REGISTER}
        <div class="hook_register">
            {$HOOK_REGISTER}
        </div>
    {/if}
    Правлю модуль, что бы он регистрировался в DisplayRegister. Устанавливается, в хуках отображается как надо. А на сайте не появляется.

    Что не так? Мне нужно что бы модуль отображался на каждой странице... Помогите пожалуйста!
     
  2. greatphoto

    greatphoto Создатель

    Регистр.:
    19 мар 2012
    Сообщения:
    22
    Симпатии:
    0
    Еще с расположениями поработать в админке придется. http://clip2net.com/s/j9hwdk

    И попробуй прописать в хук куда вывести хочешь и в хук displayHome
     
    Последнее редактирование модератором: 7 дек 2014
  3. Вадим Данилкин

    Вадим Данилкин Создатель

    Регистр.:
    9 окт 2013
    Сообщения:
    17
    Симпатии:
    13
    Для начала выключи кеширование и включи перекомпиляцию - будеш уверен что страница обновляется со всеми изменениями кода.
    записывать хук в БД самостоятельно нет необходимости, преста 1.6 сделает это сама. Хук выводится в шаблоне с помощью метода {hook h='displayNew'} ну или что там вместо NEW
    но для того чтобы модуль имел возможность выводиться в данном хуке, необходимо в файле modules/твойМодуль/твойМодуль.php
    1. При инсталляции модуля в престашоп он зарегистрирует нужный хук с помощью метода RegisterHook ()
    Находишь код:
    Код:
        public function install()
        {
            if (!parent::install()
            || !$this->registerHook('top')
            || !$this->registerHook('header')
            || !$this->registerHook('displayMobileTopSiteMap')
            )
                return false;
            return true;
        }
    
    Добавляешь строку для регистрации своего хука, получится такой код:
    Код:
        public function install()
        {
            if (!parent::install()
            || !$this->registerHook('top')
            || !$this->registerHook('header')
            || !$this->registerHook('displayMobileTopSiteMap')
            || !$this->registerHook('displayNew')
            )
                return false;
            return true;
        }
    
    2. Вывести модуль в хуке метод display, находишь код:
    Код:
        public function hookTop($params)
        {
            $key = $this->getCacheId('blocksearch-top'.((!isset($params['hook_mobile']) || !$params['hook_mobile']) ? '' : '-hook_mobile'));
            if (Tools::getValue('search_query') || !$this->isCached('blocksearch-top.tpl', $key))
            {
                $this->calculHookCommon($params);
                $this->smarty->assign(array(
                    'blocksearch_type' => 'top',
                    'search_query' => (string)Tools::getValue('search_query')
                    )
                );
            }
            Media::addJsDef(array('blocksearch_type' => 'top'));
            return $this->display(__FILE__, 'blocksearch-top.tpl', Tools::getValue('search_query') ? null : $key);
        }
      
        public function hookDisplayNav($params)
        {
            return $this->hookTop($params);
        }
    первая функция задает определенные параметры для хука Top, а вторая повторяет эти параметры для хука Nav. Поэтому ниже пишем функцию вывода и свои параметры для нее или же копируем параметры существующего хука, т.е. добавляем такой код
    Код:
        public function hookDisplayNew($params)
        {
            return $this->hookTop($params);
        }
    который скопирует параметры хука Top
    3. Удаляем и заного инсталлируем модуль, после чего он появится на странице.
    П.С. этот код взял из модуля "блок быстрого поиска", у твоего модуля код может немного отличаться, но методы остаются прежними REGISTER и DISPLAY
     
    Последнее редактирование: 25 окт 2014
    yuazakharov, devilinside, Menro и ещё 1-му нравится это.
  4. kikorik

    kikorik Постоялец

    Регистр.:
    13 май 2012
    Сообщения:
    115
    Симпатии:
    4
    Помогите пожалуйста с выводом модуля Display products as tabs on hompage в хуке на странице карточки товара. Создала новый хук. Прописала строчку для его регистрации в файле homepagetabs.php. Дописала строку

    public function hookDisplayNuevoHook($params)
    {
    return $this->hookDisplayHome($params);
    }
    Добавила {hook h='displayNuevoHook'} в карточку товара.
    Модуль выводится, но товар в таабах не отображается сразу как на главной, а показывается только при нажатии на один из табов.
    [​IMG]
     
  5. Вадим Данилкин

    Вадим Данилкин Создатель

    Регистр.:
    9 окт 2013
    Сообщения:
    17
    Симпатии:
    13
    ну значит модуль все таки выводится)) к сожалению у меня такого нет, поэтому я вряд-ли смогу помочь, но думаю, что дело скорее всего в скрипте модуля.
    Кстати попробуйте удалить этот модуль из хука на главной и оставить только там где надо.
     
    Последнее редактирование: 7 дек 2014
  6. kikorik

    kikorik Постоялец

    Регистр.:
    13 май 2012
    Сообщения:
    115
    Симпатии:
    4
    Уже пробывала, не получается. Первая вкладка, которая должна быть активной, по прежнему не активна. Могли бы Вы помочь? Возможно не правильно прописала отображение в хуке
     
  7. yurok800

    yurok800 Постоялец

    Регистр.:
    26 ноя 2013
    Сообщения:
    47
    Симпатии:
    2
    не могли попроще сделать как на Joomla? бред с хуками - аппетит отбивает от настройки, не разберусь уже неделю с ними
     
  8. мапрнене

    мапрнене Создатель

    Регистр.:
    20 дек 2014
    Сообщения:
    19
    Симпатии:
    0
    ребят подскажите пожалуйста как на главной выводить не популярные и не новые товары, а просто товары в нужном мне количестве?
     
  9. zetabit

    zetabit Создатель

    Регистр.:
    21 апр 2014
    Сообщения:
    26
    Симпатии:
    6
    тут ведь есть http://doc.prestashop.com/display/PS16/Managing Hooks
    надо добавить в модуле, там где устанавливаются хуки при установке модуля


    затем в вашем шаблоне tpl
    а сори не заметил, проблема с модулем , если выводится не как надо, смотрите сам модуль :)
     
  10. Вадим Данилкин

    Вадим Данилкин Создатель

    Регистр.:
    9 окт 2013
    Сообщения:
    17
    Симпатии:
    13
    Добавлю, что начиная с версии Престашоп 1.6.0.11 разработчики добавили возможность переопределения (override) файлов ядра модуля. Т.е. теперь не нужно изменять файл Модуль.php и лишаться тем самым возможности его обновления, а достаточно добавить файл с таким же именем в папку override/modules/изменяемыйМодуль/изменяемыйМодуль.php и вносить все необходимые изменения именно туда.
    Важно! Файл должен содержать обязательную конструкцию:
    Код:
    <?php
    if (!defined('_CAN_LOAD_FILES_'))
        exit;
    class BlockSearchOverride extends BlockSearch (здесь заменяете на свое название блока)
    {
    ваш код находится здесь
    }
    внутрь которой соответсвенно вставляете свой код

    Ну и конечно, после всех изменений, не забыть удалить файл class_index.php из директории /cache
     
    yuazakharov, devilinside и Kolfg нравится это.