Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 18.04.2024)
456960
осіб
347
літаків
325
гелікоптерів
7196
танків
13835
ББМ
11637
артилерія
760
ППО
1046
РСЗВ
15618
машин
26
кораблі і катери
Контрольні нотатки для сертифікаційного екзамену Мадженто-розробника – ч.6
Опубліковано Оновлено: 09.02.2024

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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *