Обратились сегодня ко мне клиенты с задачей. Суть задачи: на сайте, реализованном самоучкой на базе 1С-Битрикс размещаются публикации разного уровня сложности, публикации находятся в большом количестве инфоблоков, смена статуса настроена через статусы модуля документооборота. Необходимо разработать страницу, на которой будут выводиться все публикации, которые необходимо промодерировать.
Обратились сегодня ко мне клиенты с задачей. Суть задачи: на сайте, реализованном самоучкой на базе 1С-Битрикс размещаются публикации разного уровня сложности, публикации находятся в большом количестве инфоблоков, смена статуса настроена через статусы модуля документооборота. Необходимо разработать страницу, на которой будут выводиться все публикации, которые необходимо промодерировать.
Решение задачи.
Для начала создаем раздел, в котором будут выводиться все данные (пусть это будет moder). Раздел закрываем от неавторизованных пользователей, добавляем доступ только всем группам модераторов. Либо можно в самом начале страницы добавить проверку на принадлежность пользователей нужным группам:
if ( CSite::InGroup( array(1,7) ) ){ /*тут будет основной функционал*/ } else { ShowError('Данный раздел только для модераторов'); }
Далее необходимо отобрать список всех публикаций, который находятся на публикации (По умолчанию ID статуса "На модерации" = 4). В результате получаем функцию выборки данных:
function GetWFElements($statusID = 4) { if (!\Bitrix\Main\Loader::includeModule('iblock')) return false; $arSelect = Array("ID", "IBLOCK_ID", "IBLOCK_TYPE_ID", "NAME", "DATE_CREATE", "TIMESTAMP_X", "WF_STATUS_ID"); $arFilter = Array("WF_STATUS_ID" => IntVal($statusID), "SHOW_HISTORY" => 'Y', "ACTIVE" => "Y"); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); $Items = array(); while ($arFields = $res->GetNext()) { $arFields['ADMIN_URL'] = '/bitrix/admin/iblock_element_edit.php?IBLOCK_ID=' . $arFields['IBLOCK_ID'] . '&type=' . $arFields['IBLOCK_TYPE_ID'] . '&ID=' . $arFields['ID'] . '&lang=ru&WF=Y'; $Items[$arFields['IBLOCK_ID']][] = $arFields; } return $Items; }
Функция получает список всех публикация во всех инфоблоках и раскидывает эти публикации по ID инфоблоков. Каждой публикации добавляем ссылку на редактирование публикации в административном разделе (ADMIN_URL)