1.Magento的配置系统

Magento的配置系统就像是Magento的心脏,支撑着Magento的运行。这套配置系统掌管着几乎所有“module/model/class/template/etc”。它把整个Magento系统抽象出来,用一个配置文件来描述。这里的“配置文件”并不是一个物理上存在的文件,而是Magento根据当前的系统状态动态生成的一段XML。大多数的PHP开发者并不习惯于这样抽象层,因为它增加的编程的复杂性。但是这样的抽象提供了无与伦比的灵活性,允许你覆盖几乎任何系统的默认行为。

首先,让我们写一个简单的扩展组件来看看这个所谓的“配置文件”长什么样。虽然我已经提供的现成的代码,但是还是建议你自己建立这个插件,把整个流程走一遍有助于你的理解。


1.1设置组件的目录结构
我们要创建一个Magento组件(注:在Magento里组件被叫做Module,也就是模块)。Magento的模块由php和xml文件组成,目的是扩展或者覆盖系统的行为,比如为订单增加数据模型,更改一个类的方法,或者增加一个全新的功能。Magento自带的那些功能也都是基于模块的,比如用户注册,商品展示,结账流程等等。总之,在Magento里一切皆模块。
大多数Magento的系统模块的结构和我们将要构建的组件的结构是一样的。

Magento的系统模块在以下目录:

app/code/core/Mage

每一个子目录都是一个单独的模块。这些模块是由Magento官方开发的。我们安装完Magento以后,所使用的功能就是来自这些模块。

我们自己创建的模块应该放在如下目录:

app/code/local/Packagename

“Packagename”应该是一个唯一的字符串,用来标识你的代码。通常人们使用公司名字作为Packagename,比如:

app/code/local/Infinity

目前我们公司的所有Magento项目,Packagename都必须使用我们的公司名“Infinity”。

我们创建以下目录结构:

app/code/local/Infinity/Configviewer/Block
app/code/local/Infinity/Configviewer/controllers
app/code/local/Infinity/Configviewer/etc
app/code/local/Infinity/Configviewer/Helper
app/code/local/Infinity/Configviewer/Model
app/code/local/Infinity/Configviewer/sql

并不是所有的组件都必须包含以上所有的目录,但是为了以后开发方便,我们还是在一开始就把目录创建好。接下来我们要创建两个文件。

一个是config.xml,放在etc目录下面:

app/code/local/Infinity/Configviewer/etc/config.xml

文件内容如下:

<config>
    <modules>
        <Infinity_Configviewer>
            <version>0.1.0</version>
        </Infinity_Configviewer>
    </modules>
 </config>

第二个文件需要在如下位置创建:

app/etc/modules/Infinity_Configviewer.xml

这个文件应该遵循如下命名规则“Packagename_Modulename.xml”,文件内容如下:

<config>
    <modules>
        <Infinity_Configviewer>
            <active>true</active>
            <codePool>local</codePool>
        </Infinity_Configviewer>
    </modules>
</config>

建立好这两个文件以后,你的模块的骨架就已经完成了。Magento已经知道你的模块存在,但是现在你的模块不会做任何事情。我们来确认一下Magento确实装载了你的模块:
1)清空Magento缓存
2)在后台管理界面,进入 System->Configuration->Advanced
3)展开“Disable Modules Output”
4)确认“Infinity_Configviewer”显示出来了

如果你看到“Infinity_Configviewer”,那么恭喜你,你已经成功创建了你第一个Magento模块!


1.2创建模块逻辑

我们之前创建的模块不会做任何事情,下面我们来为这个模块加入逻辑:
1. 检查“showConfig”查询字符串是否存在
2. 如果“showConfig”存在,那么检查“showConfigFormat”查询字符串是否存在
3. 如果“showConfigFormat”存在,那么输出指定格式的配置信息,否则输出默认格式的配置信息
4. 终止执行流程。

首先更改我们的config.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<config>    
    <modules>
        <Infinity_Configviewer>
            <version>0.1.0</version>
        </Infinity_Configviewer>
    </modules>
    <global>
        <events >
            <controller_front_init_routers> 
                <observers>   /*….观察….*/
                    <Infinity_configviewer_model_observer>
                        <type>singleton</type>                          
                        <class>Infinity_Configviewer_Model_Observer</class>
                        <method>checkForConfigRequest</method>
                    </Infinity_configviewer_model_observer>
                </observers>
            </controller_front_init_routers>
        </events>
    </global>
</config>

----------------------------------------
<events>
    <event_name>
        <observers>
            <observer_identifier>
                <class>module_name/observer</class>
                <method>function_name</method>
            </observer_identifier>
        </observers>
    </event_name>
</events>

然后创建如下文件:

Infinity/Configviewer/Model/Observer.php

输入以下内容:

<?php
class Infinity_Configviewer_Model_Observer {
    const FLAG_SHOW_CONFIG = 'showConfig';
    const FLAG_SHOW_CONFIG_FORMAT = 'showConfigFormat';
    private $request;
    public function checkForConfigRequest($observer) {
        $this->request = $observer->getEvent ()->getData ( 'front' )->getRequest ();
        if ($this->request->{self::FLAG_SHOW_CONFIG} === 'true') {
            $this->setHeader ();
            $this->outputConfig ();
        }
    }
    private function setHeader() {
        $format = isset ( $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} ) ? 
                                $this->request->{self::FLAG_SHOW_CONFIG_FORMAT} : 'xml';
        switch ($format) {
            case 'text' :
                header ( "Content-Type: text/plain" );
                break;
            default :
                header ( "Content-Type: text/xml" );
        }
    }
    private function outputConfig() {
        die ( Mage::app ()->getConfig ()->getNode ()->asXML () );
    }
}
?>

好了,代码编辑结束。清空你的Magento缓存,输入如下URL:

http://magento.example.com/?showConfig=true

【注: 根据文中的配置,不难看出任何指向Magento的URL加了“?showConfig=true”以后,都会输出同样的内容,正常的执行流程会被终止。】


1.3配置文件分析
打开上述URL,你应该看到一个巨大的XML文件。
这里写图片描述
这个文件描述了当前Magento系统的状态。它列出了所有的模块,数据模型,类,事件,监听器等等。举个例子,如果你搜索如下字符串:Configviewer_Model_Observer,你会发现刚刚你创建的那个类被列出来了。Magento会解析每个模块的config.xml,并把它们包含在这个全局配置中。


1.4配置文件的作用
到目前为止,我们所作的事情似乎没什么意义,但是这个配置文件却是理解Magento的关键因素。你创建的每一个模块都会被加到这个配置文件中,任何时候,你需要调用一个系统功能的时候,Magento都会通过这个配置文件来查询相应的模块和功能。举个简单的例子,如果你懂MVC的话,你应该和“helper class”之类概念的打过交道:

$helper_salesrule = new Mage_SalesRule_Helper();

Magento抽象了PHP的类声明方式。在Magento系统中,上面的代码等同于:

$helper_salesrule = Mage::helper('salesrule');

Magento总是通过配置文件来获得类名,这个逻辑看起来有些复杂,但这样做的优点也很明显,我们可以不需要更改Magento的代码就能更改Magento的核心功能。【注: 在这个例子中,我们可以通过修改配置文件用我们自己的SalesRule_Helper类来替换原来那个】这种高度抽象的编程方式在php中并不常见,但是它可以让你清晰的扩展或者替换系统的某一部分。

以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值