+38(073) 413-59-71  info@binliz.org.ua

Две и более ajax форм на странице bitrix

 17.03.2015
1C-Bitrix

Иногда появляются задачи которые кажутся на первый взгляд невыполнимыми. Допустим есть список элементов инфоблока, к каждому из которых привязан опрос или скажем форма запроса стоимости товара, или просто форма комментария (к примеру сделаная на другом инфоблоке). Решение данной задачи я и хочу описать в данной статье. 

Смысл всего этого очень простой, допустим мы вызвали компонент из шаблона компонента скажем вот таким вот образом:

foreach ($arResult['ITEMS'] as $item) :
$APPLICATION->IncludeComponent( "bitrixt:form.result.new", ".default", Array( "WEB_FORM_ID" => "1", "IGNORE_CUSTOM_TEMPLATE" => "N", "USE_EXTENDED_ERRORS" => "Y", "SEF_MODE" => "N", "CACHE_TYPE" => "N", "LIST_URL" => "", "EDIT_URL" => "", "SUCCESS_URL" => "", "CHAIN_ITEM_TEXT" => "", "CHAIN_ITEM_LINK" => "", "VARIABLE_ALIASES" => array("WEB_FORM_ID"=>"WEB_FORM_ID","RESULT_ID"=>"RESULT_ID",), ), $component ); endforeach;

 добавили вызов ajax:

		"AJAX_MODE" => "Y",  // режим AJAX
		"AJAX_OPTION_SHADOW" => "N", // затемнять область
		"AJAX_OPTION_JUMP" => "N", // скроллить страницу до компонента
		"AJAX_OPTION_STYLE" => "Y", // подключать стили
		"AJAX_OPTION_HISTORY" => "N",

 И попровобали заполнить одну из форм. 

В итоге увидим что обрабатывается только первая форма т.к. у них у всех один и тот же индификатор, что собственно превращает разработку в выдумывание велосипеда. Люди пытаются назначить сотню разных шаблонов, скопировать компонент в свое пространство имен там его модифицировать, прописать какие-то параметры в result_modifier и component_epilog, навесится на событие ajax через создание отдельной функции типа такого BX.addCustomEvent('onAjaxSuccess', afterFormReload); 

А на самом то деле достаточно дописать еще один параметр для вызова компонента переведенного в ajax и он будет таким в данном случаи

"AJAX_OPTION_ADDITIONAL" => $item['ID'], 

Вообще там можно скажем rand() прописать или date() или еще,что для уникальности, это уже ваше дело, но смысл данной манипуляции - явное указание компоненту, что он не один такой добрый, а их несколько, и обрабатывать надо именно тот который надо. :) ...заптутал наверное. 

В общем эта строчка делает у всех этих компонентов в цикле - разные id и больше сами компонентіы не ссорятся между собой о том, кто будет данные обрабатывать.