Magento模块调用的过程和逻辑

Magento 2 的架构原则 - magento2开发教程 OOP体系结构与编程原理 面向对象编程(OOP)设计允许最大的灵活性和可扩展性的软件组件,允许您设计和实现高度定制的网站。OOP原则的优点包括纳入行业标准编程设计模式和严格的业务逻辑分离从演示。继承是重要的,也符合经典的面向对象的编程方法,Magento的平台提供的核心部件和基本功能,可以继承的自定义组件的一个特定的网站或应用程序。 强大的分层产品结构 这支持从业务逻辑分离视觉呈现。这种划分 阅读详情
1.在调用每个Magento模块(Modules)的时候,首先会返回Mage_Core_Model_Config 这个模型 它里面呈现了模块的一些常规配置,比如是否生效(enabled),版本(version)等等。Mage_Core_Model_Congif这个模型中有这么一个方法,来完成上面所说的功能。
    /**
     * Get module config node
     *
     * @param string $moduleName
     * @return Varien_Simplexml_Object
     */
    function getModuleConfig($moduleName='')
    {
        $modules = $this->getNode('modules');
        if (''===$moduleName) {
            return $modules;
        } else {
            return $modules->$moduleName;
        }
    }
这个方法有一个参数,就是模块名,返回的对象是Varien_Simplexml_Object2.调用每个模块的时候,它只是会建立一个基本的结构,并不会调用模块自身的配置情况。_loadDeclaredModules这个方法来帮助完成上面所说的需求。
 /**
     * Load declared modules configuration
     *
     * @param   null $mergeConfig depricated
     * @return  Mage_Core_Model_Config
     */
    protected function _loadDeclaredModules($mergeConfig = null)
    {
        $moduleFiles = $this->_getDeclaredModuleFiles();
        if (!$moduleFiles) {
            return ;
        }

        Varien_Profiler::start('config/load-modules-declaration');

        $unsortedConfig = new Mage_Core_Model_Config_Base();
        $unsortedConfig->loadString('');
        $fileConfig = new Mage_Core_Model_Config_Base();

        // load modules declarations
        foreach ($moduleFiles as $file) {
            $fileConfig->loadFile($file);
            $unsortedConfig->extend($fileConfig);
        }

        $moduleDepends = array();
        foreach ($unsortedConfig->getNode('modules')->children() as $moduleName => $moduleNode) {
            if (!$this->_isAllowedModule($moduleName)) {
                continue;
            }

            $depends = array();
            if ($moduleNode->depends) {
                foreach ($moduleNode->depends->children() as $depend) {
                    $depends[$depend->getName()] = true;
                }
            }
            $moduleDepends[$moduleName] = array(
                'module'    => $moduleName,
                'depends'   => $depends,
                'active'    => ('true' === (string)$moduleNode->active ? true : false),
            );
        }

        // check and sort module dependence
        $moduleDepends = $this->_sortModuleDepends($moduleDepends);

        // create sorted config
        $sortedConfig = new Mage_Core_Model_Config_Base();
        $sortedConfig->loadString('');

        foreach ($unsortedConfig->getNode()->children() as $nodeName => $node) {
            if ($nodeName != 'modules') {
                $sortedConfig->getNode()->appendChild($node);
            }
        }

        foreach ($moduleDepends as $moduleProp) {
            $node = $unsortedConfig->getNode('modules/'.$moduleProp['module']);
            $sortedConfig->getNode('modules')->appendChild($node);
        }

        $this->extend($sortedConfig);

        Varien_Profiler::stop('config/load-modules-declaration');
        return $this;
    }
从foreach ($moduleDepends as $moduleProp) 开始的这段代码可以看出,程序是对app\etc\modules这段代码做xml的解析3.loadBase()这个方法会对系统的配置文件进行加载和解析,比如config.xml和local.xml
    /**
     * Load base system configuration (config.xml and local.xml files)
     *
     * @return Mage_Core_Model_Config
     */
    public function loadBase()
    {
        $etcDir = $this->getOptions()->getEtcDir();
        $files = glob($etcDir.DS.'*.xml');
        $this->loadFile(current($files));
        while ($file = next($files)) {
            $merge = clone $this->_prototype;
            $merge->loadFile($file);
            $this->extend($merge);
        }
        if (in_array($etcDir.DS.'local.xml', $files)) {
            $this->_isLocalConfigLoaded = true;
        }
        return $this;
    }
