Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 22.04.2024)
460260
солдат
348
самолетов
325
вертолетов
7236
танков
13904
ББМ
11736
артиллерия
768
ПВО
1046
РСЗО
15812
машин
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

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *