Самодельная форма добавления элемента на API Битрикс

Просмотров: 18525 | Комментариев: 50

При разработке информационных порталов, или просто сложных сайтов, на которых пользователям доступно самостоятельное добавление элементов инфоблока, часто возникает потребность в создании достаточно сложных форм добавления элементов

В большинстве случаев, достаточно воcпользоваться стандартным компонентом iblock.element.add.form. Однако, данный компонент очень давно не обновляется. Назвать его гибким и тонко настраеваемым ни как нельзя. Достаточно часто, для создания формы приходиться писать свои костыли. Например: форму добавления элемента инфоблока через API Битрикс

Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изрядно и не используя js) как угодно переставлять поля ввода. Например сделать заполненеие текста анонса до ввода разделов. Или переставить чекбоксы свойств до ввода названия (хотя это глупо, но вы не сможете сделать такую глупость даже если захотите)

Расскажу как сделать форму через API. Абсолютным костылем данный способ не назвать, в любом случае задача будет решена. И у вас будет возможность оформлять форму как угодно.

Работать будем с методом CIBlockElement::Add - добавляет новый элемент информационного блока. Перед добавлением элемента вызываются обработчики события OnBeforeIBlockElementAdd, из которых можно изменить значения полей или отменить добавление элемента вернув сообщение об ошибке.

Создаем форму на произвольной странице сайта или в основном шаблоне

Для начала: имеем инфоблок "Тест", у которого созданы свойства "Строка", "Список", "Чекбокс", "Файл", "Привязка к разделам". ID этого инфоблока 12

Кстати: в стандартном компоненте не хватает некоторых свойств, например он не умеет выводить свойство привязка к раздел. Как это реализовать можете подсмотреть тут

Далее: Создаем в корне сайта страницу add_form_page.php с таким содержимым

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");

//Подключаем модуль инфоблоков
CModule::IncludeModule('iblock');
$IBLOCK_ID = 12; //ИД инфоблока с которым работаем
?>

<form name="add_my_ankete" action="/add_form_result.php" method="POST" enctype="multipart/form-data">

    Название
    <input type="text" name="name" maxlength="255" value="">

    Картинка анонса
    <input type="file" size="30" name="image" value="">
                                           
    Свойство Строка
    <input type="text" name="line" maxlength="255" value="">
     
    Выпадающий список не множественный
    <select name='selector'>
        <option value='#'>Выберите из списка</option>
        <option value="60">1</option>
        <option value="61">2</option>
    </select>
                            
    Текст анонса
    <textarea name="description" placeholder="Заполните поле"></textarea>
                               
    Выбор раздела- множественный
    <select name='section_id[]' multiple>
        <option value='#'>Выберите из списка или начните вводить название</option>
        <?
            $arFilter = array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', "DEPTH_LEVEL" => "2");
            $arSelect = array('ID', 'NAME');
            $rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
            while ($arSection = $rsSection->Fetch()) {
        ?>
            <option value="<?= $arSection['ID']; ?>"><?= $arSection['NAME']; ?></option>
        <?}?>
    </select>
                         
    Чекбокс
    <label><input type="checkbox" name="chek_box" value="47"> Рассрочка </label>
                              
    Произвольный файл
    <input type="file" size="30" name="file_pol" value="">
                                       
    Привязка к подразделам конкретного раздела другого мнфоблока  чекбоксы                                   
    <?
    $rsParentSection = CIBlockSection::GetByID(5741);
    if ($arParentSection = $rsParentSection->GetNext()) {
    $arFilter = array('IBLOCK_ID' => $arParentSection['IBLOCK_ID'], '>LEFT_MARGIN' => $arParentSection['LEFT_MARGIN'], '<RIGHT_MARGIN' => $arParentSection['RIGHT_MARGIN'], '>DEPTH_LEVEL' => $arParentSection['DEPTH_LEVEL']);
    $rsSect = CIBlockSection::GetList(array('left_margin' => 'asc'), $arFilter);
    while ($arSect = $rsSect->GetNext()) {
    ?>
       <label><input name='service_dop[]' type="checkbox" value="<?= $arSect['ID']; ?>"> <?= $arSect['NAME']; ?></label>
    <?}}?>
                                
    <input type="submit" value="Отправить">

</form>

                 
<?require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>

Это наша форма, которую заполняет пользователь

Рядом создаем файл add_form_result.php, которому будет передаваться POST запрос и пользователю будет выдаваться сообщение о результате добавления. Содержимое файла:

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
?>

