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, чтобы обеспечить пользовательский интерфейс для настройки системы.
Различные типы кэша относятся к различным составным частям кэша. Кэш может ассоциироваться с определенным типом, который позволяет очищать только составные части кэша.
MAGE
и CONFIG
)Mage::app()->cleanCache();
Mage::app()->getCacheInstance()->flush();
Стандартная форма внутри админпанели использует 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, используемый сеткой, можно настроить, установив значения в сетке, например, 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 управляет доступом пользователей к различным областям панели администрирования и настраивается с помощью файлов 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.
Расширения устанавливаются как модули Magento. Учитываются стандартные требования модуля:
app/etc/modules
app/code/{pool}/{namespace}/{module}/etc/config.xml
Зависимости модулей указаны в XML-определении с тегом <depend>
.
Downloader можно использовать для загрузки пакетов расширений из Magento Connect и установки (извлечения) их.
Как описано в основных принципах, существует три пула кода:
Перевод: SebWeo
В последние годы интерес к саунам в Киеве заметно вырос. Это связано не только с…
В современном ритме мегаполиса отдых стал неотъемлемой частью заботы о здоровье и эмоциональном состоянии. Особенно…
В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…
Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…
Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…
В 2025 году конкуренция в e-commerce стала жесткой как никогда. Клиенты выбирают не только по…