/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/php_interface/init/Handlers/IBlockElementHandler.php
101 строка
4 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php class IBlockElementHandler { /** * Обработчик события перед обновлением элемента инфоблока * * @param array $arFields Массив полей элемента инфоблока * @return void */ public static function OnBeforeIBlockElementUpdateHandler(&$arFields) { } /** * Обработчик события после добавления элемента инфоблока * * @param array $arFields Массив полей элемента инфоблока * @return void */ public static function OnAfterIBlockElementAddHandler(&$arFields) { // Проверка наличия ID и IBLOCK_ID if ($arFields["ID"] <= 0 || empty($arFields["IBLOCK_ID"])) return; } /** * Обработчик события после обновления элемента инфоблока * * @param array $arFields Массив полей элемента инфоблока * @return void */ public static function OnAfterIBlockElementUpdateHandler(&$arFields) { // Проверка наличия ID и IBLOCK_ID if ($arFields["ID"] <= 0 || empty($arFields["IBLOCK_ID"])) return; } /** * Обновление рейтинга товара при добавлении/обновлении отзыва * @param $arFields * @return void */ public static function OnIBlockElementChangeReviews($arFields): void { if (\MWI\Helper\Iblock::getIblockId('reviews_products') == $arFields["IBLOCK_ID"]) { // Получить ID товара $res = \CIBlockElement::GetProperty( $arFields["IBLOCK_ID"], $arFields["ID"], [], array( 'CODE' => 'PRODUCT_ID' ) ); if ($row = $res->GetNext()) { if (!empty($row['VALUE'])) { $arRating = []; $res = \CIBlockElement::GetList( [], ["IBLOCK_ID" => $arFields["IBLOCK_ID"], "ACTIVE" => "Y", "PROPERTY_PRODUCT_ID" => $row['VALUE'], "!PROPERTY_RATING" => false], false, false, ["ID", "IBLOCK_ID", "PROPERTY_RATING"] ); while ($arRatingFields = $res->GetNext()) { if (!empty($arRatingFields['PROPERTY_RATING_VALUE'])) { $arRating[] = intval($arRatingFields['PROPERTY_RATING_VALUE']); } } $elementId = $row['VALUE']; $elementIblock = CIBlockElement::GetIBlockByID($elementId); $totalCount = count($arRating); $totalSum = array_sum($arRating); $rating = ($totalCount > 0 && $totalSum > $totalCount) ? ceil(($totalSum / $totalCount) * 10) / 10 : 0; \CIBlockElement::SetPropertyValuesEx( $row['VALUE'], false, [ 'vote_count' => $totalCount, 'vote_sum' => $totalSum, 'rating' => $rating ] ); \CIBlock::clearIblockTagCache($elementIblock); \Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($elementIblock, $elementId); } } } } }