Контрольні нотатки для сертифікаційного екзамену Мадженто-розробника – ч.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
Останні пости
Як вибрати ідеальний ноутбук: Повний гайд
Вибір ноутбука може бути складним завданням у світі, де ринок переповнений варіантами на будь-який смак… Читати далі
Томас Едісон
Наш великий недолік в тому, що ми занадто швидко опускаємо руки. Найбільш діючий метод досягти… Читати далі
Найкрасивіші та найбільш вражаючі мости з усього світу (ТОП-10)
Міст — це щось більше, ніж просто споруда, яка поєднує два береги. Для того, щоб… Читати далі
Соломон
Життя нас вчить, що свою пару ми пізнаємо, коли розлучаємося, своїх братів ми пізнаємо, коли… Читати далі
Річард Бах
Жодне бажання не дається тобі окремо від сили, що дозволяє його здійснити. Хоча, можливо, для… Читати далі