/**
  * Основной цикл отображения списка. Этапы:
  * <ul>
  * <li> Вывод заголовков страницы </li>
  * <li> Определение списка видимых колонок и колонок, участвующих в выборке. </li>
  * <li> Создание виджета для каждого поля выборки </li>
  * <li> Модификация параметров запроса каждым из виджетов </li>
  * <li> Выборка данных </li>
  * <li> Вывод строк таблицы. Во время итерации по строкам возможна модификация данных строки. </li>
  * <li> Отрисовка футера таблицы, добавление контекстного меню </li>
  * </ul>
  *
  * @param array $sort Настройки сортировки.
  *
  * @see AdminListHelper::getList();
  * @see AdminListHelper::getMixedData();
  * @see AdminListHelper::modifyRowData();
  * @see AdminListHelper::addRowCell();
  * @see AdminListHelper::addRow();
  * @see HelperWidget::changeGetListOptions();
  */
 public function buildList($sort)
 {
     $this->setContext(AdminListHelper::OP_GET_DATA_BEFORE);
     $headers = $this->arHeader;
     $sectionEditHelper = static::getHelperClass(AdminSectionEditHelper::className());
     if ($sectionEditHelper) {
         // если есть реализация класса AdminSectionEditHelper, значит используются разделы
         $sectionHeaders = $this->getSectionsHeader();
         foreach ($sectionHeaders as $sectionHeader) {
             foreach ($headers as $i => $elementHeader) {
                 if ($sectionHeader['id'] == $elementHeader['id']) {
                     unset($headers[$i]);
                 }
             }
         }
         $headers = array_merge($headers, $sectionHeaders);
     }
     // сортировка столбцов с сохранением исходной позиции в
     // массиве для развнозначных элементов
     // массив $headers модифицируется
     $this->mergeSortHeader($headers);
     $this->list->AddHeaders($headers);
     $visibleColumns = $this->list->GetVisibleHeaderColumns();
     if ($sectionEditHelper) {
         $modelClass = $this->getModel();
         $elementFields = array_keys($modelClass::getEntity()->getFields());
         $sectionsVisibleColumns = array();
         foreach ($visibleColumns as $k => $v) {
             if (isset($this->sectionFields[$v])) {
                 if (!in_array($k, $elementFields)) {
                     unset($visibleColumns[$k]);
                 }
                 $sectionsVisibleColumns[] = $v;
             }
         }
         $visibleColumns = array_values($visibleColumns);
         $visibleColumns = array_merge($visibleColumns, array_keys($this->tableColumnsMap));
     }
     $className = static::getModel();
     $visibleColumns[] = static::pk();
     $sectionsVisibleColumns[] = static::sectionPk();
     $raw = array('SELECT' => $visibleColumns, 'FILTER' => $this->arFilter, 'SORT' => $sort);
     foreach ($this->fields as $name => $settings) {
         if (isset($settings['VIRTUAL']) and $settings['VIRTUAL'] == true) {
             $key = array_search($name, $visibleColumns);
             unset($visibleColumns[$key]);
             unset($this->arFilter[$name]);
             unset($sort[$name]);
         }
         if (isset($settings['FORCE_SELECT']) and $settings['FORCE_SELECT'] == true) {
             $visibleColumns[] = $name;
         }
     }
     $visibleColumns = array_unique($visibleColumns);
     $sectionsVisibleColumns = array_unique($sectionsVisibleColumns);
     // Поля для селекта (перевернутый массив)
     $listSelect = array_flip($visibleColumns);
     foreach ($this->fields as $code => $settings) {
         $widget = $this->createWidgetForField($code);
         $widget->changeGetListOptions($this->arFilter, $visibleColumns, $sort, $raw);
         // Множественные поля не должны быть в селекте
         if (!empty($settings['MULTIPLE'])) {
             unset($listSelect[$code]);
         }
     }
     // Поля для селекта (множественные поля отфильтрованы)
     $listSelect = array_flip($listSelect);
     if ($sectionEditHelper) {
         $mixedData = $this->getMixedData($sectionsVisibleColumns, $visibleColumns, $sort, $raw);
         $res = new \CDbResult();
         $res->InitFromArray($mixedData);
         $res = new \CAdminResult($res, $this->getListTableID());
         $res->nSelectedCount = $this->totalRowsCount;
         // используем кастомный NavStart что бы определить правильное количество страниц и элементов в списке
         $this->customNavStart($res);
         $this->list->NavText($res->GetNavPrint(Loc::getMessage("PAGES")));
         while ($data = $res->NavNext(false)) {
             $this->modifyRowData($data);
             if ($data['IS_SECTION']) {
                 list($link, $name) = $this->getRow($data, $this->getHelperClass(AdminSectionEditHelper::className()));
                 $row = $this->list->AddRow('s' . $data[$this->pk()], $data, $link, $name);
                 foreach ($this->sectionFields as $code => $settings) {
                     if (in_array($code, $sectionsVisibleColumns)) {
                         $this->addRowSectionCell($row, $code, $data);
                     }
                 }
                 $row->AddActions($this->getRowActions($data, true));
             } else {
                 $this->modifyRowData($data);
                 list($link, $name) = $this->getRow($data);
                 // объединение полей элемента с полями раздела
                 foreach ($this->tableColumnsMap as $elementCode => $sectionCode) {
                     if (isset($data[$elementCode])) {
                         $data[$sectionCode] = $data[$elementCode];
                     }
                 }
                 $row = $this->list->AddRow($data[$this->pk()], $data, $link, $name);
                 foreach ($this->fields as $code => $settings) {
                     $this->addRowCell($row, $code, $data, isset($this->tableColumnsMap[$code]) ? $this->tableColumnsMap[$code] : false);
                 }
                 $row->AddActions($this->getRowActions($data));
             }
         }
     } else {
         $res = $this->getData($className, $this->arFilter, $listSelect, $sort, $raw);
         $res = new \CAdminResult($res, $this->getListTableID());
         $res->NavStart();
         $this->list->NavText($res->GetNavPrint(Loc::getMessage("PAGES")));
         while ($data = $res->NavNext(false)) {
             $this->modifyRowData($data);
             list($link, $name) = $this->getRow($data);
             $row = $this->list->AddRow($data[$this->pk()], $data, $link, $name);
             foreach ($this->fields as $code => $settings) {
                 $this->addRowCell($row, $code, $data);
             }
             $row->AddActions($this->getRowActions($data));
         }
     }
     $this->list->AddFooter($this->getFooter($res));
     $this->list->AddGroupActionTable($this->getGroupActions(), $this->groupActionsParams);
     $this->list->AddAdminContextMenu($this->getContextMenu());
     $this->list->BeginPrologContent();
     echo $this->prologHtml;
     $this->list->EndPrologContent();
     $this->list->BeginEpilogContent();
     echo $this->epilogHtml;
     $this->list->EndEpilogContent();
     // добавляем ошибки в CAdminList для режимов list и frame
     if (in_array($_GET['mode'], array('list', 'frame')) && is_array($this->getErrors())) {
         foreach ($this->getErrors() as $error) {
             $this->list->addGroupError($error);
         }
     }
     $this->list->CheckListMode();
 }
