Задать вопрос
@sitnikovroman1994

Как создать кастомное пользовательское свойство типа множественный список в 1c bitrix?

Добрый день. Есть задача - добавить инфоблоку кастомное пользовательское свойство типа список, с возможностью множественного выбора.
Обычное свойство список не подойдет, так как значения этого списка будут
постоянно меняться и должны перед выводом списка в админке подтягиваться из базы.
Пытался сделать по аналогии как тут 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;
    }
}

Но по какой то причине данные не сохраняются. После нажатия кнопки сохранить происходит редирект в список всех элементов, как обычно, при успешном сохранении. Но значение не меняется.
Как можно исправить данную ситуацию? Варианты решить задачу другим способом или снести битрикс к сожалению не подходят, так как это зависит не от меня
  • Вопрос задан
  • 801 просмотр
Подписаться 1 Средний 3 комментария
Решения вопроса 1
@sitnikovroman1994 Автор вопроса
Проблему решил костылем
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы