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

Вывод в теме

Обновлено

Шорткоды в тексте записи

Шорткод Результат
[ewblogfaq] Собственные вопросы текущей записи
[ewblogfaq set=12] Готовый набор с идентификатором 12

Используйте идентификатор из шорткода в интерфейсе плагина. Для параметра set поддерживаются цифры без кавычек. Шорткоды обрабатываются хуком prepare_posts_frontend в тексте записей «Блога».

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

Вставка [ewblogfaq] исключает повтор собственных вопросов в подвале. Вставка готового набора шорткодом не отключает его автоматический вывод в подвале. Чтобы не получить повтор, выключите у этого набора «Выводить этот набор в подвале всех записей» либо выключите общий вывод по хуку.

FAQ в тексте записи Под текстом записи показаны три раскрытых вопроса с ответами.

Автоматический подвал

Плагин возвращает HTML в ключе footer хука frontend_post. Тема должна выводить эту область. Нужны включённые «Статус плагина» и «Выводить по хуку».

Сначала выводятся собственные вопросы записи, если их ещё не вывел [ewblogfaq], затем — непустые готовые наборы с включённым «Выводить этот набор в подвале всех записей», в заданном порядке.

Подключение CSS и JavaScript из темы

По умолчанию файлы подключаются вместе с первым блоком FAQ один раз за запрос. Для подключения в конце страницы выключите «Подключать CSS и JS вместе с блоком» и добавьте после контента перед закрывающим </body>:

{if !empty($wa->blog->ewblogfaqPlugin->version())}
    {$wa->blog->ewblogfaqPlugin->assets()}
{/if}

assets() возвращает готовое подключение CSS, JavaScript и запасной стиль для отключённого JavaScript. Если блоков FAQ ещё не отрисовано или файлы уже подключены, возвращается пустая строка. Поэтому вызов нужно ставить после контента, а не в <head>.

При подключении в конце страницы оформление может примениться позже первого отображения блока.

Методы хелпера

Имя свойства хелпера — ewblogfaqPlugin, с окончанием Plugin.

Метод Возвращает
getSets($hook_only = false) Все наборы с вопросами; при true — только отмеченные для вывода в подвале
getSet($set_id) Один набор с вопросами; пустой массив, если набор не найден
getPostItems($post_id) Собственные вопросы записи в порядке сортировки
assets() HTML подключения файлов, когда они нужны и ещё не выведены

Первые три метода возвращают данные, а не готовый аккордеон. Они не проверяют «Статус плагина»; getSets(true) фильтрует флаг самих наборов, не общий переключатель «Выводить по хуку».

Пример получения отмеченных наборов:

{if !empty($wa->blog->ewblogfaqPlugin->version())}
    {$faq_sets = $wa->blog->ewblogfaqPlugin->getSets(true)}
    {foreach $faq_sets as $faq_set}
        <h3>{$faq_set.title|escape}</h3>
    {/foreach}
{/if}

Пример собственного простого вывода набора с условным идентификатором 12:

{if !empty($wa->blog->ewblogfaqPlugin->version())}
    {$faq_set = $wa->blog->ewblogfaqPlugin->getSet(12)}
    {if !empty($faq_set.items)}
        <h3>{$faq_set.title|escape}</h3>
        {foreach $faq_set.items as $faq_item}
            <h4>{$faq_item.question|escape}</h4>
            <div>
                {if $faq_item.format == 'html'}
                    {$faq_item.answer}
                {else}
                    {$faq_item.answer|escape|nl2br}
                {/if}
            </div>
        {/foreach}
    {/if}
{/if}

Этот пример выводит раскрытый список без штатного аккордеона и автоматически не добавляет JSON-LD. Получение вопросов текущей записи в контексте, где тема предоставляет $post.id:

{if !empty($wa->blog->ewblogfaqPlugin->version())}
    {$faq_items = $wa->blog->ewblogfaqPlugin->getPostItems($post.id)}
    {foreach $faq_items as $faq_item}
        <p>{$faq_item.question|escape}</p>
    {/foreach}
{/if}

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

Создайте файл в активной теме дизайна приложения «Блог». При наличии такого файла плагин использует его вместо своего шаблона.

Файл в теме Исходный шаблон в установленном плагине Назначение
ewblogfaq_plugin.frontend_post.html templates/actions/frontend/FrontendPost.html Автоматический подвал записи
ewblogfaq_plugin.frontend_post_text.html templates/actions/frontend/FrontendPostText.html Блок из шорткода
ewblogfaq_plugin.frontend_assets.html templates/actions/frontend/FrontendAssets.html Подключение CSS и JavaScript

Исходные шаблоны находятся в wa-apps/blog/plugins/ewblogfaq/. Удобнее скопировать нужный шаблон в тему под указанным именем и затем изменить его.

Переменные шаблонов блоков

Переменная Содержимое
$sets Массив наборов. Для вывода используются id, title, description, items
$set.items Вопросы набора: id, question, answer, format; формат — text или html
$single_open Логическое значение настройки «Открыт только один вопрос»
$uid Уникальный префикс блока для идентификаторов кнопок и ответов
$faq_jsonld Готовая JSON-строка FAQPage или пустая строка
$include_assets Нужно ли подключить файлы непосредственно в этом блоке
$assets_template Путь к выбранному шаблону подключения файлов
$plugin_version Версия плагина для ссылок на файлы

У собственных вопросов записи набор имеет id = 0, пустые title и description. Шаблону подключения файлов передаётся $plugin_version; не рассчитывайте в нём на переменные блока при отдельном вызове assets().

В шаблоне блока сохраните вывод микроразметки и подключения файлов:

{if !empty($faq_jsonld)}
    <script type="application/ld+json">{$faq_jsonld}</script>
{/if}
{if $include_assets}
    {include file=$assets_template}
{/if}

Для штатного скрипта нужны классы .ewblogfaq-plugin, .ewblogfaq-plugin__item, .ewblogfaq-plugin__question, .ewblogfaq-plugin__answer, атрибут data-single-open у контейнера, связанные id, aria-controls, aria-labelledby и начальное aria-expanded="false". У свёрнутого ответа должен быть hidden. Проще сохранить структуру исходного шаблона.

При использовании штатного шаблона доступны переходы между вопросами стрелками вверх/вниз, клавишами Home и End. В браузере с отключённым JavaScript запасной стиль показывает ответы сразу, если шаблон подключения файлов выведен.