<?
if (!empty($_REQUEST['name']) and !empty($_REQUEST['description'])) {

    CModule::IncludeModule('iblock');

    echo 'Вот такие данные мы передали';
    echo '<pre>';
    print_r($_POST);
    echo '<pre>';


    //Погнали
    $el = new CIBlockElement;
    $iblock_id = 24;
    $section_id = false;
    $section_id[$i] = $_POST['section_id']; //Разделы для добавления

    //Свойства
    $PROP = array();

    $PROP['LINE'] = $_POST['line']; //Свойство Строка
    $PROP['SELECTOR'] = $_POST['selector']; //Свойство список
    $PROP['CHEK_BOX'] = $_POST['chek_box']; //Свойство чекбокс
    $PROP['FILE_POL'] = $_FILES['file_pol']; //Свойство файл
    $PROP['SECTIONS_SV'][$c] = $_POST['sections_sv']; //Чекбоксы привязка к разделам


    //Основные поля элемента
    $fields = array(
        "DATE_CREATE" => date("d.m.Y H:i:s"), //Передаем дата создания
        "CREATED_BY" => $GLOBALS['USER']->GetID(),    //Передаем ID пользователя кто добавляет
        "IBLOCK_SECTION" => $section_id[$i], //ID разделов
        "IBLOCK_ID" => $iblock_id, //ID информационного блока он 24-ый
        "PROPERTY_VALUES" => $PROP, // Передаем массив значении для свойств
        "NAME" => strip_tags($_REQUEST['name']),
        "ACTIVE" => "Y", //поумолчанию делаем активным или ставим N для отключении поумолчанию
        "PREVIEW_TEXT" => strip_tags($_REQUEST['description']), //Анонс
        "PREVIEW_PICTURE" => $_FILES['image'], //изображение для анонса
        "DETAIL_TEXT"    => strip_tags($_REQUEST['description_detail'],
        "DETAIL_PICTURE" => $_FILES['image_detail'] //изображение для детальной страницы
    );
    
    
    //Результат в конце отработки
    if ($ID = $el->Add($fields)) {
        echo "Сохранено";
    } else {
        echo 'Произошел как-то косяк Попробуйте еще разок';
    }
}
?>
   
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>

Вот и все. Результат будет отдаваться в запись элемента инфоблока. Уже по вкусу, можете оформлять как угодно, прикручивать js проверку на заполненность или на проверку данных- маски.

Видео: Форма добавления через API

Опубликовав и прочитав записку, понял, что она не до конца понятна. Решил записать поясняющее видео


Добрый день. Благодарю за действительно понятные уроки по битрикс.
у меня вопрос к вашему уроку
"Самодельная форма добавления элемента на API Битрикс"
Собственно сам вопрос: как сделать вывод не по ID  а по ЧПУ  
Михаил
Цитата
Сергей Манник написал:
Добрый день. Благодарю за действительно понятные уроки по битрикс.
у меня вопрос к вашему уроку
"Самодельная форма добавления элемента на API Битрикс"
Собственно сам вопрос: как сделать вывод не по ID  а по ЧПУ
Просто добавьте в init.php обработчик события, что бы при добавлении элемента создавал ему символьный код

Типа того
Код
<?
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", Array("MyClass40", "OnBeforeIBlockElementAddHandler"));
class MyClass40
{
    function OnBeforeIBlockElementAddHandler(&$arFields)
    {
        $name = $arFields["NAME"];
        $arParams = array("replace_space"=>"-","replace_other"=>"-");
        $trans = Cutil::translit($name,"ru",$arParams);
        $arFields["CODE"] = $trans;
    }
}
?>
а если точнее
Цитата
Сергей Манник пишет:
Добрый день. Благодарю за действительно понятные уроки по битрикс.
у меня вопрос к вашему уроку
"Самодельная форма добавления элемента на API Битрикс"
Собственно сам вопрос: как сделать вывод не по ID а по ЧПУ
а если точнее то при создании не происходит генерация символьного кода а только ID
спасибо за оперативный ответ. все работает.
И вопрос не в тему:


Когда планируете дальнейшие видео по созданию инфопортала?
подскажите ответ еще вот на такой вопрос.
руководство захотело добавлять новости в подробное описание не через textarea а через визуальный редактор такой же как и комментарий к записи. если хотя бы в общих чертах опишите как это реализовать буду признателен.
Михаил
Цитата
Сергей Манник написал:
подскажите ответ еще вот на такой вопрос.
руководство захотело добавлять новости в подробное описание не через textarea а через визуальный редактор такой же как и комментарий к записи. если хотя бы в общих чертах опишите как это реализовать буду признателен.
Просто берете любой визуальный редактор редактор и интегрируете его в этот вывод. Но зачем вообще новости так добавлять? Их проще через стандартную форму (компонент).  
Здравствуйте.
Как вывести свойства из раздела инфоблока? То есть в инфоблоке "объявления" разделы -  мото, экипировка. Для каждого раздела разные свойства. Как сделать чтоб при выборе раздела выводились свойства именно этого раздела? Спасибо
Михаил
Цитата
Motocross Inua написал:
Здравствуйте.
Как вывести свойства из раздела инфоблока? То есть в инфоблоке "объявления" разделы -  мото, экипировка. Для каждого раздела разные свойства. Как сделать чтоб при выборе раздела выводились свойства именно этого раздела? Спасибо
Это достаточно сложно, просто так, в формате текстового описания не объяснить. Более того, боюсь что и в формате видео не объяснить.
Здравствуйте, Михаил!
1) Подскажите как организована обработка событий  формы стандартного компонента main.feedback?
2) какой путь будет более правильным: добавить нужную мне функциональность в стандартный обработчик или написать свой собственный обработчик так, как показано в этом уроке?
Владислав
Добрый день.
Огромная благодарность за Ваши труды по ведению данного сайте, он очень сильно помогает начинающим работать с платформой Битрикс. Я не так давно стал заниматься созданием сайтов. И очень заинтересовался данной платформой. Ваши статьи очень в этом помогаю.
Но я пытался сделать форму по данной статье и у меня не очень получилось. Данные передаются, но выдает что "Что-то пошло не так". Если не сложно не могли бы мне помочь с данной проблемой.
Владислав
У меня не получается вставить части кодов из необходимых файлов, и с позволения приложу на них ссылки со своего Гугл Диска. add_form_page.php и add_form_result.php
Владислав
P.S.: Я разобрался, вывел ошибки и решил их. Извиняюсь, если Вас отвлек.
Михаил
Цитата
Владислав Кузнецов написал:
P.S.: Я разобрался, вывел ошибки и решил их. Извиняюсь, если Вас отвлек.
Не успел ответить! Но это хорошо- когда задачки решаются самостоятельно :)
Цитата
Дмитрий Гайчук пишет:
Здравствуйте, Михаил!
1) Подскажите как организована обработка событий формы стандартного компонента main.feedback?
2) какой путь будет более правильным: добавить нужную мне функциональность в стандартный обработчик или написать свой собственный обработчик так, как показано в этом уроке?
Добрый день, Михаил. Конкретизирую вопрос. При кастомизиции компонента main.faadback скопировал шаблон с помощью команд меню ( не файловым менеджером), при этом файл component.php остался в папке с компонентами Битрикс. Таким образом, получилось, что форма находится в папке шаблона сайта, а обработчик событий формы остался в папке с компонентами Битрикс и пришлось изменять его там. Это нормальная ситуация или я что-то неправильно сделал?
Михаил
Цитата
Дмитрий Гайчук написал:
Цитата
Дмитрий Гайчук  пишет:
Здравствуйте, Михаил!
1) Подскажите как организована обработка событий формы стандартного компонента main.feedback?
2) какой путь будет более правильным: добавить нужную мне функциональность в стандартный обработчик или написать свой собственный обработчик так, как показано в этом уроке?
Добрый день, Михаил. Конкретизирую вопрос. При кастомизиции компонента main.faadback скопировал шаблон с помощью команд меню ( не файловым менеджером), при этом файл component.php остался в папке с компонентами Битрикс. Таким образом, получилось, что форма находится в папке шаблона сайта, а обработчик событий формы остался в папке с компонентами Битрикс и пришлось изменять его там. Это нормальная ситуация или я что-то неправильно сделал?
Добрый. Нет не нормальная, нельзя менять компоненты в ядре. Если сильно надо- то нужно скопировать его в свое пространство имен и править там. По сути, просто сделать свой компонент- на основе штатного.
пробовал скопировать component.php в свое пространство имен, туда же где и весь компонент, но переменная POST_FORM_ACTION_URI упорно указывает на component.php из ядра.

