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

Лента в теме

Обновлено

Готовый блок

Добавьте код в Smarty-шаблон темы или страницу с обработкой Smarty. Во всех примерах 3 — ID формы в режиме «Отзыв»; замените его своим.

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {$wa->requests->sitereviewsPlugin->render(3)}
{/if}

Проверка version() позволяет пропустить вывод, когда плагин выключен или удалён. render() возвращает готовый HTML и сам подключает CSS и JavaScript один раз на страницу. Несуществующая форма или форма другого режима даёт пустую строку.

Старый вызов через $wa->requests->plugin('sitereviews', 'render', …) поддерживается для совместимости.

Лента отзывов на сайте В ленте показаны средняя оценка, распределение оценок и отзыв с фотографиями.

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

Параметр Назначение По умолчанию
title Заголовок блока Отзывы покупателей
layout list — карточки в столбик, cards — плитки, plain — простой список Настройка «Как показывать ленту», иначе list
limit Число отзывов без постраничного вывода 20
offset Сдвиг без постраничного вывода 0
paging pages — номера страниц, more — кнопка «Показать ещё», scroll — подгрузка при прокрутке false
per_page Число отзывов на страницу, максимум 100 limit, если он задан, иначе 20
page Номер страницы GET-параметр страницы, иначе 1
page_param Имя GET-параметра страницы page
filters Показать меню фильтров и сортировки Настройка «Панель фильтров и сортировки», иначе false
sort date, date_asc, useful, rating_desc, rating_asc GET sort, иначе date
rating Точная оценка от 1 до 5 GET rating, иначе без фильтра
rating_min, rating_max Нижняя и верхняя границы оценки от 1 до 5 Одноимённые GET-параметры, иначе без ограничения
with_photos Только с фотографиями GET with_photos=1, иначе false
with_answer Только с ответом магазина GET with_answer=1, иначе false

Значения сортировки соответствуют порядку: сначала новые, сначала старые, по полезности, сначала высокие оценки, сначала низкие оценки.

Явные значения фильтров и сортировки в вызове имеют приоритет над GET-параметрами. Каждый фильтр разрешается отдельно. rating задаёт точную оценку вместо диапазона.

Передача page или per_page включает расчёт страниц даже без paging, но навигация появится только при выбранном режиме paging. Включённая панель фильтров тоже включает расчёт страниц. Для переходов по длинной ленте задавайте paging явно.

Примеры

Короткий блок для главной страницы:

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {$wa->requests->sitereviewsPlugin->render(3, ['limit' => 5, 'layout' => 'cards'])}
{/if}

Лента с фильтрами и подгрузкой:

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {$wa->requests->sitereviewsPlugin->render(3, ['per_page' => 20, 'paging' => 'more', 'filters' => true])}
{/if}

Для нумерованной навигации замените more на pages, для автоматической подгрузки при прокрутке — на scroll. В режимах more и scroll переход к следующей странице остаётся обычной ссылкой, если JavaScript недоступен.

В меню «Показать» есть все отзывы, отзывы с фото, с ответом магазина, оценки 4–5 и 1–2, а также каждая оценка отдельно. Выбор сортировки сохраняет фильтр. При отсутствии совпадений блок предлагает сбросить фильтры. Сводка в шапке относится ко всем опубликованным отзывам формы, а не только к текущему фильтру.

Данные для своей вёрстки

items(form_id, options) возвращает массив опубликованных отзывов. Поддерживает фильтры, сортировку, limit/offset и постраничные параметры из таблицы. stats(form_id) возвращает общую статистику формы. paging(form_id, options) возвращает сведения о страницах с учётом фильтров.

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {assign var=reviews value=$wa->requests->sitereviewsPlugin->items(3, ['page' => 1, 'per_page' => 10, 'with_photos' => true])}
    {assign var=paging value=$wa->requests->sitereviewsPlugin->paging(3, ['page' => 1, 'per_page' => 10, 'with_photos' => true])}
    {foreach $reviews as $review}
        <article id="review-{$review.id|escape}">
            <b>{$review.author|escape}</b>
            {if $review.rating}{$review.rating|escape} из 5{/if}
            {foreach $review.text_parts as $part}
                <p><b>{$part.label|escape}</b> {$part.text|escape|nl2br}</p>
            {/foreach}
        </article>
    {/foreach}
    <p>Страница {$paging.page} из {$paging.pages}</p>
    {if $paging.next_url}<a href="{$paging.next_url|escape}">Следующая</a>{/if}
{/if}

