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