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

 

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

 

Share

Останні пости

Авраам Лінкольн

Ми не допоможемо людям, роблячи за них те, що вони могли б зробити самі Авраам… Читати далі

15/03/2024

Як зберігати каву, щоб вона не втрачала смаку і аромату

Смак приготованого напою залежить не тільки від сорту кави, способу та ступеня прожарювання, помелу зерен,… Читати далі

11/03/2024

Габрієль Гарсія Маркес

Вік — це не те, скільки тобі років, а те, — як ти їх відчуваєш… Читати далі

10/03/2024

Короткий опис ліцензій з відкритим вихідним кодом

Якщо ви створюєте програмне забезпечення, яким хочете поділитися, або використовуєте програмний продукт, який хочете модифікувати,… Читати далі

09/03/2024

Ніл Ґейман

Люди думають, що будуть щасливі, якщо переїдуть в інше місце, а потім виявляється: куди б… Читати далі

20/02/2024

Уроки JavaScript — як почати працювати з об’єктами

Об’єкти є однією з найважливіших і найпотужніших функцій JavaScript, і в багатьох вбудованих функціях об’єкти… Читати далі

17/02/2024