[1C Битрикс] Отзывы о магазине, отзывы о разделе, отзывы о товаре, отзывы о странице, Битрикс

Совсем недавно я разработал совершенно новый Битрикс модуль Отзывы о магазине, о товаре, о разделе, о странице +
Очень важной его особенностью является внешнее управление отзывами прямо на странице списка отзывов в публичной части, а также возможность 4-мя способами привязать отзывы к товару, к разделу, к странице и по умолчанию без привязки;

В этой статье это и рассмотрим, научимся добавлять отзывы к товару, разделу, к странице и без привязки по умолчанию.

Отзывы о магазине без привязки к чему-либо

За привязку отзывов отвечают вот эти настройки, если их оставить пустыми, то отзывы ни к чему не привязываются

Но возникает вопрос, а что в них передавать?
Если вы встраиваете отзывы в комплексные компоненты (каталог, новости), то необходимо в шаблонах компонента получить какой-то ID и передать в параметры вызова компонента отзывов в соответствующие ключи, например вот так:


Ключ параметра компонента = >  передаваемый ID (значение ключа)

Возможные значения, могут быть определены уже в шаблоне, но можете и сами получать, как удобно

"SECTION_ID"  => $intSectionID, //$arResult['ID'] | $arResult["VARIABLES"]["SECTION_ID"] | $intSectionID
"ELEMENT_ID" => $ElementID, //$arResult['ID'] | $arResult["VARIABLES"]["ELEMENT_ID"] | $ElementID
"URL" => $APPLICATION->GetCurPage(), //$APPLICATION->GetCurDir()

Отзывы о разделе

За привязку отзыва к разделу отвечает поле ID раздела.
В этом случае все отзывы будут привязаны к какому-то разделу сайта, но это условно, в это поле просто передается какой-то ID, это может быть и ID товара, и ID форума, и ID блога и т.д., какой-то условный ID.

Но чаще всего это отзывы о какой-то категории товаров.
Для примера разберем интеграцию комплексного компонента Отзывы о магазине + в раздел каталога Аксессуары на бесплатном готовом решении от 1С-Битрикс.

Будем считать, что решение установлено, модуль вы также установили на сайт, остается его внедрить.
Переходим в нужную страницу раздела каталога

Включаем режим правки и копируем шаблон компонента каталога, название любое



Все, шаблон каталога скопировали и применили, скопировался он в шаблон сайта в папку:
/bitrix/templates/имя_шаблона_сайта/components/bitrix/catalog/template2/

Теперь открываем текущую страницу в визуальном редакторе для редактирования

Удаляем все лишнее из нее, размещаем в ней компонент отзывов и настраиваем как нужно, поле ID раздела в настройках также остается пустым, страницу не сохраняйте, просто скопируйте настроенный код вызов компонента отзывов, а страницу закройте, иначе каталог пропадет со страницы, если сохраните ее.


Далее ищем в скопированном шаблоне файл, в котором выводится список товаров раздела  section.php, но в ной версии Битрикс в нем в самом низу еще есть инклуды вертикального / горизонтального отображения элементов  с фильтром, поэтому, получается нам нужен файл с вертикальным фильтром section_vertical.php
В самом низу этого файла аккуратно вставляем код вызова компонента отзывов и в значение ключа SECTION_ID подставим переменную $intSectionID в нее выше по коду передается ID раздела.
Кстати, перед компонентом я добавил <div style="clear: both;"></div> чтобы не ехала верстка.


Все, компонент отзывов мы настроили на работу с разделами, для каждого раздела каталога теперь будут свои отзывы.
Обновляем страницу Аксессуары и видим в самом низу появился компонент отзывов, но всю картину портят кракозябры)

Вот есть момент с кодировками, по умолчанию кодировка у всех файлов Битрикс, кроме лэнгов, в WINDOWS-1251 и если мы в шаблонах что-то пишем на Русском, то видим такие кракозябры, т.к. сам сайт в кодировке UTF-8.
Здесь надо по правилам хорошего тона выносить все Русские слова в лэнги шаблона, но чтобы от них избавиться быстро просто поменяем в редакторе кодировку файла section_vertical.php на UTF-8 и тогда кракозябры исчезнут, в редакторе PhpStorm 10 это делается здесь, в правом нижнем углу переключайте кодировку и далее в окне жмите Convert


Все, заново обновите страницу раздела и кодировка в отзывах станет нормальной.

