Добавление нового хука в ПрестаШоп 1.5

imagesСегодня я расскажу вам о быстром способе добавления нового хука.Если вы занимались добавлением нового хука в ПрестаШоп версии 1.4, то возможно помните, что для этого необходимо было прописать его в базе данных, а затем переопределить один из контроллеров, чтобы зарегистрировать его исполнение. В версии 1.5 был введен новый и более простой способ. На примере я покажу как это делается.

Для демонстрации добавления нового хука я создам простой модуль с помощью редактора –  Модуль ddlx_editor  и назову его  new_hook_ps.  Теперь нам необходимо определиться в каком месте мы хотим создать новый хук, для примера я выбрал место над основным хуком top. Соответственно и назову его так, что бы в последствии можно было по названию узнать где  его местоположение-overtop. Теперь для регистрации нового хука достаточно прописать в файле шаблона вашей темы следующую строчку

 

В нашем случае прописываем в файле шаблона header.tpl над строчкой  {$HOOK_TOP}

 

Вернемся к созданному модулю. Откроем файл модуля new_hook_ps.php с помощью редактора Notepad++  и добавим регистрацию модуля в новом хуке

 

И изменим вывод файла шаблона модуля new_hook_ps.tpl в новом хуке

 

Для наглядности в файле new_hook_ps.tpl я написал два номера телефона

 

Сохраняем и устанавливаем модуль. Переходим на главную страницу сайта и наблюдаем работу модуля в созданном хуке.

topander

Для проверки регистрации хука в базе данных зайдите в phpMyAdmin и проверьте наличие записи о новом хуке как на картинке

bd

Вот и все, правда же быстро?

До встречи на страницах  http://webnewbie.ru/

 

 

Comments (20)

Дмитрий
07.06.2013 - 16:57 / Ответить

Уточните мне пожалуйста, в какой файл и где иммено прописать {hook h=’overtop’}. У меня преста 1,5

07.06.2013 - 18:36 / Ответить

Для данного примера редактируем шаблон header.tpl и в примере указано точно куда вставлять код.

Иван
03.12.2013 - 03:22 / Ответить

Что такое class=”grid_6 omega”?
Это что-то с css?
Как указать точное расположение хука?

03.12.2013 - 04:08 / Ответить

В ПрестаШоп используется сеточная верстка и да class-это связано с css. Точное расположение хука вы можете посмотреть в статье Визуальные хуки в ПрестаШоп там все хуки выделены цветом. А чтобы в хуке расположить Ваш объект в нужном месте, нужно хотя бы немного знать css.

Роман
17.07.2013 - 11:24 / Ответить

Здравствуйте, спасибо за подробную статью, все сделал как написано, но модуль появляется в двух хуках (даже тот который вы для примера выложили – в овертопе и сайтбаре). Переделывал другие модули, для того чтобы их можно было перенести в овертоп, но они показываются тоже в 2 хуках одновременно. Уже все перепробовал – в php файле удалял возможность установки куда-то кроме овертопа, удалял отображение в ненужных хуках через админку – бесполезно, в этих случаях вообще ничего не отображается. Только в двух позициях работает. Подскажите плз как это исправить. Спасибо

17.07.2013 - 12:40 / Ответить

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

17.07.2013 - 15:14 / Ответить

Роман, получил ваши файлы. Исправлять ошибки и высылать готовые модули не стану, расскажу в чем ошибки, вы попрактикуетесь и в дальнейшем будет легче. По модулю menu_module смотрите строка 25-регистрация модуля в хуке [php]OR !$this->registerHook(‘overtop’)[/php], тут правильно. А дальше совершаете ошибку. В строке 35 сразу же пытаетесь опубликовать шаблон в хуке, без условий. Причем оставляете публикацию шаблона в хуке RightColumn (смотрите строку 105). Поменяйте в строке 105 хук, для вывода шаблона, а функцию в строках 35-38 удалите. Этот модуль вам понадобиться однажды для регистрации хука, потом можно будет его удалить, а хук останется зарегистрирован и прописан в базе данных. Теперь смотрите модуль blocktopmenu. Совершаете почти те же ошибки. Оставляете регистрацию модуля в хуке top (строка 75) и добавляете еще один хук overtop. Причем вывод шаблона в хуке overtop делается без условий (строка 738), а для хука top все оставляете без изменений (строка 746). На самом деле все очень просто-надо заменить в коде файла blocktopmenu.php слова top на overtop и все дела. Итог, исправляете menu_module, устанавливаете его(не забывайте внести изменения в файле header.tpl) . Затем удаляете этот модуль. Вносите изменения в модуле blocktopmenu и устанавливаете модуль, который будет выведен в новом хуке. PS все изменения в модулях следует делать только тогда, когда модули деинсталированы в админке. Надеюсь пояснил понятно.

Роман
17.07.2013 - 17:29 / Ответить

Большое вам спасибо за развернутый ответ. Подправил модуль menu_module, стал отображаться 1 раз в нужном месте. А blocktopmenu не поддается. Ото,ражается в overtop, но я так понял без условий, так как просто список ссылок в столбик без учета css. В blocktopmenu.php у меня сейчас прописано там где регистрация хуков:
!$this->registerHook(‘overtop’) ||
про top я вообще строку удалил

а там где условия (738) – было public function hookdisplayTop($param)
заменил на public function hookovertop($param)

что я упускаю?

18.07.2013 - 01:09 / Ответить

Я же вроде нормально написал, заменить слово top на overtop. Вы же меняете целые выражения hookdisplayTop на hookovertop. Как пример, меняем hookdisplayTop на hookdisplayovertop.

