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

Вывод в теме

Обновлено

Готовый блок: render()

Добавьте код в нужное место шаблона витрины Shop-Script:

{if !empty($wa->shop->ewshoptgpostsPlugin->version())}
    {$wa->shop->ewshoptgpostsPlugin->render()}
{/if}

Метод возвращает HTML блока. Если нет токена, username или постов, результат пустой. При отсутствии файла шаблона метод также возвращает пустую строку.

Пример с тремя постами и собственным заголовком:

{if !empty($wa->shop->ewshoptgpostsPlugin->version())}
    {$wa->shop->ewshoptgpostsPlugin->render(['count' => 3, 'title_text' => 'Новости канала'])}
{/if}

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

Параметры render() и getPosts()

Оба метода принимают массив $options. Параметры вызова имеют приоритет над настройками выбранной витрины.

Параметр Назначение Если не указан
storefront Ключ витрины в формате домен + / + URL маршрута, включая *, если он есть в маршруте. Специальное значение general выбирает общие настройки. Текущая витрина. Если её настроек нет, используются общие.
channel_username Username канала, с @ или без. «Username канала».
bot_token Токен бота. Для обычного вывода храните его в настройках, а не в шаблоне. «Токен Telegram-бота».
count Число постов. Целое; при значении ≤ 0 используется 5, максимум — 100. «Количество постов».
cache_ttl Время кэширования в секундах. 0 отключает кэш; отрицательное значение приводится к 0. «Кэш, секунд».
channel_name Отображаемое имя. Пустая строка заменяется на Telegram. «Отображаемое имя».
channel_link Ссылка из заголовка и имени. «Ссылка на канал».
title_text Заголовок блока. Пустая строка заменяется на отображаемое имя. «Заголовок блока».

Принудительный выбор общих настроек:

{if !empty($wa->shop->ewshoptgpostsPlugin->version())}
    {$wa->shop->ewshoptgpostsPlugin->render(['storefront' => 'general'])}
{/if}

Собственный вывод: getPosts()

Метод возвращает массив с ключами settings и posts. При отсутствии обязательных параметров или перехваченном исключении верхнего уровня возвращается пустой массив. Успешный результат может содержать пустой posts.

{if !empty($wa->shop->ewshoptgpostsPlugin->version())}
    {assign var=tg_data value=$wa->shop->ewshoptgpostsPlugin->getPosts(['count' => 3])}
    {if !empty($tg_data.posts)}
        <h2>{$tg_data.settings.title_text|escape}</h2>
        {foreach $tg_data.posts as $post}
            <article>
                <strong>{$tg_data.settings.channel_name|escape}</strong>
                <p>{$post.text|escape|nl2br}</p>
                {if !empty($post.attachments.photos.0.url)}
                    <img src="{$post.attachments.photos.0.url|escape}" alt="" loading="lazy">
                {/if}
                <a href="{$post.url|escape}" target="_blank" rel="noopener">Читать в Telegram</a>
            </article>
        {/foreach}
    {/if}
{/if}

В этом примере ссылка на публикацию выводится и у текстовых постов. Текст приходит без преобразования Telegram entities в HTML; пример экранирует его перед выводом.

Данные settings

Ключ Содержимое
channel_name Отображаемое имя.
channel_link Заданная ссылка на канал.
title_text Итоговый заголовок.
channel_initial Первая буква отображаемого имени.

Данные одного элемента posts

Ключ Содержимое
id message_id публикации в Telegram, целое число; это не внутренний ID строки базы.
chat_id ID чата Telegram.
date Время публикации, Unix timestamp.
text text сообщения или caption фотографии, иначе пустая строка.
url Адрес вида https://t.me/<username>/<message_id>.
attachments.photos Пустой массив или массив с одной выбранной фотографией.
stats.views Значение views входящего сообщения, иначе 0.
stats.forwards Значение forward_from_message_id входящего сообщения, иначе 0. Это не счётчик пересылок.

Элемент attachments.photos содержит file_id, file_unique_id, width, height, file_size, url. Поле url может быть пустым, если адрес получить не удалось. Плагин не делает отдельный запрос актуальной статистики просмотров. Полей media, views на верхнем уровне поста в этом формате нет.

Переопределение шаблона

Скопируйте файл плагина:

wa-apps/shop/plugins/ewshoptgposts/templates/actions/frontend/FrontendPosts.html

В корень активной темы Shop-Script под именем:

ewshoptgposts_plugin.frontend_posts.html

При обнаружении файла в активной теме render() использует его. Если файл не найден, применяется стандартный шаблон плагина.

Переменная шаблона Значение
$posts Массив нормализованных публикаций.
$options Переданные параметры вызова.
$group_name Отображаемое имя.
$group_initial Первая буква имени.
$group_link Ссылка на канал.
$title_text Заголовок блока.

Эти переменные назначает render(); обёртка проверки версии нужна у вызова хелпера в теме, а не внутри самого переопределённого шаблона.

У стандартного шаблона CSS-классы начинаются с ewshopvkposts-, хотя это плагин Telegram. Учитывайте именно эти имена при изменении стилей.