Вывод в теме
Обновлено
Шорткоды в тексте записи
| Шорткод | Результат |
|---|---|
[ewblogfaq] |
Собственные вопросы текущей записи |
[ewblogfaq set=12] |
Готовый набор с идентификатором 12 |
Используйте идентификатор из шорткода в интерфейсе плагина. Для параметра set поддерживаются цифры без кавычек. Шорткоды обрабатываются хуком prepare_posts_frontend в тексте записей «Блога».
Если у записи нет собственных вопросов, набор не существует или в нём нет вопросов, соответствующий шорткод заменяется пустой строкой. При выключенной настройке «Статус плагина» распознаваемые шорткоды также удаляются из выводимого текста.
Вставка [ewblogfaq] исключает повтор собственных вопросов в подвале. Вставка готового набора шорткодом не отключает его автоматический вывод в подвале. Чтобы не получить повтор, выключите у этого набора «Выводить этот набор в подвале всех записей» либо выключите общий вывод по хуку.
Под текстом записи показаны три раскрытых вопроса с ответами.
Автоматический подвал
Плагин возвращает 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 запасной стиль показывает ответы сразу, если шаблон подключения файлов выведен.