Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Проверка на наличие элементов, текущего пользователя, в заданном инфоблоке.

Просмотров: 5495

Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно воспользоваться API: CUser и CIBlockElement

Вывести форму редактирования с автоматическим редиректом.

Итак, задача на конкретном сайте:

  • Зарегистрированные пользователи могут добавить 1 элемент в инфоблок "Анкета"
  • Если у пользователя еще нет элемента, открываем ему пустую форму добавления элемента
  • Если у пользователя уже есть элемент, открываем форму редактирования этого элемента. По сути, просто передаем параметр в url "?edit=Y&CODE=XXXX", где XXXX - это ID элемента

Форма добавления / редактирования это штатный компонент битрикс bitrix:iblock.element.add.form. Его просто выводим на странице персонального раздела, например /personal/form/add.php

На эту страницу, пользователь попадает автоматически, и может добавить элемент в инфоблок "Анкета"- у которого ID = 5. Компонент уже настроена так, что бы пользователь не смог добавить больше одного элемента.

Созадем еще одну страницу, на которой вызываем тот же самый компонент /personal/form/edit.php. На эту страницу, пользователь попадет, если у него уже есть элемент. Для возможности редактирования, мы должны передать дополнительный параметр в url /personal/form/edit.php?edit=Y&CODE=XXXX где XXXX - это ID элемента созданного пользователем

На странице добавления элемента /personal/form/add.php, добавляем код (пояснения ниже)


if (CModule::IncludeModule("iblock")) {
    global $USER;
    $curUserId = $USER->GetID();
    $iblockId = 5;
    $elementsByCurUser = CIBlockElement::GetList(
        Array("ID" => "ASC"),
        Array(
        	"IBLOCK_ID" => $iblockId, 
        	"CREATED_USER_ID" => $curUserId
        ),
        false,
        false,
        Array(
            'ID'
        )
    );
    while ($ar_fields = $elementsByCurUser->GetNext()) {
        $elByCurUser = $ar_fields['ID'];
    }
}

if (isset($elByCurUser)) {
        $editPage = '/personal/form/edit.php?edit=Y&CODE=';
        $redirectToElEdit = $editPage.$elByCurUser;
        header('Location: '.$redirectToElEdit);
}
  • $curUserId = $USER->GetID() - в переменную $curUserId передали ID текущего авторизованного пользователя.
  • $iblockId = 5 - в переменную $iblockId передали ID инфоблока "Анкеты".
  • $elementsByCurUser = CIBlockElement::GetList - GetList-om получили элементы 5-го инфоблока.
  • "CREATED_USER_ID" => $curUserId - отфильтровали из всех элементов, элемент созданный этим пользователем, и получили его (элемента) ID.
  • $elByCurUser = $ar_fields['ID'] - в переменную $elByCurUser передали ID элемента, текущего пользователя.
  • if (isset($elByCurUser)) - проверили, установлена ли переменная $elByCurUser. По факту, проверили, есть ли у текущего пользователя элемент (создавал ли он его)
  • $redirectToElEdit = $editPage.$elByCurUser - конкатинацией собрали url на форму редактирования и в параметр передали ID элемента.
  • header('Location: '.$redirectToElEdit) - отправили пользователя на форму редактирования

В общем-то и все. Если у пользователя еще нет элемента, он останется на этой странице, если элемент уже есть он отправится на форму редактирования.

Тоже самое, делаем на странице /personal/form/edit.php- если у пользователя еще нет элемента, отправляем его на форму создания/personal/form/add.php


if (isset($elByCurUser)) { //Если у пользователя еще нет анкеты он отправляется на создание

} else {
    $editPage = '/personal/form/';
    header('Location: '.$editPage);
}
Александр Силуянов 29.07.2019
Михаил, а вот такой вопрос.
Есть инфоблок с дисконтными картами. Там их примерно 450к.
Пользователь, методом выше отправляет данные, а форма должна узнать, существует ли карта, которую он ввел.
Грубо говоря при отправке формы она должна сверить введенные данные со списком карт и если такая карта есть в базе, то гуд, а если нет, то соответствующее сообщение.
Не подскажите как такую штуку реализовать?

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Композитный сайт на 1С-Битрикс Просмотров: 3037 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12062 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 15479 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 683 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Удалить товары из корзины, если есть определенные товары. Просмотров: 879 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Вывести множественное свойство типа файл с названием и весом файла в ... Просмотров: 20203 В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 17737 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1199 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 6142 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Вывести список всех пользователей с необходимой информацией Просмотров: 24096 Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистир... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4253 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 61272 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать... Если папка то применяем...в Битрикс Просмотров: 29223 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди... Ajax форма обратной связи, реализация в битрикс Просмотров: 7580 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Малая корзина Битрикс, упрощенный шаблон Просмотров: 12543 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Создание раздела инфоблока при регистрации пользователя в Битрикс Просмотров: 7913 Например вам нужно выводить информацию исключительно для определенного пользователя. Само ... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 18244 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Рассылка новинок каталога в автоматическом режиме Просмотров: 1161 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11554 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв...