Дать пользователю возможность быстро отредактировать материал

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

На одном из разрабатываемых сайтов, пользователи формируют его контент. После регистрации, становится доступен персональный раздел в котором, помимо стандартной социальной сети, выводятся все материалы пользователя и выведен компонент "Добавление . редактирование элементов инфоблока". Для большего удобства- в конкретном материале нужно было вывести ссылку- отправляющую пользователя прямо на страницу с этим компонентом.

Итак: страница на которой выведен компонент имеет адрес "/personal/dobavlenie-retsepta/", редактирование ранее добавленного элемента "/personal/dobavlenie-retsepta/?edit=Y&CODE=ID-элемента"

Получаем нужные данные через API Битрикс

В каждом элементе мы можем легко получить ID-пользователя который его добавил, ID-текущего пользователя- который смотрит материал, знаем- авторизован ли он и знаем ID-этого элемента

Дело за малым: с помощью API Битрикс нужно выполнить ряд проверок, так что бы только владелец материала (элемента) видел ссылку на редактирование:


<?
 $create_user = $arResult["CREATED_BY"];
 $GLOBALS['users'] = array("CREATED_BY" => $create_user);
 $userid = $create_user;
 $rsUser = CUser::GetByID($userid);
 $arUser = $rsUser->Fetch();  
 ?>

 <?if(CUser::IsAuthorized()):?>
 <?
   $hoster = $arUser["LOGIN"];
   global $USER;
   $nowUser = $USER->GetLogin();
   if($nowUser===$hoster):
 ?>
   <a class="redaktor" href="/personal/dobavlenie-retsepta/?edit=Y&CODE=<?=$arResult['ID']?>">
       Изменить рецепт
   </a>
 <?endif;?>
 <?endif;?>

Пояснения

  • CUser::GetByID - получаем все данные пользователя добавившего элемент, это мне нужно было для других задач (вывести имя автора статьи, получить ссылку на его профиль в социальной сети и.т.д.)
  • if(CUser::IsAuthorized()): - проверяем авторизован ли пользователь. Не важно владелец материала или нет- просто текущий пользователь читающий материал.
  • $hoster = $arUser["LOGIN"]; - переменной $hoster назначаем логин пользователя-владельца материала.
  • $nowUser = $USER->GetLogin(); - переменной $nowUser назначам логин текущего авторизованного пользователя.
  • if($nowUser===$hoster) - проверяем: тождественен ли (совпадает ли) логин владельца и текущего "читателя".
  • /personal/dobavlenie-retsepta/?edit=Y&CODE=<?=$arResult['ID']?> - если все совпало- то выводим ссылку на редактирование- как есть но в конце подставляем ID текущей статьи

Вот и все, теперь пользователю-автору статьи не нужно идти в кабинет, в список всех своих статей. Теперь можно отредактировать материал прямо с его страницы

Roman Drozdov 23.07.2018
Михаил, здравствуйте. Спасибо за урок.

Столкнулся с проблемой "Наоборот". Вывожу список статей добавленных пользователем через компонент element.add.list, оттуда как раз мы можем отредактировать или удалять элементы.

Но вот получить ссылку на элемент у меня не получается. Вернее даже её часть, а именно секцию, где находится этот элемент.

Код
 <a href="/projects/[Как получить вот этот путь?]/<?=$arElement["ID"]?>"><?echo $arElement["NAME"]?></a>


Подскажите пожалуйста :)
Михаил Базаров 23.07.2018
Код
$ElementId = $arElement["ID"];
    $db_groups = CIBlockElement::GetElementGroups($ElementId, true);
    while($ar_group = $db_groups->Fetch()) {
       $section = $ar_group["CODE"]; //или ['ID'] смотря как ЧПУ используете
}

<a href="/projects/<?=$section?>/<?=$arElement["ID"]?>"><?echo $arElement["NAME"]?></a> 
Попробуйте так, делал на глаз) Может закрались опечатки
Roman Drozdov 24.07.2018
Спасибо большое, заработало!  :)
Гость 12.07.2024
    Всё отлично!

   опечатка 1 - (формируют): "пользователи формирую его контент"
   опечатка 2 - (помимо): "по мимо стандартной"

Блог-note: заметки разработчика

Заполнение множественного пользовательского свойства типа "строка" через API

Задача: когда пользователь заходит в мобильное приложение, нужно сохранить FCM токен устройства в пользовательское поле ...

Постраничная навигация в списке разделов Битрикс- catalog.section.list

Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно воспользоваться методами CDBR...

Удалить товары из корзины, если есть определенные товары.

Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины, все другие товары- предупред...

Не дать купить товара больше, чем находится на определенных складах

Задача: в магазине 20 складов, на всех есть остатки но нужно ограничить покупку товара только остатками на двух складах,...

Оптимизация jpeg и png картинок на cron, с помощью jpegoptim и optipng

Задача: на сайт каждый день проходит выгрузка из 1С с обновлением картинок. Нужно оптимизмровать эти картинки с помощью...

Вывод элементов с помощью API битрикс

Иногда, выводить элементы инфоблока с помощью компонентов, может оказаться избыточным. Например, если нужно вывести элем...

Дать пользователю возможность быстро отредактировать материал

На одном из разрабатываемых сайтов, пользователи формируют его контент. После регистрации, становится доступен персональ...

Бонус за выполненный заказ на внутренний счет пользователя

Задача: после того как заказ, в интернет-магазине, перешел в статус "Выполнен" начислить пользователю 5% от стоимости за...

Автоматически помечаем новинки лейблом в каталоге битрикс

Если вы хотите помечать новинки каталога, вашего магазина на Битрикс, лейблом "Новинка". И так, что бы это происходило а...