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