Категории: Magento - как сделать

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

Последние посты

Как выбрать идеальный ноутбук: Полный гайд

Выбор ноутбука может быть сложной задачей в мире, где рынок переполнен вариантами на любой вкус… Читать далее

22/04/2024

Томас Эдисон

Наша самая большая слабость заключается в том, что мы быстро сдаемся. Самый верный способ добиться… Читать далее

20/04/2024

Самые красивые и впечатляющие мосты со всего мира (ТОП-10)

Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился… Читать далее

19/04/2024

Соломон

Жизнь нас учит, что свою пару мы познаем, когда разводимся, своих братьев мы познаем, когда… Читать далее

18/04/2024

Чак Паланик

Кто может — тот делает. Кто не может — тот критикует Чак Паланик   Читать далее

17/04/2024

Ричард Бах

Ни одно желание не дается тебе отдельно от силы, позволяющей его осуществить. Хотя, возможно, для… Читать далее

16/04/2024