+7 495 008 8452 пн.-пт. 10:00 – 17:00
Загрузка...

Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!


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

Для этого выбрать в настройке профиля "Бонусы за отзыв" в качестве источника "Произвольный обработчик на php"

2022-12-01_20-30-38.png

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

$arFields = [
	"ACTIVE" => "Y" // активность отзыва, если включена настройка бонусного профиля "Проверять активность"
	"USER_ID" => 1, // идентификатор пользователя, который написал комментарий
"POST_ID" => 255 // идентификатор комментируемой сущности (ID товара, ID поста в блоге, ID топика на форуме, ...)
// POST_ID - не обязательно, для того, чтобы давать один бонус за сущность (товар) ] \Acrit\Bonus\Profiles\Review::onEventRun($arFields);

Чаще всего отзывы в сторонних модулях реализованы через класс-наследник Bitrix\Main\ORM\Data\DataManager. Необходимо реализовать два события Bitrix\Main\ORM\Data\DataManager::EVENT_ON_AFTER_ADD и Bitrix\Main\ORM\Data\DataManager::EVENT_ON_AFTER_DELETE, в которых в качестве обработчика вызвать \Acrit\Bonus\Profiles\Review::onEventRun() с параметрами, описанными выше.

Рассмотрим реализацию на примере модуля sotbit.reviews, который пишет отзывы в таблицу b_sotbit_reviews_reviews, используя класс Sotbit\Reviews\ReviewsTable (выяснено из исходного кода модуля. С этим вопросом может помочь тех-поддержка купленного модуля из маркетплейс, если выяснить самостоятельно не получается. Можно дать тех-поддержке ссылку на данную статью).
// init.php ver.2.0
$reviewModuleId = 'sotbit.reviews';
if (Bitrix\Main\Loader::includeModule($reviewModuleId)) {
$checkBonusesWithCustomReviews = static function (Bitrix\Main\Event $event) {
if (! Bitrix\Main\Loader::includeModule('acrit.bonus')) {
return;
}

$id = $event->getParameter('id');
$data = $event->getParameter("fields");
$data += \Sotbit\Reviews\ReviewsTable::getRowById($id);

$arFields = [
"ACTIVE" => $data["MODERATED"], // активность отзыва, если включена настройка бонусного профиля "Проверять активность"
"USER_ID" => $data['ID_USER'], // поле ID_USER в таблице b_sotbit_reviews_reviews
"POST_ID" => $data['ID_ELEMENT'], // поле ID_ELEMENT в таблице b_sotbit_reviews_reviews
];
\Acrit\Bonus\Profiles\Review::onEventRun($arFields);
};

/** @noinspection PhpUndefinedClassInspection */
EventManager::getInstance()->addEventHandler(
$reviewModuleId,
// with no Table-suffix, and ::class-constant hasn't starting backslash:
'\\' . Sotbit\Reviews\Reviews::class . '::' . Bitrix\Main\ORM\Data\DataManager::EVENT_ON_AFTER_ADD,
$checkBonusesWithCustomReviews
);
/** @noinspection PhpUndefinedClassInspection */
EventManager::getInstance()->addEventHandler(
$reviewModuleId,
// with no Table-suffix, and ::class-constant hasn't starting backslash:
'\\' . Sotbit\Reviews\Reviews::class . '::' . Bitrix\Main\ORM\Data\DataManager::EVENT_ON_AFTER_UPDATE,
$checkBonusesWithCustomReviews
);
}




Назад в раздел



Часто задаваемые вопросы по модулям экспорта

Видео плейлист по настройке модулей экспорта