В этой серии реализуем событие OnAfterIBlockElementUpdate которое будет автоматически устанавливаеть дату завершения активности объявления, после проверки модератором. Будет прибавлять 14 дней к дате начала активности и записывать в дату завершения активности элемента.
OnAfterIBlockElementUpdate - Событие "OnAfterIBlockElementUpdate" вызывается после попытки изменения элемента информационного блока методом CIBlockElement::Update. В документации: OnAfterIBlockElementUpdate
Также сделаем собственный компонент для вывода объявлений пользователя в личном кабинете, будем учитывать модерацию объявлений и факт завершения активности (по истечению срока публикации). Комопонент сделаем полностью на D7 ORM используя инфоблок как класс.
Текстовый вариант с примерами получения данных из инфоблока с помощью ORM:
ORM в инфоблоках
Чеклист:
- Делаем компонет со списком объявлений пользователя
- Реализуем событие на обновление элемента
Полная версия серии на Boosty: Смотреть
Код |
---|
use Bitrix\Main\EventManager; use Bitrix\Main\Loader; use CIBlockElement; EventManager::getInstance()->addEventHandler( 'iblock', 'OnAfterIBlockElementUpdate', ['UpdateBulletinsElements', 'OnAfterIBlockElementUpdateHandler'] ); class UpdateBulletinsElements { // Создаем обработчик события "OnAfterIBlockElementUpdate" public static function OnAfterIBlockElementUpdateHandler($arFields) { if ($arFields['ACTIVE'] === 'Y' && Loader::includeModule('iblock')) { $currentDate = new \Bitrix\Main\Type\DateTime(); $dateActiveFrom = $currentDate->format('d.m.Y H:i:s'); $dateActiveTo = $currentDate->add('14D')->format('d.m.Y H:i:s'); $el = new CIBlockElement(); $result = $el->Update($arFields['ID'], [ 'ACTIVE_FROM' => $dateActiveFrom, 'ACTIVE_TO' => $dateActiveTo, ]); if (!$result) { // Логирование ошибок \Bitrix\Main\Diag\Debug::writeToFile( $el->LAST_ERROR, '', '/log/update_error.log' ); } } } } |