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

Menro

web, seo, email, hack
Регистрация
27 Янв 2008
Сообщения
689
Реакции
138
Всем привет!
Совсем недавно столкнулся с 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. Устанавливается, в хуках отображается как надо. А на сайте не появляется.

Что не так? Мне нужно что бы модуль отображался на каждой странице... Помогите пожалуйста!
 
Еще с расположениями поработать в админке придется. Для просмотра ссылки Войди или Зарегистрируйся

И попробуй прописать в хук куда вывести хочешь и в хук displayHome
 
Последнее редактирование модератором:
Для начала выключи кеширование и включи перекомпиляцию - будеш уверен что страница обновляется со всеми изменениями кода.
записывать хук в БД самостоятельно нет необходимости, преста 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
 
Последнее редактирование:
Для начала выключи кеширование и включи перекомпиляцию - будеш уверен что страница обновляется со всеми изменениями кода.
записывать хук в БД самостоятельно нет необходимости, преста 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

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

public function hookDisplayNuevoHook($params)
{
return $this->hookDisplayHome($params);
}
Добавила {hook h='displayNuevoHook'} в карточку товара.
Модуль выводится, но товар в таабах не отображается сразу как на главной, а показывается только при нажатии на один из табов.
851eab026467.jpg
 
ну значит модуль все таки выводится)) к сожалению у меня такого нет, поэтому я вряд-ли смогу помочь, но думаю, что дело скорее всего в скрипте модуля.
Кстати попробуйте удалить этот модуль из хука на главной и оставить только там где надо.
 
Последнее редактирование:
Уже пробывала, не получается. Первая вкладка, которая должна быть активной, по прежнему не активна. Могли бы Вы помочь? Возможно не правильно прописала отображение в хуке
 
не могли попроще сделать как на Joomla? бред с хуками - аппетит отбивает от настройки, не разберусь уже неделю с ними
 
ребят подскажите пожалуйста как на главной выводить не популярные и не новые товары, а просто товары в нужном мне количестве?
 
тут ведь есть Для просмотра ссылки Войди или Зарегистрируйся
надо добавить в модуле, там где устанавливаются хуки при установке модуля


public function install()
{
if (!parent::install()
|| !$this->registerHook('top')
|| !$this->registerHook('header')
|| !$this->registerHook('displayMobileTopSiteMap')
|| !$this->registerHook('displayNew')
)
return false;
return true;
}
затем в вашем шаблоне tpl
{hook h='displayNew' mod='название_модуля'}

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

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