#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, имея только один модификатор Smartydo_shortcode
, который делает все (точно так же, как функцияdo_shortcode
WordPress).
В прошлый раз, когда я делал это, это было потому, что мой клиент хотел разместить слайд-шоу на некоторых страницах CMS, и я выбрал второй подход, потому что он дает большую гибкость в отношении того, когда отображается модуль и где он отображается между содержимым. Для чего-то другого, например, контактной формы или карты, это было бы излишним, и первый подход лучше.