4.此后加载模块自身的配置由loadModulesConfiguration这个function来完成
    /**
     * Iterate all active modules "etc" folders and combine data from
     * specidied xml file name to one object
     *
     * @param   string $fileName
     * @param   null|Mage_Core_Model_Config_Base $mergeToObject
     * @return  Mage_Core_Model_Config_Base
     */
    public function loadModulesConfiguration($fileName, $mergeToObject = null, $mergeModel=null)
    {
        $disableLocalModules = !$this->_canUseLocalModules();

        if ($mergeToObject === null) {
            $mergeToObject = clone $this->_prototype;
            $mergeToObject->loadString('');
        }
        if ($mergeModel === null) {
            $mergeModel = clone $this->_prototype;
        }
        $modules = $this->getNode('modules')->children();
        foreach ($modules as $modName=>$module) {
            if ($module->is('active')) {
                if ($disableLocalModules && ('local' === (string)$module->codePool)) {
                    continue;
                }
                if (!is_array($fileName)) {
                    $fileName = array($fileName);
                }

                foreach ($fileName as $configFile) {
                    $configFile = $this->getModuleDir('etc', $modName).DS.$configFile;
                    if ($mergeModel->loadFile($configFile)) {
                        $mergeToObject->extend($mergeModel, true);
                    }
                }
            }
        }
        return $mergeToObject;
    }
5.最后的解析工作由loadFile来完成
    /**
     * Imports XML file
     *
     * @param string $filePath
     * @return boolean
     */
    public function loadFile($filePath)
    {
        if (!is_readable($filePath)) {
            //throw new Exception('Can not read xml file '.$filePath);
            return false;
        }

        $fileData = file_get_contents($filePath);
        $fileData = $this->processFileData($fileData);
        return $this->loadString($fileData, $this->_elementClass);
    }
The End!
工业金属表面缺陷检测:4种光学成像方案(明/暗/漫/背光)选型与实测对比 本文深入探讨工业金属表面缺陷检测中的4种光学成像方案(明/暗/漫/背光),详细解析其物理原理、适用场景及实测效果。通过对比不同照明方案在铝合金轮毂、不锈钢餐具等实际工业场景中的表现,提供科学的选型决策树,帮助提升缺陷检出率至99%以上,为计算机视觉在工业质检领域的应用提供实用指南。 阅读详情

相关推荐

土壤水动力学_前 言

Van Genuchten (V-G) 模型是土壤水分特征曲线中最常用的模型之一。它通过数学方程描述了土壤基质吸力与体积含水量之间的关系,被广泛应用于土壤水分运移、土壤盐渍化、边坡稳定性等研究领域。V-G模型是描述土壤水分特征曲线的重要工具,但它并不是完美的。在实际应用中,需要根据土壤类型、试验条件等因素选择合适的模型。土壤基质吸力是土壤水分学中的一个重要概念,它对土壤水分的保持、植物的生长以及土壤的工程性质都有重要影响。

weixin_44259522的博客 5327

Magento的配置对象与全局XML配置文件构建

注:后台搜索到两篇比较好的介绍这个主题的文章: http://alanstorm.com/magento_config_tutorial http://alanstorm.com/magento_config_declared_modules_tutorial 主要类是Mage_Core_Model_Config,先看它们的继承关系: 1 2 3

wangxuebo1988的专栏 771

强化学习-马尔可夫模型

前文提到了强化学习源自马尔可夫决策过程,本文从马尔可夫概念入手,讲解和马尔可夫有关的模型和概念。在马尔科夫决策过程中,我们有一个智能体,它在一个马尔科夫过程中进行决策,每次决策都会导致状态的转移和获得即时奖励。智能体的目标是通过选择动作来最大化未来奖励的期望值。通常马尔科夫决策过程是个五元组:SAPRγSAPRγS 表示状态集合,代表智能体可能处于的所有状态。A 表示动作集合,代表智能体可以采取的所有动作。

君子之学必日新,日新者日进也。不日新者必日退,未有不进而不退者 8062

改变magento的核心配置数据--core config data

<br />$inchooSwitch= newMage_Core_Model_Config();/**turns notice on*/$inchooSwitch->saveConfig('design/head/demonotice', "1", 'default', 0);/**turns notice off*/$inchooSwitch->saveConfig('design/head/demonotice', "0", 'default', 0);

Terry - 专注外贸B2C 1013

树莓派5安装ROS2小白指南避坑攻略

手把手教你如何在树莓派5上顺利安装ROS2,避开常见问题与陷阱,提升配置效率。针对树莓派5安装ros2过程中的依赖冲突、源配置错误等高频难题提供解决方案,适合新手快速上手。

weixin_35754962的博客 1005

Jasper Report使用JSON数据源创建报表

最近在做一个项目小功能,表单结案要生成PDF报表。 起初,想用HTML模板(art-template模板引擎)编写,利用浏览器的打印功能保存成pdf文件下载。但是HTML编写好的模板,页码、页眉、页脚设置有坑,表单内容中的表格较多,表格不能设置跨页,导致跨页的表格内容与页眉重叠,没能解决这个问题。 于是,转战研究Jasper report生成报表,用更加专业的报表生成工具来做。刚开始,也是跌跌撞撞,遇到了很多问题,因为觉得没有退路了,必须要用这个搞出来,所以就硬着头皮去找各种资料。 主要使用的json

xiaogege2012的专栏 3319

Magento基础知识,请求流程,标准和最佳实践

Nowadays, companies are migrating their businesses online more and more. They’ve chosen to direct their attention to online communication in order to stay closer to their potential buyers, to make use...

culi4814的博客 564

概率论—期末复习速成笔记(自用)

概率论期末复习

a200327的博客 2万+

2010-1-3------mage_core_model_config------------construct过程----------------个人分析

<br /><br />1<br />/ Core configuration class<br />mage_core_model_config<br /> <br />变量:<br />1.1<br />const CACHE_TAG         = 'CONFIG';<br />1.2<br /> /**<br />     * Flag which allow use cache logic<br />     *<br />     * @var bool<br />     */<br />

Terry - 专注外贸B2C 719

Python调用Google Trends官方数据接口实战指南

Google Trends作为全球最权威的搜索热度分析工具,其数据本质是公开、结构化、可编程访问的时序指标,而非需爬取的网页内容。其底层基于标准HTTP协议与JSON API交互,核心原理在于复现用户浏览器行为——通过/explore接口获取token,再凭token请求/widgetdata/multiline等端点获取归一化(0-100)时间序列数据。该技术路径规避了Selenium渲染依赖与非官方库的脆弱性,具备高稳定性、易调试、可监控等工程优势,广泛应用于竞品监测、内容选题验证、地域营销策略制定等业

weixin_29789925的博客 419

OpenCV安装配置教程VS2022(超级顺利)

博主最开始没打算写这篇博客,只是想简单的在网上找一下最新版的OpenCV的安装配置教程,适用于VS2022的,但是我搜了一早上,也没搜到一个能让我成功安装配置的,看了很多很多文章,根本就没有几篇有用的。所以没办法了,只能自己研究了,于是就整理了这篇博客,希望能帮到和我一样的人,这就是博主一直信奉的利他精神!

weixin_47367099的博客 5万+

Mage.php里面的变量(只有一个不是私有静态变量)

<br /><br /> <br />APP/MAGE.PHP<br /> <br />public static $headersSentThrowsException   = true;<br />其余的都是static private类型。<br /> <br />CLASS mage{<br /> <br />下面是mage里面的static  private变量,可以通过,譬如:MAGE::<br /> /**<br />     * Registry collection<br />     *

Terry - 专注外贸B2C 952

实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据

实战六十四:基于机器学习朴素贝叶斯的豆瓣Top250影评的情感分析与预测 附完整源码和数据

1563

Magento模块 -- Magento模块学习教程

Magento模块 -- Magento模块学习教程转载请注明出处(http://blog.youkuaiyun.com/xinhaozheng) Magento模块 模块(module)是Magento的核心。站点上的任何一个动作(action),无论是在前台和还是在后台的每一个操作都是通过模块来实现的。模块是可以视为一个容

magento网站建设,magento模板开发,magento支付模块 4425

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

magento创建模块

1. 禁用magento缓存 Admin → System → Cache Management → select all cache types 禁用它们。 2. 设置为开发者模式 php bin/magento deploy:mode:set developer 3. 模块主要文件夹在/app/code。 a 首先需要确定命名空间和模块名称。 即需要创建如下文件夹 /app/code/命名...

weixin_45627802的博客 431

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Magento模块解析

Magento 模块 模块( module )是 Magento 的核心。站点上的任何一个动作( action ),无论是在前台和还是在后台的每一个操作都是通过模块来实现的。模块是可以视为一个容器,它可包含下面这几项:设置 (settings) ,数据库模式 (database schema) ,呈现对象 (rendering object) ,辅助工具类 (utility h...

weixin_30267697的博客 158

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

涵盖Magento模块开发的步骤

magento 模块化开发Magento connect. Modules are an integral part of Magento. These nifty little tools play an important role in solving a variety of tasks within the Magento platform with minimal efforts. C...

cuke3186的博客 396

Magento 2 Sentry 模块使用教程

Magento 2 Sentry 模块使用教程 1. 项目的目录结构及介绍 Magento 2 Sentry 模块的目录结构如下: magento2-sentry/ ├── Controller/ │ └── Adminhtml/ │ └── TestController/ ├── Helper/ ├── Model/ ├── Plugin/ ├── Test/ │ └── U...

gitblog_01076的博客 904

Magento2创建一个自定义模块

在magento2中创建一个简单的helloworld自定义模块显示到前端页面

weixin_43169845的博客 954

Magento模块介绍

Magento模块介绍 magento的module(模块)Magento模块结构,是Mgento的核心组成部分,Magento的每一个请求都要执行这里面的东西,app/code/core/Mage下面放的是magento的核心代码,magento的模块都在这里面,我们自己写的一般放在app/code/core/community或者app/code/core/l...

weixin_30349597的博客 158

magento模块的config.xml

magento每个模块都存在etc文件夹,这是必须的文件夹,里面至少存在一个config.xml的配置文件,这个文件的配置是否正确,直接给予模块是否能正确运行,起关键性作用。Magento总是通过配置文件来获得类名,这个逻辑看起来有些复杂,但这样做的优点也很明显,我们可以不需要更改 Magento的代码就能更改Magento的核心功能。 config.xml配置文件总以做为根标签。里面包含着各个

小迷童 761

Magento开发文档(一):Magento入门

开始之前,首先声明下,Magento开发者手册由Alan Storm发表在Magento官方网站上。总共分八个部分,由浅入深的介绍了Magento的MVC架构及Magento中使用的比较特殊的EAV模型。 虽然英文文档读起来没有问题,但是真想看一遍能有一定深入的了解,还是中文看着比较舒服。并且在网上搜索了下,大部分都是Magento的模板开发手册以及没有纠错的原文翻译(因为版本问题,Magento官方网站上的一些例子已经无法正常运行),所以决定把这写文章翻译成中文,一来对于自己更深入的把握程序有好处,二来

u010603616的专栏 3300

Magento2 库存预订禁用模块教程

Magento2 库存预订禁用模块教程 项目介绍 AmpersandHQ/magento2-disable-stock-reservation 是一个 Magento 2 模块,旨在禁用 Magento 2.3.3 中引入的库存预订逻辑,该逻辑是作为多库存源(MSI)的一部分实现的。此模块解决了 MSI 实现过程中可能出现的问题,例如库存预订逻辑导致的库存管理问题。 项目快速启动 安装步骤 克...

gitblog_00327的博客 703

magento php 所需模块,Magento 典型的module模块结构介绍

一个典型的Magento 模块应该有如下的目录结构层次, 同时, 它还应符合MVC架构标准:app/code/local/Alanstormdotcom/Configviewer/Blockapp/code/local/Alanstormdotcom/Configviewer/controllersapp/code/local/Alanstormdotcom/Configviewer/etcapp...

weixin_35011928的博客 225

Magento 2 Sentry 日志模块使用教程

Magento 2 Sentry 日志模块使用教程 1. 项目目录结构及介绍 magento2-sentry/ ├── Controller/ │ └── Adminhtml/ │ └── TestController/ ├── Helper/ ├── Model/ ├── Plugin/ ├── Test/ │ └── Unit/ │ └── Plugin/ ├─...

gitblog_00070的博客 402
上一篇: 给Block输出的html设置缓存
下一篇: magento invalid backend model specified giftmessage entity attribute backend boolean config
ddjohn
博客等级 码龄17年 36粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值