Форма добавления/редактирования элемента инфоблока Битрикс

В 1С-Битрикс есть компонент форма добавления/редактирования элемента инфоблока. Он бывает полезен в реализации некоторого функционала, который очень часто встречается на сайтах. Например: форма обратной связи, либо какая-то другая форма (вопрос ответ, заявки и т.п.), в случае, если необходимо сделать комментарии к новостям на редакции «старт», где нет модуля «форум», можно воспользоваться рассматриваемым компонентом форма добавления/редактирования элемента инфоблока.

Установка и настройка

Компонент находится «контент → iblock_element_add_form → форма добавления / редактирования (bitrix:iblock.element.add.form)».

  • В настройках компонента форма добавления/редактирования элемента инфоблока выбираем тип инфоблока и инфоблок, туда будут добавляться элементы. При этом у указанного инфоблока должны стоять права на чтение.
  • «Деактивировать элемент» выбираем «только новый». Это нужно, если у вас элементы этого инфоблока где-то выводятся, чтобы не выводились только что добавленные элементы. Впоследствии администратор после проверки сможет сделать элемент активным.
  • Галочку «Использовать CAPTCHA» при необходимости.
  • В полях «Сообщение об успешном сохранении» и «Сообщение об успешном добавлении» можно написать что-либо свое.
  • Можно настроить «Свойства, выводимые на редактирование» и «Свойства, обязательные для заполнения» выбрав нужное в множественном списке.
  • «Группы пользователей, имеющие право на добавление/редактирование» здесь необходимо указать «все пользователи».

Остальные настройки обычно менее важны.

Редактирование шаблона компонента

Прежде чем редактировать шаблоны компонентов Битрикс, необходимо их скопировать копирование шаблонов компонентов Битрикс.

Кастомизировать шаблоны можно как угодно, расскажу, что обычно приходится делать мне.
Для начала вырезаю все табличные теги, назначаю input и textarea необходимые классы. Далее после начала цикла по свойствам и полям

<?foreach ($arResult["PROPERTY_LIST"] as $propertyID):?>

вырезаю строку, которая формирует и выводит название поля

<?if (intval($propertyID) > 0):?><?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["NAME"]?><?else:?><?=!empty($arParams["CUSTOM_TITLE_".$propertyID]) ? $arParams["CUSTOM_TITLE_".$propertyID] : GetMessage("IBLOCK_FIELD_".$propertyID)?><?endif?><?if(in_array($propertyID, $arResult["PROPERTY_REQUIRED"])):?><span>*</span><?endif?>

и заменяю ее на следующую конструкцию, которая присваивает название поля переменной

<?if (intval($propertyID) > 0):?>
 <? $placeHolder = $arResult["PROPERTY_LIST_FULL"][$propertyID]["NAME"]; ?>
 <?else:?>
 <? $placeHolder = !empty($arParams["CUSTOM_TITLE_".$propertyID]) ? $arParams["CUSTOM_TITLE_".$propertyID] : GetMessage("IBLOCK_FIELD_".$propertyID)?>
 <?endif?>

чтобы далее использовать эту переменную в шаблоне для подстановки к тегам атрибута placeholder.

В шаблоне идет цикл по полям и внутри цикла определяется тип поля

switch ($INPUT_TYPE):
    case "USER_TYPE": // пользовательский тип
    ...
    case "T": // textarea
    ...
    case "S": // строка
    case "N": // число

Важно знать

  • У кнопки отправки формы submit всегда должны быть name и value, иначе компонент не сработает. Если по дизайну кнопки нет, нужно сделать input hidden с name и value кнопки.
  • В 1С-Битрикс нельзя поставить на страницу несколько форм добавления/редактирования элемента инфоблока. Подробнее об этом и о решении данной проблемы несколько форм добавления/редактирования элемента инфоблока.
  • Иногда возникает проблема — доступ на страницу, где установлен компонент форма добавления/редактирования элемента инфоблока, становится запрещен не авторизованному пользователю, или всем, кроме админа. Скорее всего решение в том, чтобы в настройках компонента форма добавления/редактирования элемента инфоблока в списке «Группы пользователей, имеющие право на добавление/редактирование» выбрать «все пользователи».

Похожие статьи

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Отзывы : 16 комментариев

  1. Благодарю, весьма полезная информация. Есть вопрос: как организовать вывод комментариев на странице с формой?

    • Для системы комментирования в Битрикс используется компонент forum.topic.reviews, я думаю можно в этом направлении посмотреть

      • Необходимо сделать комментарии к новостям на редакции «старт», где нет модуля «форум». Пробую реализовать через инфоблок «Новости» Списком все получается, а вот детально пока не разобрался в настройках.

          • Похоже не получиться вывести на страницу с формой комментарий детально, а только заголовки которые нужно открывать вручную. Так что реализовать комментарии так как например сделано здесь не получается.

  2. Каким образом можно сделать следующие,
    Сделать две кнопки одна сохрнаить другая отправить
    сохранить делала бы элемент не активным, а отправить присваивала бы ему активность?

    • Как вариант, можно написать обработчик события перед добавлением элемента в инфоблок (OnBeforeIBlockElementAdd) и в функции проверять какая кнопка была нажата, соответственно выставлять элементу ACTIVE либо Y, либо N

  3. Как к этой форме можно «примотать» для выбора пользовательское свойство
    «привязка к элементам инфоблока» (в виде списка типа select) ?

    • Для начала добавить в настройках компонента iblock.element.add.form нужное допсвойство, затем в шаблоне формы добавления добавить условие для типа свойства привязка к элементам (case «E»:)

  4. Очень помогло. Подскажите. Я при редактировании записи могу присвоить не отображенным свойствам свои значения… типа запись добавлена вручную… или привязку к xml_id как-то так CIBlockElement::SetPropertyValues(171, 6, ‘Y’, 71); Но тут я знаю id записи… а как это сделать для добавленной записи… или как узнать ее id..?

    • Не отображенным свойствам в форме добавления элемента? Если какие-то свойства не нужно выводить на заполнение для пользователя, но передать в них свое значение необходимо, можно просто скрыть их в шаблоне. Либо воспользоваться обработчиком события OnAfterIBlockElementAdd, в $arFields[‘ID’] будет содержаться идентификатор только что добавленного элемента

    • В функцию обработчик события нужно передать ссылку на массив $arFields: function OnAfterIBlockElementAddHandler(&$arFields)
      Подробнее написано здесь
      dev.1c-bitrix.ru/api_help/iblock/events/onafteriblockelementadd.php

  5. Спасибо. мне легче было скрыть поля.. а вот OnAfterIBlockElementAddHandler
    у меня не орбайтен по кнопке сохранить.. а при экспорте из csv неожиданно заработал… странно

  6. Так я и не понял как поставить input полям разный placeholder.

    Всю конструкцию поменял как у вас, все норм. Но как прописать placeholder например для input телефон и input Имя?. Сейчас вот так:

    Спасибо, статья полезная и нужная очень

Комментирование отключено