Добрый день. Есть задача - добавить инфоблоку кастомное пользовательское свойство типа список, с возможностью множественного выбора.
Обычное свойство список не подойдет, так как значения этого списка будут
постоянно меняться и должны перед выводом списка в админке подтягиваться из базы.
Пытался сделать по аналогии как тут
stackoverflow.com
У меня получился следующий код в init.php
/*--------- вывод поля свойства на странице редактирования ---------*/
public function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
/** Массив объявлен хардкодом для примера, значения берутся из базы */
$arElements = [
'test1',
'test2',
'test3',
'test4',
'test5',
'test6',
'test7',
'test8',
];
$sReturn = '';
$sReturn = '<select multiple size="6" name="PROP[' . $arProperty['ID'] . '][]">';
foreach($arElements as $key => $value) {
$sReturn .= '<option value="'.$key.'"';
if($arProperty == $key) {
$sReturn .= ' selected="selected"';
}
$sReturn .= '>'.$value.'</option>';
}
$sReturn .= '</select>';
return $sReturn;
}
public static function ConvertToDB($arProperty, $arValue)
{
return $arValue;
}
public static function ConvertFromDB($arProperty, $arValue)
{
return $arValue;
}
}
Cвойство создал, на странице редактирования элемента все выводится корректно
Вот HTML код свойства
/*--------- вывод поля свойства на странице редактирования ---------*/
public function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
/** Массив объявлен хардкодом для примера, значения берутся из базы */
$arElements = [
'test1',
'test2',
'test3',
'test4',
'test5',
'test6',
'test7',
'test8',
];
$sReturn = '';
$sReturn = '<select multiple size="6" name="PROP[' . $arProperty['ID'] . '][]">';
foreach($arElements as $key => $value) {
$sReturn .= '<option value="'.$key.'"';
if($arProperty == $key) {
$sReturn .= ' selected="selected"';
}
$sReturn .= '>'.$value.'</option>';
}
$sReturn .= '</select>';
return $sReturn;
}
public static function ConvertToDB($arProperty, $arValue)
{
return $arValue;
}
public static function ConvertFromDB($arProperty, $arValue)
{
return $arValue;
}
}
Но по какой то причине данные не сохраняются. После нажатия кнопки сохранить происходит редирект в список всех элементов, как обычно, при успешном сохранении. Но значение не меняется.
Как можно исправить данную ситуацию? Варианты решить задачу другим способом или снести битрикс к сожалению не подходят, так как это зависит не от меня