В данный момент в инфоблоках есть то ли баг, то ли недоделка, то ли фича, но вновь создаваемые свойства не добавляются в формы, кастомизированные пользователями. И ладно бы в персональные не лезли, так и даже дефолтные не меняются. Ну да ладно, есть тому сложности свои. Но приведу функцию, которая позволяет в частном случае добавить таки в форму по умолчанию нужное свойство.
[spoiler]
Пару слов о технике хранения. Когда мы сохраняем форму через данный мастер
Поля собираются в псевдо-сериализованный массив и хранятся в таблице свойств пользователей (b_user_option, класс CUserOptions). Я не копал, но вроде бы на стороне PHP не реализованы методы работы с этим. То есть, на js его ужимаем и отправляем на сервер как строку, там строка сохраняется. При выводе строку распарсиваем и строим форму.
Если посмотреть в уже сформированный php-массив, то это что-то типа (массив построен мною лично, в админке иные алгоритмы):
И вот сюда уже понятно как добавить новое свойство.
Добавляем, опять билдим в чудо-строку, сохраняем. Готово.
"Новое св-во" добавлено программно.
Я оформил сие в виде функции, код которой можно скачать в приложении к посту блога. Вот ее вызов:
Передаем: ID инфоблока, код закладки (стрелка выше), ID свойства, ваше кастомное название.
И основная сложность в том, что TAB_CODE мы никак не распознаем, это обычный инкрементный код. Поэтому, функция исключительно для частных целей, а не как универсальное решение. Ну, или можно допилить на поиск не по коду, а по названию вкладки.
На этом все.
[spoiler]
Пару слов о технике хранения. Когда мы сохраняем форму через данный мастер
Поля собираются в псевдо-сериализованный массив и хранятся в таблице свойств пользователей (b_user_option, класс CUserOptions). Я не копал, но вроде бы на стороне PHP не реализованы методы работы с этим. То есть, на js его ужимаем и отправляем на сервер как строку, там строка сохраняется. При выводе строку распарсиваем и строим форму.
Если посмотреть в уже сформированный php-массив, то это что-то типа (массив построен мною лично, в админке иные алгоритмы):
И вот сюда уже понятно как добавить новое свойство.
Добавляем, опять билдим в чудо-строку, сохраняем. Готово.
"Новое св-во" добавлено программно.
Я оформил сие в виде функции, код которой можно скачать в приложении к посту блога. Вот ее вызов:
AddCustomProp(array('IBLOCK_ID' => 1, 'TAB_CODE' => 'cedit1', 'PROP_ID' => 36, 'NAME' => 'Новое св-во')); |
И основная сложность в том, что TAB_CODE мы никак не распознаем, это обычный инкрементный код. Поэтому, функция исключительно для частных целей, а не как универсальное решение. Ну, или можно допилить на поиск не по коду, а по названию вкладки.
На этом все.