今天,我们将讨论如何为Magento的管理区域创建和定义自定义程序包,主题,外观,布局和模板?
奇怪的是,我们拥有Magento作为其核心产品的一部分提供的前端控件,但是不确定Magento为什么没有为管理员或后端执行此控件。就个人而言,我们发现它确实很奇怪,但是没关系,这给了我们深入研究Magento代码的机会,这总是一件好事。
让我们继续逐步完成这项工作-
步骤1 –在您的本地文件夹下创建一个新模块,在本例中为\ app \ local \ Scommerce \ AdminTheme
步骤2 –使用以下代码在Scommerce_All.xml或Scommerce_AdminTheme.xml中的etc / modules目录中注册模块
<Scommerce_AdminTheme>
<active>true</active>
<codePool>local</codePool>
</Scommerce_AdminTheme>
步骤3 –使用以下代码在模块\ app \ local \ Scommerce \ AdminTheme \ etc \ config.xml的etc目录下创建config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Scommerce_AdminTheme>
<version>0.0.1</version>
</Scommerce_AdminTheme>
</modules>
<global>
<events>
<adminhtml_controller_action_predispatch_start>
<observers>
<Scommerce_AdminTheme_Observer>
<class>Scommerce_AdminTheme_Model_Observer</class>
<method>adminTheme</method>
</Scommerce_AdminTheme_Observer>
</observers>
</adminhtml_controller_action_predispatch_start>
</events>
</global>
<adminhtml>
<translate>
<modules>
<Scommerce_AdminTheme>
<files>
<default>Scommerce_AdminTheme.csv</default>
</files>
</Scommerce_AdminTheme>
</modules>
</translate>
<acl>
<resources>
<admin>
<children>
<system>
<children>
<config>
<children>
<Scommerce_admin_theme translate="title">
<title>Admin Theme</title>
</Scommerce_admin_theme>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</adminhtml>
<default>
<Scommerce_admin_theme>
<package>
<current_package>default</current_package>
</package>
<themes>
<default>default</default>
</themes>
</Scommerce_admin_theme>
</default>
</config>
在上述步骤中,需要注意的关键是adminhtml_controller_action_predispatch_start事件,当您登录到站点的管理面板时,我们将调用该事件来设置包,主题,布局,外观和模板。
步骤4 –使用以下代码在模块\ app \ local \ Scommerce \ AdminTheme \ etc \ config.xml的etc目录下创建system.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<tabs>
<scommerce translate="label">
<label>Scommerce Configuration</label>
<sort_order>10</sort_order>
</scommerce>
</tabs>
<sections>
<scommerce_admin_theme translate="label">
<label>Admin Design</label>
<tab>scommerce</tab>
<frontend_type>text</frontend_type>
<sort_order>300</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<groups>
<package translate="label">
<label>Package</label>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<current_package translate="label">
<label>Current Package Name</label>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</current_package>
</fields>
</package>
<themes translate="label">
<label>Themes</label>
<frontend_type>text</frontend_type>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<template translate="label">
<label>Templates</label>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</template>
<skin translate="label">
<label>Skin (Images / CSS)</label>
<frontend_type>text</frontend_type>
<sort_order>20</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</skin>
<layout translate="label">
<label>Layout</label>
<frontend_type>text</frontend_type>
<sort_order>30</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</layout>
<default translate="label">
<label>Default</label>
<frontend_type>text</frontend_type>
<sort_order>40</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</default>
</fields>
</themes>
</groups>
</scommerce_admin_theme>
</sections>
</config>
在上述步骤中,我们将创建新的标签(“电子商务配置”),并创建系统配置,以便从管理面板定义包装,主题,外观,布局和模板。
步骤5 –这是最后一步,也是最重要的一步。在这里,我们将在模块app \ code \ local \ Scommerce \ AdminTheme \ Model \ Observer.php的Model目录下创建观察者类。
当您登录到网站的管理区域时,此类会为管理面板设置程序包,主题,外观,布局和模板。
class Scommerce_AdminTheme_Model_Observer
{
protected $_currentArea = "adminhtml";
protected $_packagename = "default";
protected $_theme = "default";
const CURRENT_PACKAGE = "Scommerce_admin_theme/package/current_package";
const CURRENT_THEME = "Scommerce_admin_theme/themes";
public function adminTheme()
{
if (Mage::getStoreConfig(self::CURRENT_PACKAGE)){
$this->_packagename=Mage::getStoreConfig(self::CURRENT_PACKAGE);
}
if (Mage::getStoreConfig(self::CURRENT_THEME."/default")){
$this->_theme=Mage::getStoreConfig(self::CURRENT_THEME."/default");
}
elseif(Mage::getStoreConfig(self::CURRENT_PACKAGE)){
$this->_theme=Mage::getStoreConfig(self::CURRENT_PACKAGE);
}
Mage::getDesign()
->setArea($this->_currentArea)
->setPackageName((string)$this->_packagename)
->setTheme((string)$this->_theme);
foreach (array('layout', 'template', 'skin') as $type) {
if ($value = Mage::getStoreConfig(self::CURRENT_THEME."/".$type)) {
Mage::getDesign()->setTheme($type, $value);
}
}
}
}
正如您已经注意到的那样,Mage :: getDesign()是使用setArea函数设置前端和adminhtml主题的主要函数。