Вывод в теме
Обновлено
Автоматический вывод через хук
Плагин возвращает HTML в область footer события frontend_post. Место вывода определяет тема Блога. Для работы включите общие переключатели и «Вывод по хуку» нужных списков.
Если тема не выводит эту область, включения настроек недостаточно. Разработчику нужно подключить вывод области в теме либо использовать хелпер в нужном месте шаблона.
Переопределение оформления
Создайте в активной теме приложения «Блог» нужный файл:
| Файл темы | Что меняет | Данные |
|---|---|---|
ewblogproducts_plugin.frontend_post.html |
Вывод через хук | $lists — массив списков |
ewblogproducts_plugin.frontend_post_text.html |
Замены тегов внутри текста | $list — один список |
В качестве основы используйте поставляемые с плагином шаблоны templates/actions/frontend/FrontendPost.html и templates/actions/frontend/FrontendPostText.html. В оба передаётся также $plugin_version.
Список из настроек содержит id, title, description, products_list, hook, create_datetime, sort, а при подготовке для вывода дополнительно products_ids и products.
products — строки привязок, а не полные карточки товаров: id привязки, post_id, list_id, product_id, create_datetime, sort. Для названий, ссылок и цен нужно запросить товары через хелпер Магазина, как в стандартных шаблонах.
При теге с ids объект $list содержит только products_ids и products с product_id. В общем шаблоне вставок проверяйте наличие дополнительных полей, прежде чем использовать их.
Получить все списки: getLists
Метод getLists($post_id) возвращает все списки с привязками указанной записи, включая списки с выключенным «Вывод по хуку». Сам метод HTML не выводит и запасную подборку не загружает. Для пустого ID возвращается пустой массив.
Пример в шаблоне, где $post.id — ID текущей записи:
{if !empty($wa->blog->ewblogproductsPlugin->version())}
{$lists = $wa->blog->ewblogproductsPlugin->getLists($post.id)}
{foreach $lists as $list}
{if !empty($list.products_ids)}
<h3>{$list.title|escape}</h3>
<p>ID товаров: {implode(', ', $list.products_ids)|escape}</p>
{/if}
{/foreach}
{/if}Общие переключатели вывода этот метод не проверяет. Если при собственном выводе нужно учитывать настройку списка, проверяйте $list.hook — значение хранится строкой 'true' или 'false'.
Получить привязки одного списка: getListProducts
getListProducts($post_id, $list_id) возвращает строки привязок в порядке sort ASC. Оба аргумента обязательны. Если один из ID пуст, результат — пустой массив.
Ниже 1 — пример ID списка плагина. Замените его на свой. Код запрашивает полные данные товаров и проходит по привязкам, сохраняя их порядок:
{if !empty($wa->blog->ewblogproductsPlugin->version())}
{$links = $wa->blog->ewblogproductsPlugin->getListProducts($post.id, 1)}
{if !empty($links)}
{$ids = []}
{foreach $links as $link}
{$ids[] = $link.product_id}
{/foreach}
{$products = $wa->shop->products("id/{implode(',', $ids)}", null, null, ['fields' => '*,sku_filtered'])}
<ul>
{foreach $links as $link}
{if isset($products[$link.product_id])}
{$product = $products[$link.product_id]}
<li>
<a href="{$product.frontend_url|escape}">{$product.name|escape}</a>
{shop_currency_html($product.price)}
</li>
{/if}
{/foreach}
</ul>
{/if}
{/if}Этот пример показывает только привязанные товары. Для поддержки запасной подборки используйте данные getLists и ветку с $wa->shop->productSet(...) из штатного шаблона.
Цены и валюта
Штатный вывод через хук и вставки в текст рендерится с учётом валюты витрины Магазина, на которую ведут ссылки товаров. Если валюта уже задана маршрутом или посетитель выбрал её в Магазине, плагин не подменяет её.
Хелперы getLists и getListProducts только читают привязки и не запускают эту обёртку рендеринга. При собственном выводе проверяйте цены и валюту в контексте своей темы и маршрутов.