Значит нужно прописать путь к обработчику вручную и добавить в начало этого обработчика:
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php";);
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php";);
?>
а дальше логику обработки события. Правильно?
некорректно выразился: "POST_FORM_ACTION_URI указывает на  component.php из ядра".
При использовании  POST_FORM_ACTION_URI  вызывается component.php из ядра
Антон
Добрый день. Столкнулся с проблемой. Задача: есть три группы пользователей: администраторы, руководители и менеджеры. Менеджер должен редактировать только свой элемент инфоблока, руководители и администраторы должны редактировать элементы инфоблока всех менеджеров. В компоненте делаю проверку:


Код
         $arGroups = CUser::GetUserGroup($USER->GetID());
         for ($i=0; $i < count($arGroups); $i++) if ($arGroups[$i] == 1 || $arGroups[$i] == 6) $groupAcsess = true; 

         if ($groupAcsess == true){
            $arFilter["PROPERTY_RESORT_ID"] = $_SESSION['RESORT_ID'];
         }
         else if ($arParams["ELEMENT_ASSOC"] == "PROPERTY_ID" && intval($arParams["ELEMENT_ASSOC_PROPERTY"]) > 0 && in_array($arParams["ELEMENT_ASSOC_PROPERTY"], $arPropertyIDs))
         {
            $arFilter["PROPERTY_".$arParams["ELEMENT_ASSOC_PROPERTY"]] = $USER->GetID();
         }
         else
         {
            $arFilter["CREATED_BY"] = $USER->GetID();
         }
 
