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!
Fiori Elements 的 Adapting the UI: Analytical List Page 全解析与实战 摘要:本文详细介绍了如何通过SAP Fiori elements的UI Adaptation功能对Analytical List Page(ALP)进行细粒度适配。重点讲解了页头过滤区、图表区域、表格区域等关键组件的可配置属性,包括过滤区折叠/固定、图表类型限制、表格滚动阈值等实用功能。文章强调这些适配均可通过可视化工具完成,无需修改业务代码,并提供了典型场景的实践清单。适用于SAP Fiori elements for OData V2项目,建议配合SAP Fiori tools的Adaptation E 阅读详情

相关推荐

fastadmin云快充充电桩系统部署文档uniapp

多商户 嘎嘎快充V1.0部署文档 一、服务器环境: 服务器配置4核心8GB内存5M带宽以上配置 VX next1402 只支持linux环境 nginx1.22 php7.2 开启redis、fileinfo扩展,关闭禁用workerman gatewayworkerman需要的函数,如pcntl相关的函数 mysql5.7 supervisor redis 注意: 1.站点必须配置https、websocket配置wss 2.注意开放直连服务端口:2024,并添加到安全组 二、必

itholiday2014的博客 1629

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

Ansys Zemax实战:5步搞定衍射光学元件(DOE)设计,附赠超透镜(metalens)避坑指南

本文详细介绍了使用Ansys Zemax进行衍射光学元件(DOE)和超透镜(metalens)设计的5步实战流程。从基础光学系统搭建到相位面设计验证,再到制造准备与实测对比,全面解析了OpticStudio中的关键技巧和常见避坑指南,帮助工程师高效完成复杂光学元件设计。

orange的博客 618

改变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

带硬约束的物理信息神经网络(PINN with Hard Constraint)示例及代码

本文以一个案例介绍了带硬约束的物理信息神经网络的原理及实现步骤。

m0_72768523的博客 5356

使用GEOquery包下载原始数据

使用GEOquery包下载原始数据

m0_75172651的博客 1889

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

扩散模型中的UNET

一、为什么UNET模型可以用于去噪网络 二、扩散模型中的UNET是一个条件去噪网络,怎么实现的 三、UNET用于分割和用去去噪的区别

m0_37737957的博客 3816

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

【2022】人工智能☆✨

1. 朴素⻉叶斯⽅法是⼀种 ( ) ⽅法。A.机器学习的分类B.不确定性推理C.知识表示答案:A解析:朴素贝叶斯分类器是基于贝叶斯定理与特征条件独立假设的分类方法。它通过学习训练数据集来预测未知数据的类别标签,因此属于机器学习中的监督学习分类方法。选项B不确定性推理和选项C知识表示虽然与朴素贝叶斯方法有一定的关联,但它们并不是朴素贝叶斯方法的主要应用领域或定义特性。2. 关于启发式搜索描述正确的是 ( )。

super_mochi1 391

当几何失效时:3D激光SLAM退化场景的本质与应对策略

本文探讨了3D激光SLAM在退化场景(如长廊、隧道等)中的挑战与解决方案。文章从数学角度分析了退化原因,指出信息矩阵秩亏导致某些方向约束缺失。主流算法采用不同策略应对:LeGO-LOAM利用地面约束与解耦优化;LIO-SAM/LVI-SAM通过多传感器融合补偿;FAST-LIO系列依赖IMU短期积分。新兴的RID-LIO方案创新性地利用激光强度信息增强约束,实验显示精度提升63.59%。研究表明,针对不同退化方向需要采用特异性补偿策略,而挖掘现有传感器的潜在信息维度是提升鲁棒性的有效途径。

Studying…… 619

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

116、影像质量主观评价方法论:标准场景与专家判读

本文探讨了影像质量主观评价的方法论,强调标准场景构建和专家判读体系的重要性。作者基于15年行业经验指出,仅靠客观指标无法保证观感质量,提出四类标准场景(灰阶、肤色、纹理、动态)的构建原则和四种专家判读维度(通透性、干净度、自然感、流程化)。文章揭示了主观评价中的常见误区,包括光源单一性、个人判读偏差、显示设备影响等,并建议建立多专家交叉验证机制和主观评价数据库。最后强调主观评价是可标准化的专业技术,需要将人眼感知转化为可追溯的技术参数。

sundong_81的博客 39

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

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

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Magento模块解析

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

weixin_30267697的博客 158

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

涵盖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、付费专栏及课程。

余额充值