Меню

Серия 13: Свой компонент: список объявлений пользователя. Получение информации из инфоблока с помощью ORM

Полная версия серии на Boosty: Перейти к серии

В этой серии реализуем событие OnAfterIBlockElementUpdate которое будет автоматически устанавливаеть дату завершения активности объявления, после проверки модератором. Будет прибавлять 14 дней к дате начала активности и записывать в дату завершения активности элемента.

OnAfterIBlockElementUpdate - Событие "OnAfterIBlockElementUpdate" вызывается после попытки изменения элемента информационного блока методом CIBlockElement::Update. В документации: OnAfterIBlockElementUpdate

Также сделаем собственный компонент для вывода объявлений пользователя в личном кабинете, будем учитывать модерацию объявлений и факт завершения активности (по истечению срока публикации). Комопонент сделаем полностью на D7 ORM используя инфоблок как класс.

Текстовый вариант с примерами получения данных из инфоблока с помощью ORM:
ORM в инфоблоках

Чеклист:

  • Делаем компонет со списком объявлений пользователя
  • Реализуем событие на обновление элемента

Дополнительные файлы

Михаил Базаров декабря 8, 2024 11:54 am
Черновой обработчкик на менеджере событий:
Код
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'
                );
            }
        }
    }
}

Блог-note: заметки разработчика

Если папка то применяем, проверка текущего раздела или подраздела

Иногда требуется применить особый стиль к определённой директории сайта или управлять выводом элементов на странице в за...

Установить цену товара из свойства инфоблока

На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока. Сделать это можно через API, ...

XML в формате Commerce ML-2, города России и Мира, для выгрузки в инфоблок Битрикс

Подвернулась задачка, создать инфоблок для Битрикс, в котором будут просто города России и мира в виде элементов инфобло...

Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...

Вывести торговые предложения (SKU) как простые товары в каталоге, с учетом раздела.

Задача: Отобразить SKU товаров в каталоге как простые товары, учитывая текущий раздел. Необходимо вывести все торговые п...

Доступ к домашнему серверу с серым IP из интернета через SSH-тоннель

Предположим, у вас есть сервер в домашней сети, который недоступен из интернета, так как находится за NAT с серым IP. Вы...

Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов на одну карту

Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоблоке некоторое количество элем...

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

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

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

Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и процент накопительной скидки- ...