Если кнопка добавления отзыва не реагирует, значит надо в настройках компонента включить jQuery.

Все, пробуем добавить отзыв о разделе, если все добавилось, значит мы все сделали правильно, отзывы о разделах работают!

Для проверки корректной работы перейдем в другой раздел, например, в Футболки, там отзывов не будет, все работает верно.


Обратите внимание!
В моем случае был включен вывод заголовка магазина в списке товаров, а т.к. его вызов в самом низу страницы, он перебивает заголовок товара


Необходимо отключить в настройках списка отзывов вывод заголовка


Все отлично, после отключения выводится заголовок раздела, будьте внимательны.

Отзывы о товаре / элементе

За привязку отзыва к товару отвечает поле ID элемента.

В этом случае все отзывы будут привязаны к какому-то товару/элементу, но это условно, в это поле просто передается какой-то ID, это может быть и ID раздела, и ID форума, и ID блога и т.д., какой-то условный ID, также как и с разделами.

Но чаще всего это отзывы о товаре.
Для примера разберем интеграцию комплексного компонента Отзывы о магазине + в товар комплексного компонента каталога на бесплатном готовом решении от 1С-Битрикс.

Будем считать, что решение установлено, модуль вы также установили на сайт, остается его внедрить.

Дабы не скучать в нашей карточке товара, выбираем самый красивый товар/элемент каталога, например, Спортивный Костюм Вечерний Спорт и попробуем интегрировать отзывы в самый низ страницы


За показ детального описания товара в шаблоне комплексного компонента каталога отвечает файл element.php
Шаблон компонента уже скопирован был нами ранее, если вы не копировали, посмотрите как это делается в "Отзывах о разделе".
Находим этот файл и почти в самом низу надо найти условие перед подключением фильтра, вставить туда код вызова компонента отзывов.




Все, отзывы к товару мы подключили, также наблюдаем проблемы с кодировкой, переключаем кодировку файла в UTF-8, как делали в "Отзывах о разделе" и проверяем, добавляем отзыв о товаре.

Отзывы о странице

В этом случае отзывы можно привязать к любой странице сайта, хоть к статической, достаточно в коде вызова компонента отзывов передать в значение ключа  "URL" => ""  адрес страницы, например, с помощью АПИ Битрикс.

1) Передадим адрес текущей страницы без параметров ?clear_cache=Y и т.д.
"URL" => $APPLICATION->GetCurPage()

2) Передадим адрес текущего раздела
"URL" => $APPLICATION->GetCurDir()

Название товара / раздела вместо названия магазина

В настройки компонента в соответствующие ключи можно передать название товара, название раздела, название страницы, вместо названия магазина.

Над компонентом получаете, например, название товара и подставляете в соответствующие ключам значения.
В моем случае в файле element.php я знаю только ID товара ($ElementID), по этому ID я могу получить любую информацию о товаре и передать в настройки компонента, например вот так:

$arSort = array();
$arFilter = array(
    'IBLOCK_ID' => $arParams['IBLOCK_ID'],
    '=ID'       => $ElementID,
);
$arSelect = array('ID','IBLOCK_ID','NAME');
$arElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect)->Fetch();

И подставим вместо названия магазина название товара полученное выше в массив $arElement



Вот что получится в списке отзывов


И в форме добавления отзыва


На мой взгляд очень здорово, будут вопросы, задавайте!

Комментарии
Получать ответы на почту
#54
Как передать товару рейтинг, который мы получили в отзывах. Звёздочки, которые.
Получать ответы на почту
#55
Звездочки несколькими способами можно выводить
1) Через публичные методы
$arRaing = CApiReviews::getElementRating($ELEMENT_ID);
$htmlRating = CApiReviews::getElementRatingHtml($ELEMENT_ID);
2) С помощью компонента
<? $APPLICATION->IncludeComponent(
"api:reviews.element.rating",
"",
array(
"IBLOCK_ID" => "",
"SECTION_ID" => "",
"ELEMENT_ID" => $ELEMENT_ID,
"ORDER_ID" => "",
"URL" => "",
"INCLUDE_CSS" => "Y",
"THEME" => "flat",
"COLOR" => "orange1",
"SHOW_PROGRESS_BAR" => "N",
"REVIEWS_LINK" => "#reviews",
"MESS_FULL_RATING" => "<span>#RATING#</span> из 5 на основе #COUNT# оценок покупателей",
"MESS_EMPTY_RATING" => "Отзывов пока нет, будь первым!",
"COMPONENT_TEMPLATE" => ".default",
"HIDE_BORDER" => "N",
),
false,
array('HIDE_ICONS' => 'Y')
); ?>
На демо-странице можно скачать примеры
https://tuning-soft.ru/demo/api.reviews/
Получать ответы на почту
#58
Хочу отметить, что публичные методы CApiReviews показывают рейтинг с учетом всех отзывов, включая неактивные.
Получать ответы на почту
#64
Спасибо большое! Выгрузил бета-фикс 4.2.1, добавил там еще SITE_ID по умолчанию.
Получать ответы на почту
#59
Как сформировать правильно параметр, чтобы админ в письме получал ссылку на товар в публичном части?
Получать ответы на почту
#65

