Magento 从后端创建管理员自定义主题

今天,我们将讨论如何为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主题的主要函数。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论