Роман
18.07.2013 - 01:44 /

Я первым делом сделал, так как вы написали, но с hookdisplayovertop вообще ни чего не выводится. Я подумал, что у overtop Техническое имя overtop, а у Top Техническое имя:displayTop. По этому написал без display. В таком варианте хоть что-то показывается. Целый день сегодня бьюсь над этим способом переноса модулей в новый хук и все переносятся в виде неоформленных ссылок. В вашем примере телефон выводится нормально, потому что там нет ни какого оформления, а если попробовать перенести существующие модули – корзину, поиск или то же меню, то нормально не выводится в новом хуке.

18.07.2013 - 02:54 /

При переносе модуля в любом случае придется делать новые стили. А по поводу названий хуков зайдите в любой модуль и нажмите управление хуками->расположение модуля и посмотрите, что “Top of pages” известен как “displaytop” Приставка display добавилась для версии 1.5, при регистрации модуля в хуке можно писать как просто top, а можно как displaytop. Движок понимает и так и так.

Роман
18.07.2013 - 12:01 / Ответить

2 дня убил на статью, думал эти знания стоят того чтобы разобраться. Но в итоге оказалось, что новый хук мы создавать научились, но перенести туда что-то нормально не получится. «…в любом случае придется делать новые стили» а если мне нужно чтобы новые стили были идентичны старым? Пусть даже я свои какие-то напишу, они не хотят учитываться в новом хуке. Прописывал для теста стили некоторым элементам в tpl файл, создавал свои файлы в папке css, указывал к ним пути в php файле, пробовал еще несколько менее очевидных способов – ни какого эффекта. А если нужно, например, корзину перенести, значит, человеку придется кроме css еще и яваскрипты осваивать, чтобы все плавненько работало. Вряд ли подобные статьи читают люди с глубокими знаниями в программировании. Напишите в конце статьи «Таким образом, вы можете разместить в новом хуке простую текстовую информацию. Перенести в него существующий модуль, сохранив его функциональность и внешний вид, не получится». Сбережете людям время.

18.07.2013 - 13:21 / Ответить

Вывод правильный, Роман, новый хук Вы научились делать. А дальше, если не хотите развиваться, бросьте все. Два дня на статью-смешно, я свой первый модуль делал три месяца. Все на тарелочке с голубой каемочкой-это к фрилансерам. И кстати, если вы хотите перенести меню в верхнюю часть страницы, то можно сделать все через стили и новый хук Вам не понадобиться. Удачи и терпения.

Андрей
17.10.2013 - 22:58 / Ответить

Евгений, привет. Спасибо за урок. Возник дополнительный вопрос, я воспользовался способом в статье чтобы переместить вывод Вашего модуля blockshare в другое место и все четко получилось:
1) s35-temporary-files.radikal.ru/073dad40bf7e4e33aafd1ddd98bd659e/-929206895.png
но модуль стал не правильно отрабатывать, например при нажатии на vk он не добавляет описание товара и картинку не вставляет, лишь это:
2) s35-temporary-files.radikal.ru/2bc79572fb604f4cb8f355d8416ce536/-929206895.png

Возможно этот баг вызван чем-то другим(?) просто помню что до этой модификации он отрабатывал четко.. :(

18.10.2013 - 11:15 / Ответить

Андрей, скрипт обрабатывает информацию блока в котором он помещен и передает его описание в соц сети. В вашем случае решить лучше не добавлением хука, а использовать существующие смотрите статью описания хуков

Андрей
19.10.2013 - 01:32 / Ответить

Я попробовал разобраться и действительно сумел обойтись без создания нового хука. Я удалил текущий модуль (вместе с файлами модуля на сервере) и залил “чистую” версию модуля 1.1, далее в файле blockshare.php я прописал его вывод в >> if (!$this->registerHook(‘displayLeftColumnProduct’))
но по прежнему как на прошлом скрине нет описания и картинки товара, тогда я снова удалил модуль и залил его “чистую” версию без каких либо изменений но мод по прежнему не хочет отрабатывать как положено (как было раньше).
Искал в БД по всем таблицам следы (поиск -> blockshare), но никаких следов поиск не выдал (через пма). Гдеж я мог накосячить, может ли это быть из-за темы (у меня leo theme drink)?

19.10.2013 - 09:32 / Ответить

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

Андрей
19.10.2013 - 13:35 /

Не возможно но факт,)) я поставил голую престу 1560 нп локал хост тут же поставил модуль blockshare 1.1 зашел в демо товар нажимаю на кнопку вконтакте – тоже самое, полаю только заголовок страници (meta title) без описния товара и картинки ..но как это возможно?) У вас на сайте все четко работает у меня не хочет .. Ваш модуль у меня 100% работал, но единственное что изменилось я обновил престу на 1560, может она виновата? ) ща пойду тестить на 1550 :(

19.10.2013 - 14:13 /

Все может быть, я лично ещё не опробовал версию 1.5.6.0. И если вы сами еще не определились с версией советую почитать свежую статью http://webnewbie.ru/modules/blogwp/wordpress/prestashop/optimizaciya-proizvoditelnosti-magazina-prestashop-1-5.html

Андрей
19.10.2013 - 14:30 / Ответить

Колдовство, я не могу объяснить это на локалхосте на чистой 1541 модуль не хочет работать .. с симптомами как выше. У модуля же нет никаких зависимостей?
Спасибо за статью по оптимизации) но уж больно она для новичков я использую впс, раскатал по ssh связку nginx + apache + mysql + apc это я понимаю оптимизация, слава богу хабр помогает полезными статьями по настройке такой связки. Пошел за шаманским бубном)

Leave a Reply