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

Хелперы для объединения отзывов о товарах группы (плагин "Группы товаров")

Поддержка Bodysite
Поддержка Bodysite
28 мая 2021 13:35
+3

Начиная с версии 1.2 в плагине "Группы товаров" есть хелперы для получения сгруппированных отзывов. 

Внимание! Для внедрения хелперов нужен опыт редактирования PHP-кода.

Если вы не уверены в своих возможностях, пожалуйста, обратитесь к компетентному специалисту.

Конфигурационный файл:

Для начала, необходимо в конфигурационном файле перечислить id групп, по которым отзывы товаров будут объединяться. Сделать это нужно по адресу: wa-config/apps/shop/plugins/productgroup/config.php. Если такого файла нет - его нужно создать. 

ID группы можно подсмотреть в стандартных хелперах, пример:

Из стандартного хелпера видно, что ID группы равен пяти: {shopProductgroupViewHelper::getCategoryProductBlock($product.id, 5)}

Пример содержимого конфигурационного файла:

<?php

return array(
    'reviews_group_ids' => array(1,2,3),
);

Доступные Хелперы:

{$rating_info = shopProductgroupWaProductReviewsHelper::getProductRatingInfo($product)}

- Возвращает общие данные о рейтинге товара

{$rating_info.average_rate} - средний рейтинг
{$rating_info.reviews_count} - количество опубликованных отзывов

{$products_rating_info = shopProductgroupWaProductReviewsHelper::getProductsRatingInfo($products)}
- Возвращает общие данные сразу для нескольких товаров. Удобно использовать на странице категории, например.

{foreach $products_rating_info as $product_id => $rating_info}

{$rating_info.average_rate} - средний рейтинг

{$rating_info.reviews_count} - количество опубликованных отзывов

{/foreach}

Пример использования (Одинаковые количество отзывов и оценка у выделенных товаров из одной группы):

{$count_by_rate = shopProductgroupWaProductReviewsHelper::getProductReviewsCountByRate($product)}

- возвращает количество отзывов для каждой оценки.


{$count_by_rate['5']} - количество отзывов с оценкой 5

Пример использования:

{$reviews = shopProductgroupWaProductReviewsHelper::getProductReviews($product)}

- возвращает массив отзывов для товара, максимум 20 штук, без ответов. Формат данных - как у стандартных отзывов.

{shopProductgroupWaProductReviewsHelper::appendProductLabelToReviews($reviews)}
- Добавляет каждому отзыву в массиве данные группы.

{foreach $reviews as $review}

{$review.group_label} - название группы, по которой отзывы были собраны. Если их несколько - берем первую.

{$review.product_label} - настройка "Название ссылки" у товара группы.

{/foreach}

Пример использования: 

{$reviews_collection = shopProductgroupWaProductReviewsHelper::buildCollection($product)}

- Возвращает экземпляр класса shopProductgroupProductGroupReviewsCollection. Для гибкого и продвинутого использования.

Настройка:
Эти методы возвращают экземпляр класса - надо сохранять в переменной, иначе smarty выдаст ошибку.

В скобках - значения по умолчанию
{$_ = $reviews_collection->setOffset(20)} - задать сдвиг от начала (0)
{$_ = $reviews_collection->setLimit(50)} - количество отзывов (20)
{$_ = $reviews_collection->setSort('id', 'ASC')} - задать поля сортировки ('datetime', 'DESC'). Используются поля таблицы shop_product_reviews
{$_ = $reviews_collection->setRateFilter(5)} - фильтрация по оценке(не задана). Например, взять отзывы только с оценкой 5
{$_ = $reviews_collection->setStatusFilter('deleted')} - фильтрация по статусу отзыва ('approved'). Например, так получим только удаленные отзывы
{$_ = $reviews_collection->removeRateFilter()} - убирает фильтрацию по оценке
{$_ = $reviews_collection->removeStatusFilter()} - убирает фильтрацию по статусу

Получение данных:
{$is_empty = $reviews_collection->isEmpty()} - true, если нет отзывов
{$reviews = $reviews_collection->getReviews()} - список отзывов
{$reviews_with_replies = $reviews_collection->getReviewsWithReplies()} - список отзывов. У каждого есть поле 'comments' - массив ответов на отзыв
{$reviews_count = $reviews_collection->count()} - количество отзывов в коллекции (*)
{$average_rate = $reviews_collection->averageRate()} - средний рейтинг коллекции (*)
{$count_by_rate = $reviews_collection->countByRate()} - возвращает количество отзывов для каждой оценки (*)

* - не учитывает offset/limit, но учитывает фильтрацию по оценке/статусу