介绍:Zurmo的很多功能都是通过配置来完成的。有全局配置(元数据),每个模块有独立的配置(元数据)。全局配置的一些功能体现在最上面一行的导航,最左边的导航行等,这些都是通用的部分。除此之外,还有一些其他的功能,这里就不一一列举了。模块独立配置是针对模块的内部配置。可以根据配置参数改变各个模块的风格和功能。接下来介绍一下全局配置。二:Zurmo读取数据顺序1:安装系统时的顺序:读取代码配置-->存入数据库-->缓存2:以后系统运行时的顺序:缓存-->数据库-->代码配置详解一点:安装Zurmo时,会从一些代码配置文件中读取配置,比如zurmo/app/protected/modules/zurmo/ZurmoModule.php文件,代码如下。公共静态函数getDefaultMetadata(){$metadata=array();$metadata['global']=array('configureMenuItems'=>array(array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','全局配置')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理全局配置')",'route'=>'/zurmo/default/configurationEdit','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','货币配置')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理货币配置')",'route'=>'/zurmo/currency/configurationList','right'=>self::RIGHT_ACCESS_CURRENCY_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('Core','Languages')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理活动语言')",'route'=>'/zurmo/language/configurationList','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','开发者工具')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','访问开发者工具')",'route'=>'/zurmo/development/','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','AuthenticationConfiguration')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','ManageAuthenticationConfiguration')",'route'=>'/zurmo/authentication/configurationEdit','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('类别'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','Plugins')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理插件和集成')",'route'=>'/zurmo/plugins/configurationEdit','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','用户界面配置')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理用户界面配置')",'route'=>'/zurmo/default/userInterfaceConfigurationEdit','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),array('category'=>ZurmoModule::ADMINISTRATION_CATEGORY_GENERAL,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','SystemConfiguration')",'descriptionLabel'=>"eval:Zurmo::t('ZurmoModule','管理系统配置')",'route'=>'/zurmo/default/systemConfigurationEdit','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),),'headerMenuItems'=>array(array('label'=>"eval:Zurmo::t('ZurmoModule','Administration')",'url'=>array('/configuration'),'right'=>self::RIGHT_ACCESS_ADMINISTRATION,'order'=>1,'mobile'=>false,),array('label'=>"eval:Zurmo::t('ZurmoModule','GetMore')",'url'=>'eval:ZurmoModule::resolveGetMoreUrl()','order'=>9,'mobile'=>true,),array('label'=>"eval:Zurmo::t('ZurmoModule','AboutZurmo')",'url'=>array('/zurmo/default/about'),'order'=>10,'mobile'=>true,),),'configureSubMenuItems'=>array(array('category'=>self::ADMINISTRATION_CATEGORY_AUTHENTICATION,'titleLabel'=>"eval:Zurmo::t('ZurmoModule','LDAP配置')",'描述Label'=>"eval:Zurmo::t('ZurmoModule','ManageLDAPAuthentication')",'route'=>'/zurmo/ldap/configurationEditLdap','right'=>self::RIGHT_ACCESS_GLOBAL_CONFIGURATION,),),'adminTabMenuItemsModuleOrdering'=>array('home','configuration','designer','import','groups','users','roles','workflows','contactWebForms'),'tabMenuItemsModuleOrdering'=>array('home','mashableInbox','accounts','leads','contacts','opportunities','marketing','projects','产品','报告',));返回元数据;之后,这些配置信息将存储在数据库中名为globalmetadata的表中。配置以序列化形式存储在序列化元数据字段中。我们可以选择一个classname值为ZurmoModule的序列化值反序列化看看。可以发现ZurmoModule的配置是其中的一部分,还有一部分是从其他地方读取的。然后它将存储在缓存中。PS:有时候可能会出现你在这里更改了配置,但是页面没有变化。原因是系统会先读取缓存。有时候缓存清空了,但是页面还是没有变化。那是因为数据库中的数据是后面读取的。如果删除了数据库中的相应数据,请重新刷新页面。可能会报错,因为此时你还没有将配置存入数据库。必须首先执行更新自定义数据操作。这个操作的本质是将配置存储到globalmetadata表中。刷新页面后,页面发生了变化。上面的注解是第二点之后系统运行时读取数据的顺序。三:清除缓存和更新自定义数据的具体步骤见我在CSDN上的文章。我也在博客上谈到了这两点的重要性。在很多情况下,操作与这两个步骤密切相关。四:getDefaultMetadata()方法metadata['global']数组中的一些配置参数:configureMenuItemsheaderMenuItemsconfigureSubMenuItemsadminTabMenuItemsModuleOrderingtabMenuItemsModuleOrderingheaderMenuItems参数对应页面:adminTabMenuItemsModuleOrdering参数对应页面:tabMenuItems位置及部分参数ModuleOrdering页面对应参数:Fill。如果我错了请纠正我!
