Всем доброго времени суток!
Данной статьёй попытаюсь решить две задачи:
Расскажу немного о структуре гаджета.
Физически они располагаются в папке /bitrix/gadgets/. Системные гаджеты расположены во вложенной папке /bitrix/, трогать их структуру не рекомендуется, поэтому для своего гаджета мы создадим папку /custom/workflow/.
Что ещё нужно для нашего гаджета?
Архивы с гаджетами:
http://dev.1c-bitrix.ru/upload/exampl...low_cp.zip
http://dev.1c-bitrix.ru/upload/exampl...ow_utf.zip
Спасибо за внимание и заранее приношу извинения за возможные ошибки (отводилось немного времени на разработку).
Данной статьёй попытаюсь решить две задачи:
- Научить (научиться) создавать гаджеты для кор. портала.
- А логика состоит в том, что выводить для текущего пользователя (чаще редактора сайта или администратора) элементы инфоблоков в различных статусах (черновик, готов, опубликовано, а также пользовательские статусы).
Расскажу немного о структуре гаджета.
Физически они располагаются в папке /bitrix/gadgets/. Системные гаджеты расположены во вложенной папке /bitrix/, трогать их структуру не рекомендуется, поэтому для своего гаджета мы создадим папку /custom/workflow/.
Что ещё нужно для нашего гаджета?
- Файл описания .description.php:
$arDescription = Array( "NAME"=>GetMessage("GD_WORKFLOW_NAME"), "DESCRIPTION"=>GetMessage("GD_WORKFLOW_DESC"), "ICON"=>"", "GROUP"=> Array("ID"=>"personal"), );
Т.е. мы в стандартный массив $arDescription передаём название гаджета и его описание. - Файл с настройками .parameters.php:
$arParameters = Array( "PARAMETERS"=> Array( "IBLOCK_TYPE" => Array( "PARENT" => "BASE", "NAME" => GetMessage("GD_WORKFLOW_LIST_TYPE"), "TYPE" => "LIST", "VALUES" => $arTypes, "DEFAULT" => "news", "REFRESH" => "Y", ), "IBLOCK_ID" => Array( "PARENT" => "BASE", "NAME" => GetMessage("GD_WORKFLOW_LIST_ID"), "TYPE" => "LIST", "VALUES" => $arIBlocks, "DEFAULT" => '', "ADDITIONAL_VALUES" => "Y", "REFRESH" => "Y", ), "ELEMENT_COUNT" => array( "PARENT" => "BASE", "NAME" => GetMessage("GD_WORKFLOW_ELEMENT_COUNT"), "TYPE" => "STRING", "DEFAULT" => '5', ), "SITE_ID" => array( "PARENT" => "BASE", "NAME" => "test111", "TYPE" => "STRING", "DEFAULT" => $_REQUEST["src_site"], "HIDDEN" => 'Y', ), ), "USER_PARAMETERS"=> Array( "USER_STATUS_ID" => array( "PARENT" => "BASE", "NAME" => GetMessage("GD_WORKFLOW_STATUS_ID"), "TYPE" => "LIST", "VALUES" => $arStatus, ), ), );
В данном случае стоит обратить внимание на ключи "PARAMETERS" и "USER_PARAMETERS" массива $arParameters. В первый ключ записываются параметры, которые будут выводиться в настройках компонента bitrix:desctop, а второй предназначен для настроек, которые может задать конкретный пользователь. - И собственно файл index.php, который собственно и содержит код, реализующий нашу задачу.
$arGadgetParams["USER_STATUS_ID"] = ($arGadgetParams["USER_STATUS_ID"] ? $arGadgetParams["USER_STATUS_ID"] : 2); if (intval($arGadgetParams["ELEMENT_COUNT"]) <= 0) $arGadgetParams["ELEMENT_COUNT"] = 5; $arGadgetParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]); if(strlen($arGadgetParams["IBLOCK_TYPE"])<=0) $arGadgetParams["IBLOCK_TYPE"] = "news"; $arGadgetParams["IBLOCK_ID"] = trim($arGadgetParams["IBLOCK_ID"]); $arNavParams = array( "nPageSize" => $arGadgetParams["ELEMENT_COUNT"], ); $obCache = new CPageCache; $life_time = 30*60; //30 минут $cache_id = $arGadgetParams["IBLOCK_TYPE"].$arGadgetParams["IBLOCK_ID"].$USER->GetGroups(); if($obCache->StartDataCache($life_time, $cache_id, "/")): if(!CModule::IncludeModule("iblock")) { ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED")); return; } elseif (!CModule::IncludeModule("workflow")) { ShowError(GetMessage("WORKFLOW_MODULE_NOT_INSTALLED")); return; } $rsIBlock = CIBlock::GetList(array(), array( "ACTIVE" => "Y", "ID" => $arGadgetParams["IBLOCK_ID"], "SITE_ID" => $arGadgetParams["SITE_ID"], )); if($arResult = $rsIBlock->GetNext()) { $arSelect = array( "ID", "IBLOCK_ID", "NAME", "DATE_CREATE", "PREVIEW_PICTURE", ); $arFilter = array ( "IBLOCK_ID" => $arResult["ID"], "IBLOCK_LID" => $arGadgetParams["SITE_ID"], "ACTIVE" => "Y", "CHECK_PERMISSIONS" => "Y", "SHOW_HISTORY" => "Y", "WF_STATUS_ID" => $arGadgetParams["USER_STATUS_ID"], ); $arSort = array("SORT"=>"ASC"); //Execute $rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect); echo "<table border=0>"; while($obElement = $rsElement->GetNext()) {?> <tr> <td valign="top" style="padding: 10px 0px 10px 0px;"><?=CFile::ShowImage($obElement['PREVIEW_PICTURE'], 60, 40);?></td> <td style="color:gray; padding:10px 0px 10px 0px;" ><?=GetMessage("GD_WORKFLOW_CREATE").": ".$obElement["DATE_CREATE"]?><br><a href="<?="/bitrix/admin/iblock_element_edit.php?WF=Y&ID=".$obElement["ID"]."&type=".$arResult["IBLOCK_TYPE_ID"]."&IBLOCK_ID=".$arResult["ID"]?>"><?=$obElement['NAME']?></a></td> </tr> <?} echo "</table>"; } $obCache->EndDataCache(); endif;
Ничего сложного, мы кешируем выборку и выводим пользователю ссылки на искомые элементы в административной части сайта. - Языковые файлы в папке /lang/
Думаю Вы без труда разберётесь с данным разделом.
Архивы с гаджетами:
Спасибо за внимание и заранее приношу извинения за возможные ошибки (отводилось немного времени на разработку).