1 и 6 - это группы "администраторы" и "руководители" соответственно. Всё хорошо. Для них выводятся все элементы, для менеджера - только тот, где стоит "привязка к пользователю по свойству инфоблока". Но при редактировании элемента инфоблока через форму, это свойство перезаписывается на текущего пользователя, который редактирует элемент. Соответственно, если элемент отредактировал администратор или руководитель, для менеджера он становится недоступным.

Не подскажете, в какую сторону копать?
Антон
Разобрался. В компоненте надо закомментировать кусок

Код
/*if ($arParams["ELEMENT_ASSOC"] == "PROPERTY_ID")
            $arUpdatePropertyValues[$arParams["ELEMENT_ASSOC_PROPERTY"]] = $USER->GetID();
         $arUpdateValues["MODIFIED_BY"] = $USER->GetID();

         $arUpdateValues["PROPERTY_VALUES"] = $arUpdatePropertyValues;*/
 
Михаил
Цитата
Антон Шаповал написал:
Разобрался. В компоненте надо закомментировать кусок
Код
 /*if ($arParams["ELEMENT_ASSOC"] == "PROPERTY_ID")
            $arUpdatePropertyValues[$arParams["ELEMENT_ASSOC_PROPERTY"]] = $USER->GetID();
         $arUpdateValues["MODIFIED_BY"] = $USER->GetID();

         $arUpdateValues["PROPERTY_VALUES"] = $arUpdatePropertyValues;*/
  
Не успел ответить. Но да, отрубить перепривязку.
Добрый день.
Вопрос по уроку: а как быть с множественной передачей файлов? Скажем, хочу я сделать галерею, отправляю через файловый инпут 4 картинки, он [скрипт] мне в отладке их демонстрирует, но в инфоблоке они не появляются :С
Михаил
Цитата
Desperial написал:
Добрый день.
Вопрос по уроку: а как быть с множественной передачей файлов? Скажем, хочу я сделать галерею, отправляю через файловый инпут 4 картинки, он [скрипт] мне в отладке их демонстрирует, но в инфоблоке они не появляются :С
По идее проблем не должно быть. Уже делал форму которая отправляет картинки в множественное свойство "Файл" MORE_PHOTO. Поковыряйте еще, тут особо и подсказать нечего, там ни какой хитрости нет
На самом деле, кое что есть.

