Меню

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

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

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

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

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

Чеклист:

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

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

Полная версия серии на Boosty: Смотреть
Михаил Базаров декабря 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 Битрикс. Ва...

Вывести свойство отдельно ото всех или исключить из всех

Иногда, на сайте, под управлением 1С-Битрикс, нужно вывести какое-то конкретное свойство отдельно ото всех, или вообще н...

Создание агента в 1С-Битрикс, на реальном примере

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

Оптимизация jpeg и png картинок на cron, с помощью jpegoptim и optipng

Задача: на сайт каждый день проходит выгрузка из 1С с обновлением картинок. Нужно оптимизмровать эти картинки с помощью...

Выбор основного раздела для элемента инфоблока в 1С-Битрикс

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

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

Задача: При выборе параметров товаров в умном фильтре показать выбранные параметры из чекбоксов в виде кнопок и предоста...

Открытие мобильного приложения Apache Cordova по ссылке

Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: при отправке ссылки на электоро...

Фиксированная корзина с обновлением, без перезагрузки страницы.

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