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

 

 

 

Джерело: http://magecert.com/adminhtml.html

Переклад українською: SebWeo