Сразу проясню, я немного не договорил: я подавал картинки в форму через инпут с атрибутом multiple. Проблема в том, что он создает массив $_FILES такого рода:
Код
Array
(
    [gal] => Array
        (
            [name] => Array
                (
                    [0] => kelemvortemple.png
                    [1] => laughgob.png
                    [2] => phlan.jpg
                    [3] => road.png
                    [4] => rork.jpg
                    [5] => Shadows of Moonsea.jpg
                )

            [type] => Array
                (
                    [0] => image/png
                    [1] => image/png
                    [2] => image/jpeg
                    [3] => image/png
                    [4] => image/jpeg
                    [5] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => %путь_ко_временному_файлу%/php9tn6RX
                    [1] => %путь_ко_временному_файлу%/phpoXHr1c
                    [2] => %путь_ко_временному_файлу%/phpPtBQas
                    [3] => %путь_ко_временному_файлу%/phpEJ5ukH
                    [4] => %путь_ко_временному_файлу%/phpeiYguW
                    [5] => %путь_ко_временному_файлу%/phpv8h6Db
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                    [4] => 0
                    [5] => 0
                )

            [size] => Array
                (
                    [0] => 178797
                    [1] => 169764
                    [2] => 667303
                    [3] => 369171
                    [4] => 135182
                    [5] => 73339
                )

        )

)
Понятно, что битрикс не в состоянии прочитать разбитый таким образом массив. Но и в стандартном наборе нет класса, который самостоятельно сформировал бы массивы под каждое изображение. Выкручивался таким образом:
Код
$i=count($_FILES['gal']);
for ($c=0;$c<=$i;$c++) {
$PROP['gal'][$c]['name']=$_FILES['gal']['name'][$c];
$PROP['gal'][$c]['type']=$_FILES['gal']['type'][$c];
$PROP['gal'][$c]['tmp_name']=$_FILES['gal']['tmp_name'][$c];
$PROP['gal'][$c]['error']=$_FILES['gal']['error'][$c];
$PROP['gal'][$c]['size']=$_FILES['gal']['size'][$c];
};
Сейчас всё работает. Оставлю это здесь, мало ли, кто занимается таким-же мазохизмом и испытал те же проблемы С:
подскажите с формой а то я немного запутался:
в add_form_result.php мы получаем id раздела записанный в $fields["IBLOCK_SECTION"] как получить его символьный код для последующего редиректа в раздел выбранный пользователем при выборе в форме add_form_page.php
Добрый день. очередной затуп с формой...по Вашему руководству вывел и кастомизировал под себя все просто и чертовски удобно за это отдельное СПАСИБО.
как навесить на форму отправку по почтовому шаблону? и еще 1 вопрос он больше относиться к защите от спамеров ссылками:

есть код который просто вырезает ссылки из текста
$detail_value = $_REQUEST['description_detail'];
$detail_value =  preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w( :\ d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '', $detail_value);
$fields = array(
"DETAIL_TEXT"    => $detail_value
);
но проблема в том что там как правило кроме ссылки 2-3 слова и весь раздел куда добавляются данные с формы превращается в помойку....

можно как то сделать проверку на наличие ссылок в тексте и если оные имеются просто не пропускать на запись а выводить какой нибудь текст???
Михаил
Цитата
Сергей Манник написал:
Добрый день. очередной затуп с формой...по Вашему руководству вывел и кастомизировал под себя все просто и чертовски удобно за это отдельное СПАСИБО.
как навесить на форму отправку по почтовому шаблону? и еще 1 вопрос он больше относиться к защите от спамеров ссылками:

есть код который просто вырезает ссылки из текста
$detail_value = $_REQUEST['description_detail'];
$detail_value =  preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(  d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '', $detail_value);
$fields = array(
"DETAIL_TEXT"    => $detail_value
);
но проблема в том что там как правило кроме ссылки 2-3 слова и весь раздел куда добавляются данные с формы превращается в помойку....

можно как то сделать проверку на наличие ссылок в тексте и если оные имеются просто не пропускать на запись а выводить какой нибудь текст???
Google Recapcha не проще прикрутить? А по поводу почтового события, просто напишите обработчик который отправляет письмо, при добавлении нового элемента инфоблока. Под рукой сейчас нет, если не забуду- в заметку допишу.
Но если найдете раньше прошу сюда написать)
вроде придумал костыль как проверять ссылки....если у кого то есть идеи как улучшить всегда буду рад
как то так

$mystring = 'abc xyzervev://googlwcwcwec.cwecom reverv<a href="wevwev">eververvev</a>ever rveervev';
function fuckinghref($mystring)
{
$findme = array('http', '//', '.ru', '.com', 'bz', 'net', '.org', '.info', '<a>', '</a>', 'href');
$i = "0";
foreach ($findme as $findme_value) {
$pos = strpos($mystring, $findme_value);
if ($pos === false) {
} else {
$i = $i + 1;
}
}
return $i;
}
echo $mystring . "<hr>";
if (fuckinghref($mystring) > "0" ;) {
echo "..... опять ссылки шлют!!";
}else{
echo "все норм";
}
как то так выглядит мой add_form_result.php если есть идеи по улучшению и защите от sql иньекций и прочей гадости буду рад услышать

