Здравствуйте. Пытаюсь добавить пользовательское свойство типа "Список" к элементам инфоблока. Используя Шилова Андрея. Его пример рабочий, но проблема в том, что он не удобен если нужно выбрать десятки городов. Пошёл по пути изменения элемента интерфейса на список с возможностью множественного выбора. В итоге столкнулся с проблемой сохранения.
В метод 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С-Битрикс