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

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

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

Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно воспользоваться 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-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Получение местоположений через API Битрикс c поиском по select. Просмотров: 23251 Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Би... Подключение мобильной версии шаблона Битрикс сайта, с автопереключени... Просмотров: 43410 Предпочитаю, что бы сайт не грузил кучу скриптов и стилей. При загрузке адаптивного шаблон... Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне ... Просмотров: 1795 Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении то... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13624 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Дополнительные опции/услуги, добавляемые в корзину, в карточке товаро... Просмотров: 1071 Задача: в детальной карточке товара сделать возможность добавления услуги или опции, при д... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 2004 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 12793 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Базовая защита "Битрикс виртуальная машина" от DDoS атак. Просмотров: 5877 Данный способ защиты не панацея, и скорее всего не спасет от профессиональной DDoS атаки, ... Cordova, ввод в input под диктовку. Голосовой поиск в мобильном прило... Просмотров: 1624 Итак, задачка: реализовать голосовой поиск в мобильном приложении на Cordova. По сути, нам... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 29636 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Правильное подключение стилей и скриптов в Битрикс Просмотров: 85416 Есть несколько способов подключения файлов стилей и скриптов, при верстке шаблонов в систе... Очистить брошенные корзины с помощью API 1С-Битрикс Просмотров: 1185 Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их оч... Индивидуальные цены в 1С-Битрикс: в каталоге и при оформлении заказа Просмотров: 6094 В этой заметке постараюсь описать процесс реализации индивидуальных цен, для пользователей... Вывести общее количество товаров в шаблоне корзины 1С-Битрикс Просмотров: 7069 Задача: вывести общее количество товаров в корзине (именно количество единиц товара, а не ... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18802 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Показать пользователю накопительную скидку за все сделанные заказы, и... Просмотров: 2641 Задача: показать, текущему авторизованному, пользователю сумму всех выполненных заказов и ... Добавление в избранное или отложенные, на AJAX из карточки товара Просмотров: 29256 В этой заметке рассакажу как добавлять товары в "Отложенные", для иммитации функционала "И... Сгенерировать скидочные купоны, при заказе и отправить на почту Просмотров: 1723 Задача: после того как пользователь сделал заказ, нужно сгенерировать одноразовые купоны д... Дополнительные параметры в меню Битрикс Просмотров: 20802 Иногда нужно присвоить какой-то функционал к конкретному пункту меню в битрикс. Например о... AJAX корзина с отправкой количества из раздела каталога Просмотров: 20192 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При...