В этом примере страница зафиксирована для показа структуры данных. Для рабочей навигации уберите page из обоих вызовов: тогда номер будет браться из URL. Передавайте одинаковые фильтры и размер страницы в items() и paging().

Данные отзыва Содержимое
id, created, created_human ID заявки, дата создания и дата для показа
author, initials Имя автора и инициалы
rating, stars Оценка или отсутствие оценки; готовая HTML-строка звёзд
text Все текстовые части вместе
text_parts Части с ключами field_id, label, text
buyer, useful Признак покупателя и число отметок полезности
files Фотографии отзыва, включая name и url
answer Ответ магазина с ключами text, created, либо отсутствие ответа
answer_files Файлы ответа: name, url, is_image

stats() содержит count, average, average_human, stars, distribution, percent, with_photos, with_answer, positive, negative. average_human — средняя оценка с одним знаком после запятой; при отсутствии оценок это пустая строка. distribution содержит число оценок по звёздам, percent — доли среди отзывов с оценкой.

paging() содержит page, pages, per_page, count, has_more, next_url, prev_url. Его count учитывает фильтры; stats().count — нет.

Средняя оценка отдельным блоком

summary(form_id, schema) возвращает HTML сводки. Второй аргумент включает микроразметку и по умолчанию равен true; он независим от настройки формы «Микроразметка Schema.org». Если опубликованных отзывов нет, метод возвращает пустую строку.

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {$wa->requests->sitereviewsPlugin->summary(3, false)}
{/if}

Просмотр фото в своей вёрстке

Для собственной разметки на основе items() подключите assets(form_id). Класс requests-reviews__file у ссылки включает просмотр фото в окне; data-requests-reviews-gallery объединяет фотографии одного отзыва для перелистывания.

{if !empty($wa->requests->sitereviewsPlugin->version())}
    {$wa->requests->sitereviewsPlugin->assets(3)}
    {foreach $wa->requests->sitereviewsPlugin->items(3, ['limit' => 6]) as $review}
        <div data-requests-reviews-gallery>
            {foreach $review.files as $file}
                <a class="requests-reviews__file" href="{$file.url|escape}">
                    <img src="{$file.url|escape}" alt="{$file.name|escape}" loading="lazy">
                </a>
            {/foreach}
        </div>
    {/foreach}
{/if}

Без JavaScript ссылка открывает сам файл. assets() можно вызвать без аргумента; передача ID формы учитывает её настройку анимации в собственной разметке.

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

Поместите копию нужного шаблона в корень активной темы Shop-Script или приложения «Сайт»:

Шаблон плагина Имя файла в теме Назначение
templates/Reviews.html sitereviews_plugin.reviews.html Вся лента: сводка, фильтры, список, навигация
templates/ReviewsItems.html sitereviews_plugin.reviews_items.html Карточки отзывов, в том числе подгружаемые
templates/MyReviews.html sitereviews_plugin.my_reviews.html Страница «Мои отзывы»
templates/MyNav.html sitereviews_plugin.my_nav.html Ссылка раздела в меню личного кабинета

В шаблоне карточек доступны $reviews, $schema, $useful. Для целой ленты также подготовлены $form, $form_id, $summary, $title, $layout, $paging_mode, $paging, $items_template и данные фильтров. Ориентируйтесь на исходный шаблон при сохранении логики фильтров и подгрузки.

Удаление файла переопределения возвращает стандартный шаблон. Изменять файлы самого плагина для смены вёрстки не требуется.