/** * Выводит форму фильтрации списка */ public function createFilterForm() { $this->setContext(AdminListHelper::OP_CREATE_FILTER_FORM); print ' <form name="find_form" method="GET" action="' . static::getUrl($this->additionalUrlParams) . '?">'; $sectionHelper = $this->getHelperClass(AdminSectionEditHelper::className()); if ($sectionHelper) { $sectionsInterfaceSettings = static::getInterfaceSettings($sectionHelper::getViewName()); foreach ($this->arFilterOpts as $code => &$name) { if (!empty($this->tableColumnsMap[$code])) { $name = $sectionsInterfaceSettings['FIELDS'][$this->tableColumnsMap[$code]]['WIDGET']->getSettings('TITLE'); } } } $oFilter = new \CAdminFilter($this->getListTableID() . '_filter', $this->arFilterOpts); $oFilter->Begin(); foreach ($this->arFilterOpts as $code => $name) { $widget = $this->createWidgetForField($code); if ($widget->getSettings('TITLE') != $this->arFilterOpts[$code]) { $widget->setSetting('TITLE', $this->arFilterOpts[$code]); } $widget->showFilterHtml(); } $oFilter->Buttons(array("table_id" => $this->getListTableID(), "url" => static::getUrl($this->additionalUrlParams), "form" => "find_form")); $oFilter->End(); print '</form>'; }
/** * Возвращает класс хелпера нужного типа из всех зарегистрированных хелперов в модуле и находящихся * в том же неймспейсе что класс хелпера из которого вызван этот метод * * Под типом понимается ближайший родитель из модуля AdminHelper. * * Например если нам нужно получить ListHelper для формирования ссылки на список из EditHelper, * то это будет вглядеть так $listHelperClass = static::getHelperClass(AdminListHelper::getClass()) * * @param $class * * @return string|bool */ public function getHelperClass($class) { $interfaceSettings = self::$interfaceSettings[static::getModule()]; foreach ($interfaceSettings as $viewName => $settings) { $parentClasses = class_parents($settings['helper']); array_pop($parentClasses); // AdminBaseHelper $parentClass = array_pop($parentClasses); $thirdClass = array_pop($parentClasses); if (in_array($thirdClass, array(AdminSectionListHelper::className(), AdminSectionEditHelper::className()))) { $parentClass = $thirdClass; } if ($parentClass == $class && class_exists($settings['helper'])) { $helperClassParts = explode('\\', $settings['helper']); array_pop($helperClassParts); $helperNamespace = implode('\\', $helperClassParts); $сlassParts = explode('\\', get_called_class()); array_pop($сlassParts); $classNamespace = implode('\\', $сlassParts); if ($helperNamespace == $classNamespace) { return $settings['helper']; } } } return false; }
/** * Возвращает массив со списком действий при клике правой клавишей мыши на строке таблицы * По-умолчанию: * <ul> * <li> Редактировать элемент </li> * <li> Удалить элемент </li> * <li> Если это всплывающее окно - запустить кастомную JS-функцию. </li> * </ul> * * @param $data Данные текущей строки. * @param $section Признак списка для раздела. * * @return array * * @see CAdminListRow::AddActions * * @api */ protected function getRowActions($data, $section = false) { $actions = array(); if ($this->isPopup()) { $jsData = \CUtil::PhpToJSObject($data); $actions['select'] = array('ICON' => 'select', 'DEFAULT' => true, 'TEXT' => Loc::getMessage('DIGITALWAND_ADMIN_HELPER_LIST_SELECT'), "ACTION" => 'javascript:' . $this->popupClickFunctionName . '(' . $jsData . ')'); } else { $viewQueryString = 'module=' . static::getModule() . '&view=' . static::getViewName() . '&entity=' . static::getEntityCode(); $query = array_merge($this->additionalUrlParams, array($this->pk() => $data[$this->pk()])); if ($this->hasWriteRights()) { $sectionHelperClass = static::getHelperClass(AdminSectionEditHelper::className()); $editHelperClass = static::getHelperClass(AdminEditHelper::className()); $actions['edit'] = array('ICON' => 'edit', 'DEFAULT' => true, 'TEXT' => Loc::getMessage('DIGITALWAND_ADMIN_HELPER_LIST_EDIT'), 'ACTION' => $this->list->ActionRedirect($section ? $sectionHelperClass::getUrl($query) : $editHelperClass::getUrl($query))); } if ($this->hasDeleteRights()) { $actions['delete'] = array('ICON' => 'delete', 'TEXT' => Loc::getMessage("DIGITALWAND_ADMIN_HELPER_LIST_DELETE"), 'ACTION' => "if(confirm('" . Loc::getMessage('DIGITALWAND_ADMIN_HELPER_LIST_DELETE_CONFIRM') . "')) " . $this->list->ActionDoGroup($data[$this->pk()], $section ? "delete-section" : "delete", $viewQueryString)); } } return $actions; }