K4:Добавление секций в дереве
From In-Portal Developers Guide
(→Необязательные опции: дополнение) |
m (1 версия) |
Revision as of 16:12, 28 February 2009
| ||
---|---|---|
Статьи в этой категории | ||
|
Дерево, находящееся в административной консоли в левом frame, используется для навигации между её секциями. Все секции в дерево добавлены используя опцию Sections
в том или ином unit config. Уже добавленные секции можно изменять через опцию SectionAdjustments
, находящуюся в unit config с большим приоритетом, чем у того unit config, в котором секция описана. Ниже приведён пример массива, при помощи которого можно добавить новую секцию:
'custom:section_name' => Array ( 'parent' => 'custom:parent_section_name', 'icon' => 'custom:icon_name', 'label' => 'la_title_SectionName', 'url' => Array('t' => 'custom/path/to/template', 'pass' => 'm'), 'permissions' => Array('view', 'add', 'edit', 'delete'), 'priority' => 1, 'type' => stTREE, ),
Contents |
Обязательные опции
название опции | описание опции |
---|---|
parent (string) | Название секции в дереве, в которую будет добавлена эта секция. |
icon (string) | Часть названия пиктограммы секции, которая будет использоваться при её отображении в дереве и над grid (custom - это название модуля). Формат значения: "<module_name>:<icon_name> " . Сама пиктограмма будет находиться в директории admin_templates/img/icons от указанного модуля. Таковым будет полное имя файла с пиктограммой:
|
label (string) | Фраза, перевод которой будет показываться в дереве (должна начинаться с "la_title_"). |
url (array) | Параметры для метода kApplication::HREF , который строит ссылку на секцию в дереве. Элемент массива с ключём "t " указывает на шаблон, который будет показан при выборе секции. Остальные элементы массива попадают в массив $params метода kApplication::HREF . Более подробно об их обработке написано в статье о переменной окружения.
|
permissions (array) | Список названий типов доступа, которые могут применяться к этой секции. Есть четыре стандартных типа доступа:
Если требуется добавить новый тип доступа, то его название должно начинаться с " |
priority (float) | Позиция секции в дереве (только относительно её родительской секции). Может быть дробной. Если определить несколько секций на одном уровне с одинаковым приоритетом, то показана будет только последняя из них. Следовательно у каждой секции должен быть отличный от других секций на её уровне приоритет, он же порядковый номер. |
Необязательные опции
название опции | описание опции |
---|---|
onclick (string) | Название javascript функции, которая будет выполнена при нажатии на эту секцию. От того, что эта функция вернёт будет зависеть то будет-ли выполнен переход по ссылке построенной из опции url .
|
container (boolean) | Указывает на то, что данная секция является только контейнером для других секций. В таком случае при нажатии на эту секция в дереве будет открыта первая секция, которая не является контейнером и является дочерней данной секции. Опция добавлена в Core v 4.2.1. |
show_mode (int)
| Позволяет регулировать видимость секции, возможные значения:
|
SectionPrefix (string) | Позволяет задать префикс, который будет использоваться для проверки прав доступа к секции. Если не задан, то будет использоваться тот префикс, в котором данная секция объявлена. Также можно задать одноимённую опцию в конфигурационном файле. В таком случае заданный префикс для проверки прав доступа будет относиться ко всем секциям определённым в данном конфигурационном файле. |
Исходный код требует реорганизации (refactoring ).Ошибка: значение ключа show_mode равное " false " в Core v 4.3.9 не прячет секцию, а изменяет шаблон в ней на "index ". Пока что рекомендуется использовать способ убирания секции, описанный ниже в статье. |
Изменение секций
Бывают ситуации, при которых требуется изменить некоторые из параметров в объявлении секции или просто её убрать. В случае, когда секция объявлена в таком unit config, который запрещено изменять (напр. под папкой "core
"), то следует воспользоваться одним из ниже приведённых подходов.
Ни в коем случае не следует переопределять секцию в другом unit config. Если это сделать, то тогда потеряется связка самой секции с тем unit config, где она была изначально объявлена. Это повлечёт за собой неправильную проверку прав доступа при работе с данными, показываемыми в этой секции. |
Использование события OnAfterConfigRead
Следует сделать after hook на событие OnAfterConfigRead того префикса, в unit config которого объявлена эта секция. Тело hook будет находиться в том обработчике событий, чей unit config хочет изменить определение секции. В теле hook уже можно свободно изменять требуемый unit config следующим образом:
/** * [HOOK] Changes unit config of prefix "shipping" * * @param kEvent $event */ function OnModifyShippingConfig(&$event) { $sections = $this->Application->getUnitOption($event->MasterEvent->Prefix, 'Sections'); $sections['in-commerce:shippings']['show_mode'] = smDEBUG; $this->Application->setUnitOption($event->MasterEvent->Prefix, 'Sections', $sections); }
Данный подход можно глобально применять для динамического изменения подчти любых данных в других unit config.
Использование опции SectionAdjustments
Другим и более предпочтительным способом является использование опции SectionAdjustments в unit config. При использовании данного способа можно массово изменять и убирать секции и при этом даже не знать где они были объявлены. Единственным условием является то, что unit config содержащий данную опцию должен обрабатываться после всех тех unit configs, в которых объявлены изменяемые секции.
Содержание данной опции также, как и опции Sections является массивом, в котором ключи - это названия секций в дереве. В качестве значения каждой изменяемой секции нужно указать массив её изменённых параметров или слово "remove
", в случае, когда секцию нужно убрать:
'SectionAdjustments' => Array ( 'in-portal:configure_themes' => Array ( 'priority' => 10.036, 'show_mode' => smDEBUG, ), 'in-portal:tools' => 'remove', ),