eZ Publish装置文件装载顺序
Jerry Wang | 一月 25, 2011如果你还不了解Ez Publish的配置相关的概念,请先阅读技术手册 .
在这篇文章里,我们将学习Ez Publish配置文件的装载顺序(这里假定你已经了解配置文件,并在实际的项目里使用过它们).
那么,Ez Publish是以什么样的顺序读入配置文件的呢?
手册上说到,当我们访问站点的一个siteaccess, Ez Publish将会使用以下的顺序读入配置文件:
0 系统默认配置 – /settings/*.ini?
1 当前活动extension下siteaccesses的 – /extension/my_extension/settings/siteaccess/my_site/*.ini.append.php
2 Siteaccesses – /settings/siteaccess/my_site/*.ini.append.php?
3 当前活动extension的 – /extension/my_extension/settings/*.ini[.append.php]?
4 全局配置文件 – /settings/override/*.ini.append.php
具体地说, Ez Publish首先读入默认的配置文件, 接着读入my_site/*.ini.append.php. 再由访问规则决定当前所使用的siteaccess. 系统知道当前的siteaccess后,就去读extensions 所提供的针对当前siteaccess所有的配置. 转而读取extensions下的配置文件. 当然,全局的配置是最后才读取的.
但是,如果有多个extensions同时针对一项配置进行设置,那么到底使用哪个呢?这就涉及到配置文件在extensions间的装载顺序了, 例如:
`– extension
|– ini_1
| `– settings
| `– test.ini.append.php
`– ini_2
`– settings
`– test.ini.append.php
Ini_1 这个extension的test.ini.append.php内容是:
[IniOrderTest]
CurrrentActiveName=ini_1
你可能猜到了, ini_2中 test.ini.append.php 的内容:
[IniOrderTest]
CurrrentActiveName=ini_2
那么,当我们读入’IniOrderTest’这个块下的’CurrentActiveName’的值的时候, 我们会得到哪个值呢? 答案是: 这个取决定这二个extensions的载入顺序:
对于Ez 4.3 之前的版本, 载入顺序定义在’ExtensionSettings’块的’ActiveExtensions[]‘ 里面, 例如:
[ExtensionSettings]
ActiveExtensions[]
ActiveExtensions[]=ini_1
ActiveExtensions[]=ini_2
那么’IniOrderTest’块下’CurrentActiveName’的值将会是’ini_1′, 这是因为Ez Publish使用’前插入法’方式激活extensions. 系统首先激活’ini_1′这个extension,然后激活’ini_2′这个extension,并把它插入到’ini_1′之前. 所以, 当读取值的时候,先读’ini_2′的值,再读’ini_1′的里的值,从而导致ini_1的值覆盖ini_2的值.
不过这种情况从Ez 4.4改变了. 这个版本引入了一个全新概念’拓扑排序’. 你可以先看看ezOE这个extension下的’extension.xml’文件,其中定义了ozOE要用到extension是’ezjscore’.
让我们来看看 ‘extension.xml’ 是怎样影响配置的.
我们可以在ini_2这个extension里定义如下的赖关系:
<dependencies>
<uses>
<extension name=”ini_1″ />
</uses>
</dependencies>
注: 关键词’extends’定义’前向’关系,’required’和’use’定义’后向’关系.上面的例子表明,’ini_2′将会使用’ini_1′这个extension.所以’ini_1′应当先激活,然后就是ini_2,它们的关系可以表示为:
[ExtensionSettings]
ActiveExtensions[]
ActiveExtensions[]=ini_1
ActiveExtensions[]=ini_2
由前面所提到的, 配置系统会把ini_2插入到ini_1之前,ini_1的配置值会覆盖ini_2的.所以当我们读’CurrentActiveName’的值的时候,会得到’ini_1′.
总结, Ez Publish 4.4引入了’拓扑排序’, 增强了配置系统的灵活性.还有一点很重要,那就是extensions的载入顺序和配置文件的读入顺序是相反的.







最近评论