Главная » Блог разработчиков » Битрикс: управляем количеством просмотров элемента

Битрикс: управляем количеством просмотров элемента


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

Задача: управлять популярностью товаров в каталоге интернет-магазина.

сортиировка товаров в каталоге битрикс

Отмечаем в настройках компонента bitrix:catalog галочку использовать счетчик просмотров.

битрикс каталог счетчик просмотров

Теперь для сортировки элементов на странице каталога мы можем использовать поле SHOW_COUNTER.

Заказчик попросил добавить возможность изменять значение SHOW_COUNTER вручную.

Сначала мы рассмотрели вариант добавления свойства инфоблока shows и создания агента, который раз в час копировал бы значение SHOW_COUNTER в shows. Но тогда пришлось бы отдельно учитывать исходные значения либо добавленную администратором разницу, чтобы синхронизировать реальные и отредактированные значения количества показов. Либо использовать события и обновлять оба значения при изменении администратором.

Логичнее было вывести в форму редактирования поле SHOW_COUNTER. Остановимся на этом решении.

Создание пользовательских форм редактирования подробно описано в пользовательской документации.

Создаем в папке /bitrix/php_interface/include/ файл iblock_element_edit_my.php, копируем в него код из файла /bitrix/modules/iblock/admin/iblock_element_edit.php от строки:
//////////////////////////
//START of the custom form
//////////////////////////
до строки:
//////////////////////////
//END of the custom form
//////////////////////////

Нам надо вывести поле SHOW_COUNTER. Добавим в наш файл следующие строки:
$tabControl->AddEditField("SHOW_COUNTER", GetMessage("IBLOCK_FIELD_SHOW_COUNTER").":", $arIBlock["FIELDS"]["SHOW_COUNTER"]["IS_REQUIRED"] === "Y", array("size" => 7, "maxlength" => 10), $str_SHOW_COUNTER);

Я добавила эти строки после вывода всех свойств элемента
if(!empty($PROP)):

endif;

Вы можете вставить код в другом удобном месте.

Теперь на странице настроек инфоблока добавляем путь к нашему файлу.

битрикс форма настроек инфоблока

Идем на страницу редактирования элемента и видим поле Количество показов.
Однако пока введенные в это поле данные не сохраняются.

форма редактирования элемента

Создадим файл /bitrix/php_interface/include/iblock_element_edit_before_save.php и определим в нем функцию BXIBlockAfterSave:

function BXIBlockAfterSave($arFields)
{
	if($arFields['ID'] > 0 && intval($_POST["SHOW_COUNTER"])>=0)
	{
		$be = new CIBlockElement(); 
		$be->Update($arFields['ID'], Array('SHOW_COUNTER' => intval($_POST["SHOW_COUNTER"])), false);
	}
}

На странице настроек инфоблока добавляем путь к файлу.

битрикс форма настроек инфоблока

Готово. Количество просмотров теперь можно проставлять вручную.

Поделитесь ссылкой: