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

Было бы здорово еще на каком нибудь простеньком примере это увидеть..
Ну допустим мы решили вставить блок поиска в другой хук, раньше мы вносили изменения в файлы ядра модуля, т.е. /modules/blocksearch/blocksearch.php - соответсвенно если наш модуль обновлялся, то все изменения сделанные в нем терялись и он отваливался от добавленного нами хука. Теперь же функция override так же доступна и для модулей.
Создаем новый файл blocksearch.php в папке override, путь получится такой /override/modules/blocksearch/blocksearch.php
Обязательная структура (обертка для вашего кода)
Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;
class BlockSearchOverride extends BlockSearch
{

}

Регистрация нового хука displayTopSearch
Код:
    public function install()
    {
        if (!parent::install() || !$this->registerHook('displayTopSearch') )
            return false;
        return true;
    }

Повторение параметров вывода как у хука Top
Код:
    public function hookDisplayTopSearch($params)
    {
        return $this->hookTop($params);
    }

Весь код будет выглядеть так
Код:
<?php
if (!defined('_CAN_LOAD_FILES_'))
    exit;
class BlockSearchOverride extends BlockSearch
{
    public function install()
    {
        if (!parent::install() || !$this->registerHook('displayTopSearch') )
            return false;
        return true;
    }

    public function hookDisplayTopSearch($params)
    {
        return $this->hookTop($params);
    }
}
 
Спасибо за пример, мне он будет полезен. Очень удобное нововведение..
 
Забавно, несмотря на то что это одно из самых ожидаемых нововведений, разработчики до сих пор не включили это в документацию

Здравствуйте,

Сделала все так, как вы посоветовали по переносу модулей в другой hook, через override, но модуль так и не появился в нужном месте. Научите пожалуйста, что я делаю не так .
Мне нужно перенести модуль BlockUserInfo из displayNav в displayTop. Скопировала ваш код, подправила его под модуль BlockUserInfo, получилось:

<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
class BlockUserInfoOverride extends BlockUserInfo
{
public function install()
{
if (!parent::install() || !$this->registerHook('displayTopUserInfo') )
return false;
return true;
}

public function hookDisplayTopUserInfo($params)
{
return $this->hookTop($params);
}
}

Измения сохранила в папке /override/modules/blockuserinfo/blockuserinfo.php
К сожалению модуль, не появился в displayTop. Как же мне перенести его туда?

Спасибо за ответ.
 
Спасибо за ответ.
если Вы посмотрите оригинальный файл blockuserinfo.php то увидите что выводится этот модуль в хуке displayNav файлом nav.tpl
соответственно если хотите так же то и повторять параметры надо как у хука displayNav
т.е. в Вашем случае код будет
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
class BlockUserInfoOverride extends BlockUserInfo
{
public function install()
{
if (!parent::install() || !$this->registerHook('displayTopUserInfo') )
return false;
return true;
}

public function hookDisplayTopUserInfo($params)
{
return $this->hookDisplayNav($params);
}
}

Помимо этого, напомню, чтобы сработало правило переопределения необходимо в папке cache удалить файл class-index.php
так же Вы читали во втором посте что перекомпиляция включена а кеширование выключено.
Ну и напоследок сбрасываем наш модуль или удаляем и инсталлируем заново - разницы никакой
 
если Вы посмотрите оригинальный файл blockuserinfo.php то увидите что выводится этот модуль в хуке displayNav файлом nav.tpl
соответственно если хотите так же то и повторять параметры надо как у хука displayNav
т.е. в Вашем случае код будет
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
class BlockUserInfoOverride extends BlockUserInfo
{
public function install()
{
if (!parent::install() || !$this->registerHook('displayTopUserInfo') )
return false;
return true;
}

public function hookDisplayTopUserInfo($params)
{
return $this->hookDisplayNav($params);
}
}

Помимо этого, напомню, чтобы сработало правило переопределения необходимо в папке cache удалить файл class-index.php
так же Вы читали во втором посте что перекомпиляция включена а кеширование выключено.
Ну и напоследок сбрасываем наш модуль или удаляем и инсталлируем заново - разницы никакой


Большое спасибо за совет, мой недельный поиск закончен, модуль встал там где надо!
 
если Вы посмотрите оригинальный файл blockuserinfo.php то увидите что выводится этот модуль в хуке displayNav файлом nav.tpl
соответственно если хотите так же то и повторять параметры надо как у хука displayNav
т.е. в Вашем случае код будет
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
class BlockUserInfoOverride extends BlockUserInfo
{
public function install()
{
if (!parent::install() || !$this->registerHook('displayTopUserInfo') )
return false;
return true;
}

public function hookDisplayTopUserInfo($params)
{
return $this->hookDisplayNav($params);
}
}

Помимо этого, напомню, чтобы сработало правило переопределения необходимо в папке cache удалить файл class-index.php
так же Вы читали во втором посте что перекомпиляция включена а кеширование выключено.
Ну и напоследок сбрасываем наш модуль или удаляем и инсталлируем заново - разницы никакой


Здравствуйте,

Может быть я пишу не в тему, но не могу никак разобраться, как редактировать стили модулей, а именно модуль blocklanguages.

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

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

Помогите разобраться пожалуйста.
 
К хукам не имеет отношения, смотрите тпл файлы модуля и файлы стилей цсс.
Ищите тэг <li>...</li> в тпл
 
Спасибо за ответ. Поменяла стили языкового меню через tpl и css все получилось !
 
Назад
Сверху