В этом модуле всегда приходит две ссылки

Проверьте почтовый шаблон:
Тип почтового события: API_REVIEWS_ADD
Сообщение должно быть: #WORK_AREA#

Получать ответы на почту
#78
Поставил - есть несколько вопросов )

1. У меня выводятся поля только рейтинг, комментарий, имя гостя, они же обязательные. Это имя гостя автоматически заполняется, если пользователь залогинен на сайте, точнее в поле стоит placeholder, так вот если я под залогиненным пользователем пишу(!) комментарий, то не отправляется отзыв (вообще ничего не происходит) пока не заполню поле "имя гостя", хотя там стоит подставка правильная, а вот если я ставлю поле комментарий необязательным и не заполняю его, то всё нормально работает и имя передаётся, можно его не трогать.

2. Хотелось бы чтоб отзывы, в которых нету текста, т.е. просто оценку ставят, я так сделал у себя, автоматически скрывались (но не деактивировались), на кой видеть просто имя пользователя и его оценку? ) ну как опция может быть. Или какое то рядом (отдельное может) поле, типа просто оценку хочет человек поставить и всё.

3. Непонятны поля в настройках "Поле первой сортировки" и т.д. это вообще на что влияет? ))) в документации не нашёл, всё истыкал по-разному - никакого эффекта.

4. Чёт вроде много вопросов было, но чёт забыл уже, часов 5 внедрял себе на сайт, устал ) если будет фидбЕк ещё напишу )

Спасибо.
Получать ответы на почту
#81

Здравствуйте!

1) Если ничего не происходит, смотрите ошибки в консоли, в ответе на аякс-запрос.
Я попозже проверю ситуацию. У авторизованного только подсказка есть, чтобы видно было, заполнять не обязательно, т.к .на сайте у него уже должно быть Имя и Фио, в базу отзывов пишется только ID пользователя, но не всегда это подходит, согласен, тут еще предстоит подумать.

2) Не пойму зачем их скрывать? Например, на Гугл Плей там также сделано, но всем показываются.
На мой взгляд, это не несет никакой пользы магазину, они только пространство жрут, все покупатели считывают отзывы, что там покупатели пишут.
Но если что, там вроде глобальный фильтр списку отзывов можно применить, свой, также как и в компонентах инфоблока.

3) Это сортировка для списка отзывов уже при выводе, тут без знаний MySQL-сортировки не поймете, но в целом все просто, каждая сортировка при выборке отзывов из базы применяется в заданном вами порядке, где поля будут совпадать, одинаковые, начнет применяться следующая сортировка, и так до последней, вот кратко так.
Например, у поля SORT везде одинаково 500, тут по полю Сортировка нечего сортировать, применяется следующая сортировка, например по Названию, или наоборот, как вы сами задали.

4) Да, если что, пишите, 5 часов это нормально

Получать ответы на почту
Подписка на статьи
Выберите рассылку
Последние комментарии
Последние комментарии
Кстати, в Windows 7 32 bit максимум 4 GB оперативной памяти можно использовать, даже если зап...
Когда много файлов будет открыто, скорее всего запутаешься в подсветке в дереве, каша получится, с п...
Вообще должна, по умолчанию 32-битный PhpStorm всегда ставился, сам лично не проверял, работаю на Wi...
Прошу ответа(не голословного ОБС, а проверенного) - может ли на Виндовс 7 32 бита работать эта прога...
Возможно временная проблема, 403 это nginx ошибка. Есть еще другая ссылка, там тоже эта ошибка, попр...
http://emmet.io/eclipse/updates адрес не доступен: 403 Forbidden
Да, действительно, спасибо, раньше не замечал. Но там длинная цепочка может быть, подсветка в дереве...