- 19 Окт 2017
- Битрикс экзамен №2
- 504
- 0
На мой взгляд это самое простое задание из всего преречня, которое для решения требует минимальное количество времени относительно всех остальных заданий
Данное задание решается при помощи событий и запроса к БД для получения количества просмотров товара (поле SHOW_COUNTER):
Для отмены изменения и прекращении выполнения метода CIBlockElement::Update необходимо в функции-обработчике создать исключение методом $APPLICATION->ThrowException() и вернуть false.
В папке local создаем папку php_interface и в ней создаем файл init.php в котором подключаем два файла если они существуют const.php и deactivation.php
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/const.php')){
require_once($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/const.php');
}
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/deactivation.php')){
require_once($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/deactivation.php');
}
Создаём вышеуказанные файлы.
В файле const.php определяем константу, которая будет содержать ID инфоблока "продукция"
define('PRODUCT_IBLOCK',2);
В файле deactivation.php подключаем модуль языковых фраз,регистрируем обработчик события OnBeforeIBlockElementUpdate, получаем поле SHOW_COUNTER и если оно больше 2 отменяем деактивацию товара с выводом текста ошибки.
use \Bitrix\Main\Localization\Loc;
Loc::LoadMessages(__FILE__);
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", Array("MyClass", "OnBeforeIBlockElementUpdateHandler"));
class MyClass{
function OnBeforeIBlockElementUpdateHandler(&$arFields){
if($arFields['IBLOCK_ID'] = PRODUCT_IBLOCK && $arFields['ACTIVE'] !== 'Y'){
$r = CIBlockElement::GetByID($arFields['ID']);
if($res = $r -> Fetch()){
$show_counter = $res['SHOW_COUNTER'];
}
if($show_counter > 2){
global $APPLICATION;
$APPLICATION->throwException(Loc::getMessage('SHOW_COUNTER_ERROR_1').$show_counter.Loc::getMessage('SHOW_COUNTER_ERROR_2'));
return false;
}
}
}
}
Вот и всё! Спасибо за внимание!
P.S. В описании мог что нибудь забыть,поэтому смотрите видео
Отправляя форму, я соглашаюсь на обработку персональных данных
Отправить