Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

Просмотров: 9743
Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно воспользоваться 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);
}
Услуги

Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс