Лента в теме
Обновлено
Готовый блок
Добавьте код в 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 и данные фильтров. Ориентируйтесь на исходный шаблон при сохранении логики фильтров и подгрузки.
Удаление файла переопределения возвращает стандартный шаблон. Изменять файлы самого плагина для смены вёрстки не требуется.