Здравствуйте. Пытаюсь добавить пользовательское свойство типа "Список" к элементам инфоблока. Используя пример Шилова Андрея. Его пример рабочий, но проблема в том, что он не удобен если нужно выбрать десятки городов. Пошёл по пути изменения элемента интерфейса на список с возможностью множественного выбора. В итоге столкнулся с проблемой сохранения.
В метод ConvertToDB падает значения списка циклом. Вместо того, что бы прийти на пример массивом. Соответственно очень хотелось бы узнать как правильно сохранить такое свойство. Каждый раз обращаться к БД получая список существющих значений для добавления нового значения в цикле, не очень то красиво.
Может в конце сохранения срабатывает какое то событие из массива возвращаемого GetUserTypeDescription? Тогда можно было бы собрать все значения в массив и сохранить один раз.
Вот класс добавляющий свойство в init.php
В метод ConvertToDB падает значения списка циклом. Вместо того, что бы прийти на пример массивом. Соответственно очень хотелось бы узнать как правильно сохранить такое свойство. Каждый раз обращаться к БД получая список существющих значений для добавления нового значения в цикле, не очень то красиво.
Может в конце сохранения срабатывает какое то событие из массива возвращаемого GetUserTypeDescription? Тогда можно было бы собрать все значения в массив и сохранить один раз.
Вот класс добавляющий свойство в init.php
Код |
---|
class RegionSelector{ function GetUserTypeDescription(){ return array( "PROPERTY_TYPE" => "L", "USER_TYPE" => "LocationList", "DESCRIPTION" => 'Привязка к местоположению', "GetPropertyFieldHtml" => Array("RegionSelector", "GetPropertyFieldHtml"), "ConvertToDB" => Array("RegionSelector", "ConvertToDB"), "ConvertFromDB" => Array("RegionSelector", "ConvertFromDB"), "GetAdminListViewHTML" => array("RegionSelector", "GetAdminListViewHTML") ); } function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName){ $arFilter = array( 'LID' =>'ru' ); $rsData = CSaleLocation::GetList( array( "REGION_NAME_LANG" => "ASC", "CITY_NAME_LANG" => "ASC" ), $arFilter, false, false, array() ); $html = '<select size="5" name="PROP[' . $arProperty['ID'] . '][]" multiple="multiple">'; $html .= '<option value="">(не установлено)</option>'; while ( $arCity = $rsData->GetNext() ) { if($arCity['CITY_NAME']){ $html .= '<option value="' . $arCity['ID'] . '">[' . $arCity['REGION_NAME'] . '] ' . $arCity['CITY_NAME'] . '</option>'; }; }; $html .= '</select>'; return $html; } function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName){ } function ConvertToDB($arProperty, $value){ return; } function ConvertFromDB($arProperty, $value){ return $value; } } |
Разработка сайтов на 1С-Битрикс www.itinfinity.ru