Как включить хуки на страницах CMS?

#smarty #prestashop #prestashop-1.6

#smarty #prestashop #prestashop-1.6

Вопрос:

Я создал пользовательский хук, чтобы я мог включить свой пользовательский модуль в любой файл .tpl с помощью одной строки: {hook h='calcSubstrate'} .

Однако я не могу использовать его на странице CMS, по крайней мере, не с помощью панели администратора — включение кода smarty на странице CMS не приведет к рендерингу, код будет отображаться как есть, в виде текста: {hook h=’calcSubstrate’}.

В качестве альтернативы, если это будет проще / быстрее — как я могу выбрать, на каких страницах будет отображаться мой модуль?

Комментарии:

1. Вы уверены, что в панели администратора Smarty также используется? Если бы это был Smarty, там должна быть информация о том, что модификатор не распознается по умолчанию (но, вероятно, это поведение также можно было бы изменить).

2. Ну, вот о чем мой вопрос — отображает ли панель администратора код Smarty? и если да — как? или, если нет — каким другим способом мы можем включить хуки в выбранные статьи / страницы?

3. Куда вы помещаете этот код — в HTML-файл или в TPL-файл? Если в HTML-файле, это, вероятно, чистый HTML, а не Smarty, поэтому очевидно, что это не сработает. Если панель администратора не использует Smarty, вы не сможете использовать хуки.

4. Ни то, ни другое. Под страницами CMS я не имею в виду какие-либо файлы — я имею в виду статьи с контентом, который вы редактируете в панели администратора, поэтому я предполагаю, что они хранятся в базе данных. Возвращаясь к сути, если панель администратора бесполезна для добавления хуков к выбранным статьям, какой может быть другой способ?

5. Вам придется реализовать свое собственное решение, переопределив класс CmsController. Я бы создал что-то вроде механизма шорткода, который используется в WordPress, который заменяет теги шорткода определенным содержимым.

Ответ №1:

Редактор страницы CMS не распознает никакого кода Smarty. Чтобы включить хуки в выбранные статьи / страницы, я могу предложить два варианта:

  • Включите перехват в шаблон ( cms.tpl ) и проверьте идентификатор текущей страницы, чтобы условно отобразить модуль. Список идентификаторов страниц может быть создан в качестве конфигурации модуля.
  • Создайте модуль для добавления функциональности, аналогичной шорткоду WordPress, к содержимому CMS. Я делаю это с помощью module вместо переопределения CmsController класса, следовательно, я должен отображать содержимое с помощью {$cms->content|module} . Вы можете посмотреть на упрощенный код здесь для вдохновения:https://gist.github.com/tungd/cef0ca1ac1063c1ee90b. Конечно, вы можете сделать его более универсальным, как WordPress, имея только один модификатор Smarty do_shortcode , который делает все (точно так же, как функция do_shortcode WordPress).

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