<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetPageProperty("ROBOTS", "noindex, nofollow");
define("NO_KEEP_STATISTIC", true);
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
?>

<?
$mystring = strip_tags($_REQUEST['name']);
$b = strip_tags($_REQUEST['description_detail']);
function fuckinghref($mystring)
{
   $findme = array('http', '//', '.ru', '.com', '.bz', '.net', '.org', '.info', '<a>', '</a>', 'href', 'url', 'ru', 'bz', 'net' , 'org' , 'info' , 'ucoz' , 'adult' , 'xxx');
   $i = "0";
   foreach ($findme as $findme_value) {
       $pos = strpos($mystring, $findme_value);
       if ($pos === false) {
       } else {
           $i = 1;
       }
   }
   return $i;
}
if ( (fuckinghref($mystring) > "0") || (fuckinghref($b) > "0") ){
   LocalRedirect($_SERVER['HTTP_REFERER']);
}else{

if (!empty($_REQUEST['name']) and !empty($_REQUEST['description_detail']) ) {

   CModule::IncludeModule('iblock');

   //Погнали
   $el = new CIBlockElement;
   $iblock_id = 31;
   $section_id = false;
   $section_id[$i] = $_POST['section_id']; //Разделы для добавления

   //Свойства
   $PROP = array();

$PROP['PERSONAL_YUR'] = $_POST['personal_yur']; //Свойство (частное/юр лицо)
$PROP['NAMES'] = $_POST['names']; //Свойство название
$PROP['PHONE'] = $_POST['phone']; //Свойство телефон
$PROP['CITY'] = $_POST['city']; //Свойство город
$PROP['FILE'] = $_FILES['file']; //Свойство файл

   //Основные поля элемента
   $fields = array(
       "DATE_CREATE" => date("d.m.Y H:i:s"), //Передаем дата создания
       "CREATED_BY" => $GLOBALS['USER']->GetID(), //Передаем ID пользователя кто добавляет
       "IBLOCK_SECTION" => $section_id[$i], //ID разделов
       "IBLOCK_ID" => $iblock_id, //ID информационного блока он 31-ый
       "PROPERTY_VALUES" => $PROP, // Передаем массив значении для свойств
       "NAME" => strip_tags($_REQUEST['name']),
       "ACTIVE" => "N", //поумолчанию делаем активным или ставим N для отключении поумолчанию
       "PREVIEW_TEXT" => TruncateText((strip_tags($_REQUEST['description_detail'])), 250),// strip_tags($_REQUEST['description_detail']), //Анонс
       "PREVIEW_PICTURE" => $_FILES['image'], //изображение для анонса
       "DETAIL_TEXT"    => strip_tags($_REQUEST['description_detail']),
       "DETAIL_PICTURE" => $_FILES['image_detail'] //изображение для детальной страницы
   );
/*
 if (strpos($_REQUEST['description_detail'], 'банкрот') !== false) // именно через жесткое сравнение
{
   echo 'Найдено';
} else {
   echo 'Не найдено';
}
*/
   
   //Результат в конце отработки
   if ($ID = $el->Add($fields)) {
   $rsParentSection = CIBlockSection::GetByID($section_id[$i][0]);
if ($arParentSection = $rsParentSection->GetNext()){
LocalRedirect($arParentSection['SECTION_PAGE_URL']);
}
    }else {
echo 'Произошел как-то косяк Попробуйте еще разок';
    }
}
else{
LocalRedirect($_SERVER['HTTP_REFERER']);
}
}
?>
 
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>
Кирилл
помогите решить проблему,сделал все как на видео...но при отправке кидает на странице результата но она пустая...совсем...ни ошибки ни чего-либо еще...что может быть?
Кирилл, у пользователей есть доступ на добавление элементов в инфоблок? Если нет, то не мудрено, что так происходит. В типах инфоблока->тип, в который ты добавляешь элементы->доступ, укажи "для всех пользователей - добавление в панели"

Кроме создания сайтов, я так же веду блог с заметками о вебразработке, записываю бесплатные видеоуроки и содержу форум, на котором можно задавать вопросы и просто общаться. Заметки, преимущественно - это короткие или подробные рецепты, по реализации часто требуемого функционала- в рамках разработки сайтов на 1С-Битрикс

Показать еще