Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!
Для реализации начисления бонусов за отзывы в сторонних модулях, которые пишут отзывы в свое хранилище с версии 3.1.23 модуля бонусов можно интегрировать любой модуль комментариев из маркетплейса как источник комментариев.
Для этого выбрать в настройке профиля "Бонусы за отзыв" в качестве источника "Произвольный обработчик на php"
Вам необходимо реализовать два события:
при добавлении отзыва и при обновлении отзыва, в которых в качестве обработчика вызвать наш метод с параметрами:
$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
);
}
Назад в раздел