Контрольные заметки для сертификационного экзамена Мадженто-разработчика – ч.6
Adminhtml – доля в экзамене: 7%.
Конфигурация
Области конфигурации, которые загружаются для панели администрирования:
<menu>
<acl>
<admin>
<adminhtml>
Контроллер Adminhtml
Контроллер adminhtml расширяет Mage_Adminhtml_Controller_Action
. В отличие от контроллеров frontend
, которые расширяют Mage_Core_Controller_Front_Action
.
Его экшен (action
) проверяет, разрешено ли пользователю получить доступ к запрашиваемой странице и проверяет формы и секретные ключи перед отправкой.
Маршрутизация
В Mage_Core_Controller_Varien_Front::dispatch()
Magento осматривает каждый из маршрутизаторов и проверяет запрашиваемый путь, чтобы увидеть, зарегистрировано ли какие-либо модули относительно этого имени (frontName
). Также как и модуль, указанный в своем контроллере (определенном в config.xml
), который расширяет класс контроллера (admin
или front
), и который определен в каждой из областей.
Чтобы воспользоваться маршрутом /admin
, нужно будет переопределить Mage_Adminhtml
или определить свое имя (frontName
):
<admin> <routers> <cloudiq> <use>admin</use> <args> <frontName>your_frontname</frontName> <module>Your_Module</module> </args> </cloudiq> </routers> </admin> <admin> <routers> <adminhtml> <args> <modules> <your_module before="Mage_Adminhtml">Your_Module</your_module> </modules> </args> </adminhtml> </routers> </admin>
Аутентификация
Наблюдатель Mage_Admin_Model_Observer
прослушивает события predispatch
в экшене admin
контроллера. Он имеет логику, которая отслеживает, вошел ли пользователь в систему. Если такого пользователя не существует, но в запросе введено данные о регистрации, он регистрирует клиента. В противном случае клиент перенаправляется на страницу входа. В конце он обновляет кэш ACL.
Блоки Adminhtml
Большинство adminhtml блоков расширяют Mage_Adminhtml_Block_Template
.
Конфигурация Adminhtml
Роль конфигурации adminhtml
заключается в том, чтобы обеспечить механизм, который позволяет пользователям устанавливать параметры конфигурации для магазинов в пределах панели администратора.
Mage_Admin_Model_Config
использует adminhtml.xml для конкретной конфигурации панели администратора, например, для пунктов меню.
Mage_Adminhtml_Model_Config
использует system.xml, чтобы обеспечить пользовательский интерфейс для настройки системы.
Управление кэшем
Различные типы кэша относятся к различным составным частям кэша. Кэш может ассоциироваться с определенным типом, который позволяет очищать только составные части кэша.
- Flush Magento Cache (Очистка кэша Мадженто)
- Это удаляет только записи кэша, которые управляются самим Magento (например, теги
MAGE
иCONFIG
) Mage::app()->cleanCache();
- Это удаляет только записи кэша, которые управляются самим Magento (например, теги
- Flush Cache Storage (Очистка хранилища кэша)
- Это очищает весь кеш и может повлиять на другие приложения, которые используют это хранилище кэша (все теги)
Mage::app()->getCacheInstance()->flush();
Блоки Adminhtml
Стандартная форма внутри админпанели использует Mage_Adminhtml_Block_Widget_Form
и шаблон app/design/adminhtml/default/default/template/widget/form.phtml
.
Роль контейнера формы (app/design/adminhtml/default/default/template/widget/form/container.html
) заключается в том, что он выступает в роли обертки вокруг формы. На странице формы adminhtml есть несколько вещей, которые не контролируются самой формой, например, кнопка с URL для сохранения, заголовок страницы и кнопка «Назад».
Объекты элемента формы представляют собой различные типы полей форм, которые вы можете использовать, и содержат свою конкретную логику. Полный список находится в Varien_Data_Form_Element
.
Поля формы добавляются в набор полей, которые представляют собой только соответствующую коллекцию полей. Наборы полей, в свою очередь, добавляются к формам.
Вот пример добавления формы поля в набор полей:
$fieldset->addField('module[enabled]', 'select', array( 'label' => $this->_helper->__('Enable?'), 'title' => $this->_helper->__('Enable?'), 'name' => 'module[enabled]', 'value' => ($this->_input_data) ? $this->_input_data->getData("enabled") : $this->_config_model->getEnabled(), 'values' => Mage::getSingleton('adminhtml/system_config_source_yesno')->toOptionArray() ));
Второй аргумент addField
отображает тип элемента, например, select
и Varien_Data_Form_Element
, с помощью:
$fieldset->addType('colour_picker', '{namespace}_{module_name}_Varien_data_Form_Element_ColourPicker');
Пользовательские элементы
Чтобы настроить способ визуализации элемента, вы можете вызвать $element->setRenderer()
здесь и указать собственный класс для его рендеринга.
Кроме того, вы можете добавить пользовательский тип поля, который расширяет элемент, а затем перезаписывает getHtml()
, getDefaultHtml()
или getElementHtml()
.
Сетки
Сетки выводят данные коллекции в таблице с возможностью фильтрации и сортировки.
Сетки обычно расширяют класс Mage_Adminhtml_Block_Widget_Grid
и по умолчанию используют шаблон app/design/adminhtml/default/default/template/widget/grid.phtml
.
Фильтры
Когда столбец добавляется в сетку, может быть добавлен фильтр. Например, для чисел можно использовать adminhtml/widget_grid_column_filter_range
.
Для выполнения таких операций, как фильтрация, сортировка и пагинация, коллекция присутствует в сетке с помощью setCollection
. Например, при фильтрации используется метод addFieldToFilter()
для определения параметров фильтрации коллекции.
Столбцы сетки обычно расширяют Mage_Adminhtml_Block_Widget_Grid_Column
, который содержит данные об источнике данных столбца и его представлении (тип данных, рендеринг, стилизация).
Обработчики столбцов управляют логикой для отрисовки столбца на странице. Например, колонка select
рендерит свою логику для отрисовки заголовка столбца в поле выбора.
Сетка JavaScript
JavaScript, используемый сеткой, можно настроить, установив значения в сетке, например, setJsObjectName()
или перезаписать, изменив шаблон сетки.
<script type="text/javascript"> //<![CDATA[ <?php echo $this->getJsObjectName() ?> = new varienGrid('<?php echo $this->getId() ?>', '<?php echo $this->getGridUrl() ?>', '<?php echo $this->getVarNamePage() ?>', '<?php echo $this->getVarNameSort() ?>', '<?php echo $this->getVarNameDir() ?>', '<?php echo $this->getVarNameFilter() ?>'); <?php echo $this->getJsObjectName() ?>.useAjax = '<?php echo $this->getUseAjax() ?>'; <?php if($this->getRowClickCallback()): ?> <?php echo $this->getJsObjectName() ?>.rowClickCallback = <?php echo $this->getRowClickCallback() ?>; <?php endif; ?> <?php if($this->getCheckboxCheckCallback()): ?> <?php echo $this->getJsObjectName() ?>.checkboxCheckCallback = <?php echo $this->getCheckboxCheckCallback() ?>; <?php endif; ?> <?php if($this->getRowInitCallback()): ?> <?php echo $this->getJsObjectName() ?>.initRowCallback = <?php echo $this->getRowInitCallback() ?>; <?php echo $this->getJsObjectName() ?>.initGridRows(); <?php endif; ?> <?php if($this->getMassactionBlock()->isAvailable()): ?> <?php echo $this->getMassactionBlock()->getJavaScript() ?> <?php endif; ?> <?php echo $this->getAdditionalJavaScript(); ?> //]]> </script>
Контейнеры для сеток
Контейнеры сеток работают так же, как и контейнеры форм, интегрируя сетку в админ страницу (настройка заголовков, кнопок, оберточного HTML).
Массовые действия позволяют выполнить действие для выбранных строк сетки. Они работают вызывая действие контроллера со всеми выбранными идентификаторами строк в параметре в виде массива.
Конфигурация системы
Пользовательский интерфейс конфигурации системы заполняется с использованием файлов system.xml
. Конфигурация структурирована в:
- Разделы (секции): Появляются как элементы меню слева, другие категории отдельно во «вкладках»
- Группы: Наборы параметров конфигурации со всеми группами раздела, отображаемыми на одной странице
- Поля: Индивидуальные варианты
Поля имеют настройки:
frontend_type
иfrontend_model
: Определяют способ визуализации поля и тип хранимых данных. Для создания настраиваемого шаблона реализуется методrender()
классаVarien_Data_Form_Element_Renderer_Interface
backend_model
: Определяет то, как поле отображается в бэкэндеsource_model
: Определяет параметры поля, например, для выбора. Параметры предоставляются методомtoOptionArray()
frontend_class
: Может использоваться для настройки CSS класса поля
Конфигурация анализируется классом Mage_Adminhtml_Model_Config
и отображается в области администратора блоком Mage_Adminhtml_Block_System_Config_Form
.
Когда конфигурация сохраняется, она размещается в таблице core_config_data
. Конфигурация может иметь несколько значений (строк), по одному для каждой области (например, по умолчанию, веб-сайт, вид магазина).
Чтобы получить значения конфигурации, можно использовать Mage::getStoreConfig()
. Он добавляет default/stores/default
к $config->getNode()
, поэтому он является оболочкой вокруг Mage::getConfig()->getNode()
.
Списки контроля доступа (ACL)
ACL управляет доступом пользователей к различным областям панели администрирования и настраивается с помощью файлов adminhtml.xml
. Ключевые слова здесь:
- Ресурсы: Отдельные разделы системы
- Роли: Коллекции ресурсов, доступные определенной группе пользователей
- Пользователи: Отдельные пользователи системы, которым назначены роли. В свою очередь, эти роли позволяют получить доступ к ресурсам
Чтобы добавить пункт меню:
<menu> <{top_menu}> <{sub_menu}> <{sub_sub_menu}> <title></title> <action></action> </{sub_sub_menu}> <{sub_menu}> <{top_menu}> </menu>
Элемент меню должен иметь соответствующий ресурс, и пользователь должен иметь доступ к этому ресурсу для рендеринга элемента.
Чтобы добавить ресурс:
<acl> <{resource}> <children> <{child}> <title></title> <sort_order></sort_order> <children></children> </{child}> </children> </{resource> </acl>
Роли администратора имеют доступ к специальному ресурсу <all>
, который предоставляет все разрешения. Ресурсы также могут быть созданы для разделов, например, чтобы конфигурация системы проверяла, что пользователи могут обращаться к каждому разделу конфигурации отдельно.
Ресурсы конфигурации добавляются в:
<acl> <{admin}> <children> <system> <children> <config> <children> <{section_name}> </{section_name}> </children> </config> </children> </system> </children> </{admin}>
Разрешения проверяются контроллерами, используя метод _isAllowed()
, который вызывается в admin preDispatch()
.
adminhtml.xml
анализируется с помощью Mage_Admin_Model_Config
. Конфигурация ACL управляется Mage_Admin_Model_Acl
и проверяется в большинстве контроллеров, используя следующее:
Mage::getSingleton('admin/session')->isAllowed();
Данные ACL хранятся в базе данных в таблицах admin_user
(пользователи), admin_role
(имена ролей), admin_rule
(разрешения).
Magento ACL является расширением Zend_ACL.
Расширения (Extensions)
Расширения устанавливаются как модули Magento. Учитываются стандартные требования модуля:
- Определение в
app/etc/modules
app/code/{pool}/{namespace}/{module}/etc/config.xml
Зависимости модулей указаны в XML-определении с тегом <depend>
.
Downloader можно использовать для загрузки пакетов расширений из Magento Connect и установки (извлечения) их.
Как описано в основных принципах, существует три пула кода:
- Ядро (core): Основные модули Magento (разработчики компании Magento)
- Сообщество (community): Релиз расширения (сторонние разработчики)
- Локальный (local): Локальные настройки
Перевод: SebWeo