Пример создания списка элементов
Описание создания административной страницы со списком можно увидеть здесь.
Пример
<?php use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; // подключим все необходимые файлы: require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); // первый общий пролог Loader::includeModule('subscribe'); // инициализация модуля require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/prolog.php"); // пролог модуля // явного подключения языкового файла не требуется // получим права доступа текущего пользователя на модуль $POST_RIGHT = $APPLICATION->GetGroupRight("subscribe"); // если нет прав - отправим к форме авторизации с сообщением об ошибке if ($POST_RIGHT == "D") $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED")); $sTableID = "tbl_rubric"; // ID таблицы $oSort = new CAdminSorting($sTableID, "ID", "desc"); // объект сортировки $lAdmin = new CAdminList($sTableID, $oSort); // основной объект списка $by = mb_strtoupper($lAdmin->getField()); $order = mb_strtoupper($lAdmin->getOrder()); // ******************************************************************** // // ФИЛЬТР // // ******************************************************************** // // *********************** CheckFilter ******************************** // // проверку значений фильтра для удобства вынесем в отдельную функцию function CheckFilter() { global $FilterArr, $lAdmin; foreach ($FilterArr as $f) global $$f; // В данном случае проверять нечего. // В общем случае нужно проверять значения переменных $find_имя // и в случае возниконовения ошибки передавать ее обработчику // посредством $lAdmin->AddFilterError('текст_ошибки'). return count($lAdmin->arFilterErrors)==0; // если ошибки есть, вернем false; } // *********************** /CheckFilter ******************************* // // опишем элементы фильтра $FilterArr = Array( "find", "find_type", "find_id", "find_lid", "find_active", "find_visible", "find_auto", ); // инициализируем фильтр $lAdmin->InitFilter($FilterArr); // если все значения фильтра корректны, обработаем его if (CheckFilter()) { // создадим массив фильтрации для выборки CRubric::GetList() на основе значений фильтра $arFilter = Array( "ID" => ($find!="" && $find_type == "id"? $find:$find_id), "LID" => $find_lid, "ACTIVE" => $find_active, "VISIBLE" => $find_visible, "AUTO" => $find_auto, ); } // ******************************************************************** // // ОБРАБОТКА ДЕЙСТВИЙ НАД ЭЛЕМЕНТАМИ СПИСКА // // ******************************************************************** // // сохранение отредактированных элементов if($lAdmin->EditAction() && $POST_RIGHT=="W") { // пройдем по списку переданных элементов foreach($lAdmin->GetEditFields() as $ID=>$arFields) { // сохраним изменения каждого элемента $DB->StartTransaction(); $ID = IntVal($ID); $cData = new CRubric; if(($rsData = $cData->GetByID($ID)) && ($arData = $rsData->Fetch())) { foreach($arFields as $key=>$value) $arData[$key]=$value; if(!$cData->Update($ID, $arData)) { $lAdmin->AddGroupError(Loc::getMessage("rub_save_error")." ".$cData->LAST_ERROR, $ID); $DB->Rollback(); } } else { $lAdmin->AddGroupError(Loc::getMessage("rub_save_error")." ".Loc::getMessage("rub_no_rubric"), $ID); $DB->Rollback(); } $DB->Commit(); } } // обработка одиночных и групповых действий if(($arID = $lAdmin->GroupAction()) && $POST_RIGHT=="W") { // если выбрано "Для всех элементов" if ($lAdmin->IsGroupActionToAll()) { $cData = new CRubric; $rsData = $cData->GetList(array($by=>$order), $arFilter); while($arRes = $rsData->Fetch()) $arID[] = $arRes['ID']; } $action = $lAdmin->GetAction(); // пройдем по списку элементов foreach($arID as $ID) { if(strlen($ID)<=0) continue; $ID = IntVal($ID); // для каждого элемента совершим требуемое действие switch($action) { // удаление case "delete": @set_time_limit(0); $DB->StartTransaction(); if(!CRubric::Delete($ID)) { $DB->Rollback(); $lAdmin->AddGroupError(Loc::getMessage("rub_del_err"), $ID); } $DB->Commit(); break; // активация/деактивация case "activate": case "deactivate": $cData = new CRubric; if(($rsData = $cData->GetByID($ID)) && ($arFields = $rsData->Fetch())) { $arFields["ACTIVE"]=($_REQUEST['action']=="activate"?"Y":"N"); if(!$cData->Update($ID, $arFields)) $lAdmin->AddGroupError(Loc::getMessage("rub_save_error").$cData->LAST_ERROR, $ID); } else $lAdmin->AddGroupError(Loc::getMessage("rub_save_error")." ".Loc::getMessage("rub_no_rubric"), $ID); break; } } } // ******************************************************************** // // ВЫБОРКА ЭЛЕМЕНТОВ СПИСКА // // ******************************************************************** // // выберем список рассылок $cData = new CRubric; $rsData = $cData->GetList(array($by=>$order), $arFilter); // преобразуем список в экземпляр класса CAdminResult $rsData = new CAdminResult($rsData, $sTableID); // аналогично CDBResult инициализируем постраничную навигацию. $rsData->NavStart(); // отправим вывод переключателя страниц в основной объект $lAdmin $lAdmin->NavText($rsData->GetNavPrint(Loc::getMessage("rub_nav"))); // ******************************************************************** // // ПОДГОТОВКА СПИСКА К ВЫВОДУ // // ******************************************************************** // $lAdmin->AddHeaders(array( array( "id" =>"ID", "content" =>"ID", "sort" =>"id", "align" =>"right", "default" =>true, ), array( "id" =>"NAME", "content" =>Loc::getMessage("rub_name"), "sort" =>"name", "default" =>true, ), array( "id" =>"LID", "content" =>Loc::getMessage("rub_site"), "sort" =>"lid", "default" =>true, ), array( "id" =>"SORT", "content" =>Loc::getMessage("rub_sort"), "sort" =>"sort", "align" =>"right", "default" =>true, ), array( "id" =>"ACTIVE", "content" =>Loc::getMessage("rub_act"), "sort" =>"act", "default" =>true, ), array( "id" =>"VISIBLE", "content" =>Loc::getMessage("rub_visible"), "sort" =>"visible", "default" =>true, ), array( "id" =>"AUTO", "content" =>Loc::getMessage("rub_auto"), "sort" =>"auto", "default" =>true, ), array( "id" =>"LAST_EXECUTED", "content" =>Loc::getMessage("rub_last_exec"), "sort" =>"last_executed", "default" =>true, ), )); while($arRes = $rsData->NavNext(true, "f_")): // создаем строку. результат - экземпляр класса CAdminListRow $row =& $lAdmin->AddRow($f_ID, $arRes); // далее настроим отображение значений при просмотре и редаткировании списка // параметр NAME будет редактироваться как текст, а отображаться ссылкой $row->AddInputField("NAME", array("size"=>20)); $row->AddViewField("NAME", '<a href="rubric_edit.php?ID='.$f_ID.'&lang='.LANG.'">'.$f_NAME.'</a>'); // параметр LID будет редактироваться в виде выпадающего списка языков $row->AddEditField("LID", CLang::SelectBox("LID", $f_LID)); // параметр SORT будет редактироваться текстом $row->AddInputField("SORT", array("size"=>20)); // флаги ACTIVE и VISIBLE будут редактироваться чекбоксами $row->AddCheckField("ACTIVE"); $row->AddCheckField("VISIBLE"); // параметр AUTO будет отображаться в виде "Да" или "Нет", полужирным при редактировании $row->AddViewField("AUTO", $f_AUTO=="Y"?Loc::getMessage("POST_U_YES"):Loc::getMessage("POST_U_NO")); $row->AddEditField("AUTO", "<b>".($f_AUTO=="Y"?Loc::getMessage("POST_U_YES"):Loc::getMessage("POST_U_NO"))."</b>"); // сформируем контекстное меню $arActions = Array(); // редактирование элемента $arActions[] = array( "ICON"=>"edit", "DEFAULT"=>true, "TEXT"=>Loc::getMessage("rub_edit"), "ACTION"=>$lAdmin->ActionRedirect("rubric_edit.php?ID=".$f_ID) ); // удаление элемента if ($POST_RIGHT>="W") $arActions[] = array( "ICON"=>"delete", "TEXT"=>Loc::getMessage("rub_del"), "ACTION"=>"if(confirm('".Loc::getMessage('rub_del_conf')."')) ".$lAdmin->ActionDoGroup($f_ID, "delete") ); // вставим разделитель $arActions[] = array("SEPARATOR"=>true); // проверка шаблона для автогенерируемых рассылок if (strlen($f_TEMPLATE)>0 && $f_AUTO=="Y") $arActions[] = array( "ICON"=>"", "TEXT"=>Loc::getMessage("rub_check"), "ACTION"=>$lAdmin->ActionRedirect("template_test.php?ID=".$f_ID) ); // если последний элемент - разделитель, почистим мусор. if(is_set($arActions[count($arActions)-1], "SEPARATOR")) unset($arActions[count($arActions)-1]); // применим контекстное меню к строке $row->AddActions($arActions); endwhile; // резюме таблицы $lAdmin->AddFooter( array( array("title"=>Loc::getMessage("MAIN_ADMIN_LIST_SELECTED"), "value"=>$rsData->SelectedRowsCount()), // кол-во элементов array("counter"=>true, "title"=>Loc::getMessage("MAIN_ADMIN_LIST_CHECKED"), "value"=>"0"), // счетчик выбранных элементов ) ); // групповые действия $lAdmin->AddGroupActionTable(Array( "delete"=>Loc::getMessage("MAIN_ADMIN_LIST_DELETE"), // удалить выбранные элементы "activate"=>Loc::getMessage("MAIN_ADMIN_LIST_ACTIVATE"), // активировать выбранные элементы "deactivate"=>Loc::getMessage("MAIN_ADMIN_LIST_DEACTIVATE"), // деактивировать выбранные элементы )); // ******************************************************************** // // АДМИНИСТРАТИВНОЕ МЕНЮ // // ******************************************************************** // // сформируем меню из одного пункта - добавление рассылки $aContext = array( array( "TEXT"=>Loc::getMessage("POST_ADD"), "LINK"=>"rubric_edit.php?lang=".LANG, "TITLE"=>Loc::getMessage("POST_ADD_TITLE"), "ICON"=>"btn_new", ), ); // и прикрепим его к списку $lAdmin->AddAdminContextMenu($aContext); // ******************************************************************** // // ВЫВОД // // ******************************************************************** // // альтернативный вывод $lAdmin->CheckListMode(); // установим заголовок страницы $APPLICATION->SetTitle(Loc::getMessage("rub_title")); // не забудем разделить подготовку данных и вывод require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); // ******************************************************************** // // ВЫВОД ФИЛЬТРА // // ******************************************************************** // // создадим объект фильтра $oFilter = new CAdminFilter( $sTableID."_filter", array( "ID", Loc::getMessage("rub_f_site"), Loc::getMessage("rub_f_active"), Loc::getMessage("rub_f_public"), Loc::getMessage("rub_f_auto"), ) ); <form name="find_form" method="get" action="<?echo $APPLICATION->GetCurPage();?>"> <?php $oFilter->Begin(); <tr> <td><b><?=Loc::getMessage("rub_f_find")?>:</b></td> <td> <input type="text" size="25" name="find" value="<?echo htmlspecialchars($find)?>" title="<?=Loc::getMessage("rub_f_find_title")?>"> <?php $arr = array( "reference" => array( "ID", ), "reference_id" => array( "id", ) ); echo SelectBoxFromArray("find_type", $arr, $find_type, "", ""); </td> </tr> <tr> <td><?="ID"?>:</td> <td> <input type="text" name="find_id" size="47" value="<?echo htmlspecialchars($find_id)?>"> </td> </tr> <tr> <td><?=Loc::getMessage("rub_f_site").":"?></td> <td><input type="text" name="find_lid" size="47" value="<?echo htmlspecialchars($find_lid)?>"></td> </tr> <tr> <td><?=Loc::getMessage("rub_f_active")?>:</td> <td> <?php $arr = array( "reference" => array( Loc::getMessage("POST_YES"), Loc::getMessage("POST_NO"), ), "reference_id" => array( "Y", "N", ) ); echo SelectBoxFromArray("find_active", $arr, $find_active, Loc::getMessage("POST_ALL"), ""); </td> </tr> <tr> <td><?=Loc::getMessage("rub_f_public")?>:</td> <td><?php echo SelectBoxFromArray("find_visible", $arr, $find_visible, Loc::getMessage("POST_ALL"), "");</td> </tr> <tr> <td><?=Loc::getMessage("rub_f_auto")?>:</td> <td><?php echo SelectBoxFromArray("find_auto", $arr, $find_auto, Loc::getMessage("POST_ALL"), "");</td> </tr> <?php $oFilter->Buttons(array("table_id"=>$sTableID,"url"=>$APPLICATION->GetCurPage(),"form"=>"find_form")); $oFilter->End(); </form> <?php // выведем таблицу списка элементов $lAdmin->DisplayList(); <?php // завершение страницы require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");
© «Битрикс», 2001-2024, «1С-Битрикс», 2024