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