Обратились сегодня ко мне клиенты с задачей. Суть задачи: на сайте, реализованном самоучкой на базе 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)