В копилку.
Задача: надо добавлять в ИБ “A” элементы, связанные с элементами ИБ “B”, причём иногда, на момент создания элемента ИБ “A”, элементы ИБ “B” ещё не существуют. Т.е. их надо добавлять по ходу создания элемента ИБ “A”.
Как-то так:
Тип свойства “Тип аутсорсинга”: привязка к элементу в виде списка.
Да, можно было бы просто сделать 2 формы добавления элементов A и B, и скорее всего, я бы так и сделал, если бы элемент B содержал в себе кучу сложных свойств, но для моей предметной области, элемент B имел всего лишь 2 поля:
Реализация: я буду тут всё подряд упрощать, покажу только основное.
Итак, предполагаю, что шаблон iblock.element.add.form перенесён в свой шаблон сайта, чтобы изменения не перетёрлись при обновлении.
1. Открываем template.php. В кейсе ‘USER_TYPE’ первого свича нужно отсеять наше свойство. Я добавляю вывод формы для елемента “B” сразу после вывода самого свойства, т.е. :
//исходный код...
В развёрнутом виде это так:
2. Зашлём данные из полей аяксом.
Тут всё предельно просто: берём данные из формы, и по клику на “Добавить” шлём их на addiblockelements.php
3. addiblockelements.php
Тут всё тоже ясно: сбрасываем буфер, чтобы не возвращать всякую ненужную шелуху, декодируем данные , создаём новый “B”. Если не получилось (например, поля пустые), то возвращаем ошибку, кодируем данные обратно.
Тут мы добавляем элемент в выпадающий список элементов “B” формы добавления “A”. В value заносим id только что созданного элемента “B”, и теперь его можно использовать.
Вот и всё, надеюсь, кому-нибудь пригодится.
Код выкладывать смысла нет, он достаточно специфичен.
Задача: надо добавлять в ИБ “A” элементы, связанные с элементами ИБ “B”, причём иногда, на момент создания элемента ИБ “A”, элементы ИБ “B” ещё не существуют. Т.е. их надо добавлять по ходу создания элемента ИБ “A”.
Как-то так:
Тип свойства “Тип аутсорсинга”: привязка к элементу в виде списка.
Да, можно было бы просто сделать 2 формы добавления элементов A и B, и скорее всего, я бы так и сделал, если бы элемент B содержал в себе кучу сложных свойств, но для моей предметной области, элемент B имел всего лишь 2 поля:
- Название.
- Описание.
Реализация: я буду тут всё подряд упрощать, покажу только основное.
Итак, предполагаю, что шаблон iblock.element.add.form перенесён в свой шаблон сайта, чтобы изменения не перетёрлись при обновлении.
1. Открываем template.php. В кейсе ‘USER_TYPE’ первого свича нужно отсеять наше свойство. Я добавляю вывод формы для елемента “B” сразу после вывода самого свойства, т.е. :
//исходный код...
В развёрнутом виде это так:
2. Зашлём данные из полей аяксом.
Тут всё предельно просто: берём данные из формы, и по клику на “Добавить” шлём их на addiblockelements.php
3. addiblockelements.php
Тут всё тоже ясно: сбрасываем буфер, чтобы не возвращать всякую ненужную шелуху, декодируем данные , создаём новый “B”. Если не получилось (например, поля пустые), то возвращаем ошибку, кодируем данные обратно.
- 4. Данные получили, теперь надо их обработать на клиенте, чтобы можно было использовать только что созданный элемент в главной форме. На шаге 2 мы определили, какой обработчик будет работать с полученными после запроса данными — add_pricetype_result
Тут мы добавляем элемент в выпадающий список элементов “B” формы добавления “A”. В value заносим id только что созданного элемента “B”, и теперь его можно использовать.
Вот и всё, надеюсь, кому-нибудь пригодится.
Код выкладывать смысла нет, он достаточно специфичен.