Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
то ждем ваше обращение в нашей службе тех поддержки.
Всем хорош встроенный редактор условий скидок в «1С-Битрикс:Управление сайтом». Однако нередко условий "по умолчанию" недостаточно, и возникает необходимость настроить свои собственные. Например, если нужно создать условие по дополнительному полю. Предлагаем вариант решения:
1. Настроим базовый класс
Прежде всего найдем файл init.php по адресу /php_interface/init.php. Создадим его копию и будем с ней работать дальше. Надо создать класс, дочерний к CCatalogCondCtrlComplex, и определить в нем методы, возвращающие имя и идентификатор. Это будут GetClassName, а также GetControlID.
2. Настроим метод, отдающий список условий, а именно GetControlShow
3. Настроим методы, работающие со строковыми представлениями
Метод Generate будет создавать условие в строковом представлении. А метод ApplyValues будет подставлять в строку конкретные значения.
4. Подключим класс к обработке события
В модуле catalog подключим наш класс к обработчику OnCondCatControlBuildList.
Готово!
Назад в раздел
1. Настроим базовый класс
Прежде всего найдем файл init.php по адресу /php_interface/init.php. Создадим его копию и будем с ней работать дальше. Надо создать класс, дочерний к CCatalogCondCtrlComplex, и определить в нем методы, возвращающие имя и идентификатор. Это будут GetClassName, а также GetControlID.
class CatalogCondCtrlUserProps extends \CCatalogCondCtrlComplex { public static function GetClassName() { return __CLASS__; } /** * @return string|array */ public static function GetControlID() { return array('CondUser', 'CondUserDestinationStore'); } }
2. Настроим метод, отдающий список условий, а именно GetControlShow
public static function GetControlShow($arParams) { $arControls = static::GetControls(); $arResult = array( 'controlgroup' => true, 'group' => false, 'label' => 'Поля Пользователя', 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'children' => array() ); foreach ($arControls as &$arOneControl) { $arResult['children'][] = array( 'controlId' => $arOneControl['ID'], 'group' => false, 'label' => $arOneControl['LABEL'], 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'control' => array( array( 'id' => 'prefix', 'type' => 'prefix', 'text' => $arOneControl['PREFIX'] ), static::GetLogicAtom($arOneControl['LOGIC']), static::GetValueAtom($arOneControl['JS_VALUE']) ) ); } if (isset($arOneControl)) unset($arOneControl); return $arResult; } /** * @param bool|string $strControlID * @return bool|array */ public static function GetControls($strControlID = false) { $arControlList = array( 'CondUser' => array( 'ID' => 'CondUser', 'FIELD' => 'ID', 'FIELD_TYPE' => 'int', 'LABEL' => 'ID Пользователя', 'PREFIX' => 'поле ID Пользователя', 'LOGIC' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)), 'JS_VALUE' => array( 'type' => 'input' ), 'PHP_VALUE' => '' ), 'CondUserDestinationStore' => array( 'ID' => 'CondUserDestinationStore', 'FIELD' => ''UF_USER_FIELD', 'FIELD_TYPE' => 'string', 'LABEL' => 'UF_USER_FIELD Пользователя', 'PREFIX' => 'поле 'UF_USER_FIELD Пользователя', 'LOGIC' => static::GetLogic(array(BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ)), 'JS_VALUE' => array( 'type' => 'input' ), 'PHP_VALUE' => '' ), ); foreach ($arControlList as &$control) { if (!isset($control['PARENT'])) $control['PARENT'] = true; $control['EXIST_HANDLER'] = 'Y'; $control['MODULE_ID'] = 'mymodule'; $control['MULTIPLE'] = 'N'; $control['GROUP'] = 'N'; } unset($control); if ($strControlID === false) { return $arControlList; } elseif (isset($arControlList[$strControlID])) { return $arControlList[$strControlID]; } else { return false; } }
3. Настроим методы, работающие со строковыми представлениями
Метод Generate будет создавать условие в строковом представлении. А метод ApplyValues будет подставлять в строку конкретные значения.
public static function checkUserField($strUserField, $strCond, $strValue) { global $USER; $arUser = $USER->GetByID($USER->GetID())->Fetch(); $field = $arUser[$strUserField]; return str_replace(array('#FIELD#', '#VALUE#'), array($field, $strValue), $strCond); }
4. Подключим класс к обработке события
В модуле catalog подключим наш класс к обработчику OnCondCatControlBuildList.
AddEventHandler("catalog", "OnCondCatControlBuildList", Array("CatalogCondCtrlUserProps", "GetControlDescr"));
Готово!
Назад в раздел
Подписаться на новые материалы раздела: