# Вопросы и ответы Модуль хранит независимые коллекции частых вопросов. Коллекцию можно открыть как отдельную публичную страницу, вставить в любой документ или шаблон и получить через JSON API. Опубликованные вопросы могут автоматически формировать структурированные данные `FAQPage`. ## Быстрый старт 1. Откройте **Модули → Вопросы и ответы**. 2. Создайте коллекцию и задайте стабильный системный код, например `delivery`. 3. Сохраните коллекцию, добавьте вопросы и оформите ответы в rich-text редакторе. 4. Вставьте коллекцию в документ, блок, рубрику или шаблон: ```text [mod_faq:delivery] ``` Тег принимает код или ID, однако код удобнее при переносе данных между установками. Публичная страница по умолчанию будет доступна по адресу `/faq/delivery`, а архив всех опубликованных коллекций — по адресу `/faq`. ## Режимы вывода | Режим | Поведение | | --- | --- | | Аккордеон | Ответ открывается посетителем через нативный элемент `details`. | | Только один открыт | Открытие следующего вопроса сворачивает предыдущий. | | Раскрытый список | Все ответы сразу открыты и доступны без взаимодействия. | Переключатель **Schema.org** добавляет `FAQPage` JSON-LD. В него попадают только опубликованные вопросы опубликованной коллекции. HTML ответа удаляется из структурированных данных, но сохраняется в обычном публичном выводе. ## Шаблоны Шаблон коллекции получает: ```text [tag:id] [tag:code] [tag:title] [tag:description] [tag:mode] [tag:count] [tag:items] [tag:schema] ``` Шаблон вопроса получает: ```text [tag:id] [tag:collection-id] [tag:question] [tag:answer] [tag:group] [tag:open] ``` `[tag:group]` и `[tag:open]` содержат готовые HTML-атрибуты для штатного `details`. Если разметка полностью заменяется, эти теги можно не использовать. Архив использует два шаблона. Его оболочка получает `[tag:items]` и `[tag:count]`, а одна коллекция в архиве — `[tag:id]`, `[tag:code]`, `[tag:title]`, `[tag:description]`, `[tag:count]` и `[tag:url]`. ## API и hook `GET /api/v1/faq/{code-or-id}` возвращает коллекцию и массив опубликованных вопросов. Endpoint подходит для собственного аккордеона или живого интерфейса, который не использует серверный HTML. Фильтр `faq.rendering` получает массив: ```php array( 'collection' => $collection, 'html' => $html, ) ``` Обработчик может изменить `html` и вернуть весь массив. Исходный ответ считается доверенным контентом редактора, поэтому право управления FAQ следует выдавать только сотрудникам, которым разрешено публиковать HTML. ## Удаление Удаление коллекции каскадно удаляет все её вопросы. Uninstall модуля полностью удаляет обе таблицы и данные FAQ. Экспортируйте нужное содержимое до удаления пакета.