Контрольные заметки для сертификационного экзамена Мадженто-разработчика – ч.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_Interfacebackend_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