Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

CAdminList, помоготе разобраться

00 голосов
4
Как я понял с использованием класса CAdminList можно реализовать списки с использованием фильтров, сортировок и т.д. Пробую сделать "простую" страницу, код ниже, использую докумнтацию и форум. Есть несколько вопросов, не могу разобраться.

Код
//index.php

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Title");
//в принципе не важно, для красоты
$APPLICATION->SetAdditionalCSS("/test/styles.css");
?>

<? 
//проблема мне кажеться сдесь, что и как подключать не знаю, полный пролог не подходит - отображает лишний заголовок
  require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); // первый общий пролог
  require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_popup_admin.php"); // первый общий пролог

  $sTableID = "Reports"; // ID таблицы
  $oSort = new CAdminSorting($sTableID, "NRN", "desc"); 
  $oReportList = new CAdminList($sTableID, $oSort);

  //заголовок списка
  $oReportList->AddHeaders(Array(
     array("id" => "NRN",
           "content" => "NRN",
           "sort" => "NRN",
           "default" => "true"
          ),
     array("id" => "SAGENT",
           "content" => "SAGENT",
           "sort" => "SAGENT",
           "default" => "true"
          ),
     array("id" => "SFORM",
           "content" => "SFORM",
           "sort" => "SFORM",
           "default" => "true"
          )
     ));

  //обработчиков пока нет

  //добавляем только одну запись

  // создаем строку. результат - экземпляр класса CAdminListRow
  $row =& $oReportList->AddRow("0001", Array("NRN"=>"0001","SAGENT"=>"TEST","SFORM"=>"TEST")); 
  
  // далее настроим отображение значений при просмотре и редаткировании списка
  // параметр NAME будет редактироваться как текст, а отображаться ссылкой
  $row->AddInputField("NRN", array("size"=>20));
  $row->AddViewField("NRN", "0001");
  $row->AddInputField("SAGENT", array("size"=>20));
  $row->AddViewField("SAGENT", "TEST");
  $row->AddInputField("SFORM", array("size"=>20));
  $row->AddViewField("SFORM", "TEST");

  // сформируем контекстное меню
  $arActions = Array();

  // редактирование элемента
  $arActions[] = array(
    "ICON"=>"insert",
    "DEFAULT"=>false,
    "TEXT"=>"Insert",
    "ACTION"=>$oReportList->ActionRedirect("report_insert.php")
  );

  // применим контекстное меню к строке
  $row->AddActions($arActions);

  //Итоги и т.д. 
//   $oReportList->AddFooter(
//     array(
//       array("title"=>GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value"=>0), // кол-во элементов
//       array("counter"=>true, "title"=>GetMessage("MAIN_ADMIN_LIST_CHECKED"), "value"=>"0"), // счетчик выбранных элементов
//     )
//   );

  //групповые операции
  $oReportList->AddGroupActionTable(Array(
    "refresh"=>"refresh", // деактивировать выбранные элементы
    "delete"=>"delete" // деактивировать выбранные элементы
    ));


  // сформируем меню из одного пункта - добавление
  $aContext = array(
    array(
      "TEXT"=>"Insert",
      "LINK"=>"report_insert.php?lang=".LANG,
      "TITLE"=>"Insert record",
      "ICON"=>"btn_new"
    ),
  );

  // и прикрепим его к списку
  $oReportList->AddAdminContextMenu($aContext);

/*
  пока тоже не важно
  // создадим объект фильтра
  $oFilter = new CAdminFilter(
    $sTableID."_filter",
    array(
      "NRN",
      "SAGENT",
      "SFROM",
    )
  );

  $sCurPage = $APPLICATION->GetCurPage();

  echo "<form name='find_form' method='get' action='".$APPLICATION->GetCurPage()."'>";
  $oFilter->Begin();

  echo "<tr>";
  echo "  <td>NRN:</td>";
  echo "  <td><input type='text' name='find_nrn' size='47' value='".htmlspecialchars($find_nrn)."'></td>";
  echo "</tr>";
  echo "<tr>";
  echo "  <td>SAGENT:</td>";
  echo "  <td><input type='text' name='find_sagent' size='47' value='".htmlspecialchars($find_sagent)."'></td>";
  echo "</tr>";
  echo "<tr>";
  echo "  <td>SFORM:</td>";
  echo "  <td><input type='text' name='find_sform' size='47' value='".htmlspecialchars($find_sform)."'></td>";
  echo "</tr>";

  $oFilter->Buttons(array("table_id"=>$sTableID,"url"=>$APPLICATION->GetCurPage(),"form"=>"find_form"));
  $oFilter->End();

  echo "</form>";
*/

  $oReportList->DisplayList();

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");


1.При нажатии
спросил 01 Фев, 14 от Bow (100 баллов)

4 Ответы

00 голосов
Посмотрите внимательно пример документации. Зачем Вы подключаете prolog_popup_admin.php?
ответил 08 Июнь, 14 от Pomnep (13,960 баллов)
00 голосов
Без него, идет ошибка "PopupMenu" определение отсутствует.
ответил 06 Окт, 14 от Bow (100 баллов)
00 голосов
Цитата
uasy пишет:
Без него, идет ошибка "PopupMenu" определение отсутствует.

Шаблон страницы из документации:
Код
<?
// подключим все необходимые файлы:
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); // первый общий пролог

require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/include.php"); // инициализация модуля
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/prolog.php"); // пролог модуля

// подключим языковой файл
IncludeModuleLangFile(__FILE__);

// получим права доступа текущего пользователя на модуль
$POST_RIGHT = $APPLICATION->GetGroupRight("subscribe");
// если нет прав - отправим к форме авторизации с сообщением об ошибке
if ($POST_RIGHT == "D")
   $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
?>
<?
// здесь будет вся серверная обработка и подготовка данных
?>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); // второй общий пролог
?>
<?
// здесь будет вывод страницы
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>

Нет там вызова prolog_popup_admin.php. Зато есть вызов
Код
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); // второй общий пролог
?>

И кроме того, как Вы данные получаете из своей таблицы? В коде этого нет вообще. Кстати, измените $sTableID. Он, когда не с 'tbl_' начинается - не работает (на своем опыте убедился).
ответил 07 Фев, 15 от Pomnep (13,960 баллов)
00 голосов
да, если добавить prolog_admin_after.php, то ошибки про PopupMenu нет, но отображается дополнительная шапка "Публичеый раздел, редактировать сайт и панель управления".

Данные из таблиц пока не получаю, для теста вставляю одну запись программно.

В любом случае при нажатии на чек "пометить запись" вываливаются ошибки.
ответил 20 Май, 15 от Bow (100 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 17 Сен, 13 от Vamp1r3 (220 баллов)
0 голосов
2 ответов
спросил 16 Апр, 14 от Arctill (100 баллов)
0 голосов
3 ответов
0 голосов
3 ответов
спросил 19 Март, 14 от Snezhka (2,240 баллов)
0 голосов
2 ответов
спросил 05 Март, 14 от Soulmir (100 баллов)