Exemplo n.º 2
0
                    $row->AddField("QUANTITY", '<input type="text" id="' . $tableId . '_qty_' . $arItems["ID"] . '" value="' . $ratio . '" size="5" />' . $measure);
                    unset($measure, $ratio);
                    $arActions[] = array("TEXT" => GetMessage("SPS_SELECT"), "DEFAULT" => "Y", "ACTION" => $tableId . '_helper.SelEl(' . CUtil::PhpToJSObject($arParams) . ', this);');
                    $row->AddField("ACTION", '<a class="select-sku">' . GetMessage('SPS_SELECT') . '</a>');
                } else {
                    $arActions[] = array("TEXT" => GetMessage("SPS_SELECT"), "DEFAULT" => "Y", "ACTION" => $tableId . '_helper.onSectionClick(' . $arItems["ID"] . ',\'' . CUtil::JSEscape($arItems['NAME']) . '\');');
                }
                foreach ($arPrices as $price) {
                    $row->AddViewField("PRICE" . $price['ID'], CCurrencyLang::CurrencyFormat($arItems['PRICES'][$price['ID']]['PRICE'], $arItems['PRICES'][$price['ID']]['CURRENCY'], true));
                }
            }
            addPropsCell($row, $arSelectedProps, $arItems);
            $row->AddViewField('NAME', '<a class="adm-list-table-link"><span class="bx-s-iconset ' . $icon . '"></span>' . htmlspecialcharsex($arItems['NAME']) . '</a>');
            $row->AddActions($arActions);
        }
        $lAdmin->BeginEpilogContent();
        ?>
	<script type="text/javascript">
		<?php 
        foreach ($arSku as $k => $v) {
            ?>
		if (BX('<?php 
            echo $tableId;
            ?>
_sku-<?php 
            echo $v;
            ?>
'))
		{
			var skuRow = BX('<?php 
            echo $tableId;
 /**
  * Основной цикл отображения списка. Этапы:
  * <ul>
  * <li> Вывод заголовков страницы </li>
  * <li> Определение списка видимых колонок и колонок, участвующих в выборке. </li>
  * <li> Создание виджета для каждого поля выборки </li>
  * <li> Модификация параметров запроса каждым из виджетов </li>
  * <li> Выборка данных </li>
  * <li> Вывод строк таблицы. Во время итерации по строкам возможна модификация данных строки. </li>
  * <li> Отрисовка футера таблиы, добавление контекстного меню </li>
  * </ul>
  *
  * @param array $sort Настройки сортировки.
  *
  * @see AdminListHelper::getList();
  * @see AdminListHelper::modifyRowData();
  * @see AdminListHelper::addRowCell();
  * @see AdminListHelper::addRow();
  * @see HelperWidget::changeGetListOptions();
  */
 public function getData($sort)
 {
     $this->setContext(AdminListHelper::OP_GET_DATA_BEFORE);
     $this->list->AddHeaders($this->arHeader);
     $visibleColumns = $this->list->GetVisibleHeaderColumns();
     $className = static::getModel();
     $visibleColumns[] = static::pk();
     $raw = array('SELECT' => $visibleColumns, 'FILTER' => $this->arFilter, 'SORT' => $sort);
     foreach ($this->fields as $name => $settings) {
         if (isset($settings['VIRTUAL']) and $settings['VIRTUAL'] == true) {
             $key = array_search($name, $visibleColumns);
             unset($visibleColumns[$key]);
             unset($this->arFilter[$name]);
             unset($sort[$name]);
         }
         if (isset($settings['FORCE_SELECT']) and $settings['FORCE_SELECT'] == true) {
             $visibleColumns[] = $name;
         }
     }
     $visibleColumns = array_unique($visibleColumns);
     // Поля для селекта (перевернутый массив)
     $listSelect = array_flip($visibleColumns);
     foreach ($this->fields as $code => $settings) {
         $widget = $this->createWidgetForField($code);
         $widget->changeGetListOptions($this->arFilter, $visibleColumns, $sort, $raw);
         // Множественные поля не должны быть в селекте
         if (!empty($settings['MULTIPLE'])) {
             unset($listSelect[$code]);
         }
     }
     // Поля для селекта (множественные поля отфильтрованы)
     $listSelect = array_flip($listSelect);
     $res = $this->getList($className, $this->arFilter, $listSelect, $sort, $raw);
     $res = new \CAdminResult($res, $this->getListTableID());
     $res->NavStart();
     $this->list->NavText($res->GetNavPrint(Loc::getMessage("PAGES")));
     while ($data = $res->NavNext(false)) {
         $this->modifyRowData($data);
         list($link, $name) = $this->addRow($data);
         $row = $this->list->AddRow($data[$this->pk()], $data, $link, $name);
         foreach ($this->fields as $code => $settings) {
             $this->addRowCell($row, $code, $data);
         }
         $actions = $this->addRowActions($data);
         $row->AddActions($actions);
     }
     $this->addFooter($res);
     $this->list->AddFooter($this->footer);
     $this->list->AddGroupActionTable($this->groupActionsList, $this->groupActionsParams);
     $this->list->AddAdminContextMenu($this->contextMenu);
     $this->list->BeginPrologContent();
     echo $this->prologHtml;
     $this->list->EndPrologContent();
     $this->list->BeginEpilogContent();
     echo $this->epilogHtml;
     $this->list->EndEpilogContent();
     $this->list->CheckListMode();
 }