К содержимому
Вывод в теме

Вывод в теме

Обновлено

Автоматический вывод через хук

Плагин возвращает 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 только читают привязки и не запускают эту обёртку рендеринга. При собственном выводе проверяйте цены и валюту в контексте своей темы и маршрутов.