Bitrix: Несколько форм добавления на одной странице

Необходимо решить следующую задачу: отображение и работа нескольких форм добавления/редактирования элементов инфоблока на CMS 1C-Bitrix. 
Не важно: с AJAX форма или без. Но если с ним, то пусть параметр компонента AJAX_OPTION_ADDITIONAL, будет равен... имени шаблона вашего компонента.
Предположим, что iblock.element.add.form у нас уже кастомизирована, но и это не важно.
Как правило, данные (допустим две) формы располагаются в модальных окнах и вызываются с помощью кнопок, которые расположены в разных частях страницы. А модальные окна храниться в footer'е.
Нажимая на одну из форм, вы сталкиваетесь с тем, что отрабатывается только самая верхняя относительно кода. Не взирая на то, что это разные компоненты, разные шаблоны, разные ID AJAX (если он включен) и даже разные ID form - скорее всего вылезет ошибка или в модальном окне продублируется верстка текущей страницы.


Почему так происходит?
Потому что input типа submit, во всех формах имеет одинаковое имя! Именно по этому нажав на любую кнопку на странице, отвечающую за "Отправку" элемента в инфоблок, отправится только первая форма по списку.


Как решить?
Необходимо присвоить имени кнопке, отправляющей форму индивидуальное значение. По умолчанию оно iblock_submit. Как его сделать уникальным, в рамках одного шаблона компонента. 
Было так:

<input type="submit" name="iblock_submit" value="Отправить"/>
Стало так:

<input type="submit" name="iblock_submit_$arParams['ID']" value="Отправить"/>
$arParams['ID'] - это ID инфоблока в который у Вас добавляется элемент с помощью формы. Не забудьте его вставить, как PHP-переменную!
Теперь, нам нужно изменить логику поведения самого компонента. Следовательно, идем по пути: bitrix/components/iblock.element.add.form/component.php
Там, необходимо найти все упоминания iblock_submit и заменить его на то же самое, на что мы заменили его в шаблоне компонента. В данном файле должно быть всего 2 проверки и переменная представлена в следующем виде:

$_REQUEST["iblock_submit"]
Которую мы меняем на:

$_REQUEST["iblock_submit_" . $arParams["IBLOCK_ID"]]
Вот и всё. Теперь любое количество таких форм на одной странице будет функционировать хорошо и без сбоев. В знак благодарности, если помогло, жмите на ЖАБУ.
ИИИИИииииии помните: все имена в форме и у формы, должны быть УНИКАЛЬНЫМИ!
закрыть

Отправить заявку

Если что-то пошло не так, или Вы в чем-то не уверены. Например в смысле собственной жизни. Просто нажмите на логотип сайта и повторите попытку. Удачи!