Beginner'sGuide-CreatingModulesCustomizingZurmo----以自定义Zurmo的官方动物园为例:链接:http://zurmo.org/wiki/customi...NewmoduleAllextensionsClasseswillbe在自己的模块中定义;在这个例子中,模块将被称为动物。文件目录结构如下:在modules文件夹下新建文件夹animals。PS:名字是不是复数无所谓,但是Zurmo自带的模块都是用的复数形式,所以最好统一一下。模块会有以下文件:PS:这是官方给的模块的基本文件结构,但是根据我自己的经验,作为最简单的模块,不需要那么多文件。具体文件目录可参考CSDN博客:http://blog.csdn.net/tyrannoaurus/article/details/73850397。下表是关于每个文件的作用:为了在Zurmo应用程序中集成和安装此模块,需要创建另外两个文件perInstanceConfig.php:ZurmoZoo项目的自定义配置。在protected/config/下为ZurmoZoo项目创建一个新的array('animals',),);//引用文件,所以文件夹的名称必须对应$instanceConfig['components']['custom']['class']='application.extensions.zurmozoo.components.ZurmoZooCustomManagement';$instanceConfig['import'][]="application.extensions.zurmozoo.*";$instanceConfig['import'][]="application.extensions.zurmozoo.components.*";$instanceConfig['import'][]="application.extensions.zurmozoo.utils.*";?>还有两个文件,新建zurmozoo.components.ZurmoZooCustomManagement和zurmozoo.utils.ZurmoZooInstallUtilZurmoZoo项目专用自定义管理ZurmoZooCustomManagement.phpextensions/下复制即可/***zurmozoo项目专用自定义管理。*/classZurmoZooCustomManagementextendsCustomManagement{/***(非PHPdoc)*@seeCustomManagement::runBeforeInstallationAutoBuildDatabase()*/publicfunctionrunBeforeInstallationAutoBuildDatabase(MessageLogger$messageLogger){ZurmoZooInstallUtil::resolveCustomMetadataAndLoad();}/***(非PHPdoc)*@seeCustomManagement::resolveIsCustomDataLoaded()*/publicfunctionresolveIsCustomDataLoaded(){ZurmoZooInstallUtil::resolveCustomMetadataAndLoad();}}ZurmoZooInstallUtil:ZurmoZoo自定义的帮助程序类。类ZurmoZooInstallUtil{publicstaticfunctionresolveCustomMetadataAndLoad(){$shouldSaveZurmoModuleMetadata=false;$metadata=ZurmoModule::getMetadata();if(!in_array('animals',$metadata['global']['tabMenuItemsModuleOrdering'])){//加入到旁边栏的配置中$metadata['global']['tabMenuItemsModuleOrdering'][]='动物';$shouldSaveZurmoModuleMetadata=true;}if($shouldSaveZurmoModuleMetadata){祖rmoModule::setMetadata($元数据);通用缓存::forgetAll();}//------------------------------------------------------------------//这段代码是官方的例子,作用是与Activity关联进行交互,但是如果我们不需要在我们的中使用Activity应用程序,我们不需要引用此代码。引用这段代码后,数据库中就会有记录,以后有些操作报错也不一定。$metadata=Activity::getMetadata();if(!in_array('Animal',$metadata['Activity']['activityItemsModelClassNames'])){$metadata['Activity']['activityItemsModelClassNames'][]='Animal';活动::设置元数据(元数据);通用缓存::forgetAll();}//--------------------------------------------------------------------//newYii::import时创建默认数据('application.extensions.zurmoinc.framework.data.*');Yii::import('application.modules.animals.data.*');$defaultDataMaker=newAnimalsDefaultDataMaker();$defaultDataMaker->make();}}添加一个基字段到你的类在本节中,我们将描述如何将一个新的整数、浮点或字符串类型的基字段添加到最近创建的类中,在这个例子中我们将添加一个新的基字段到Animal类Field--description首先要做的是在类中定义新字段。打开文件protected->modules->animals->models->Animal.php,添加字段描述定义如下。array('name','description',),//classCommonfield'relations'=>array('type'=>array(RedBeanModel::HAS_ONE,'OwnedCustomField',RedBeanModel::OWNED),),//与OwnedCustomField表的关系type'rules'=>array(array('name','required'),array('name','type','type'=>'string'),array('name','length','max'=>100),array('description','type','type'=>'string'),),//规则字段的类型,包括页面的规则和存入数据库的时候,都会转换为字段的类型'elements'=>array('description'=>'TextArea',),//html类型的thefield,'customFields'=>array('type'=>'AnimalType',),//关系对应的属性会存储在数据库中,'defaultSortAttribute'=>'name',//默认排序列表页面数据Method'noAudit'=>array('description'),//noAudit表示对该字段的操作不会记录到操作记录中);return$metadata;}…..?>现在我们需要把这个字段放到页面上打开protected->modules->animals->views->AnimalEditAndDetailsView.php中的文件,找到新建的字段如下图。只是部分代码classAnimalEditAndDetailsViewextendsSecuredEditAndDetailsView{publicstaticfunctiongetDefaultMetadata(){$metadata=array('global'=>array('toolbar'=>array('elements'=>array(array('type'=>'CancelLink','renderType'=>'Edit'),array('type'=>'SaveButton','renderType'=>'Edit'),array('type'=>'ListLink','renderType'=>'Details','label'=>"eval:Yii::t('Default','ReturntoList')"),array('type'=>'EditLink','renderType'=>'Details'),array('type'=>'AuditEventsModalListLink','renderType'=>'Details'),),),'derivedAttributeTypes'=>array('DateTimeCreatedUser','DateTimeModifiedUser',),'panelsDisplayType'=>FormLayout::PANELS_DISPLAY_TYPE_ALL,'panels'=>array(array('rows'=>array(array('cells'=>array(array('elements'=>array(array('attributeName'=>'name','type'=>'Text'),),),array('elements'=>array(array('attributeName'=>'type','type'=>'DropDown','addBlank'=>true),),),)),array('cells'=>array(array('detailViewOnly'=>false,'elements'=>array(array('attributeName'=>'整数','类型'=>'整数'),),),array('detailViewOnly'=>false,'elements'=>array(array('attributeName'=>'text','type'=>'Text'),),),)),array('单元格'=>array(array('detailViewOnly'=>false,'elements'=>array(array('attributeName'=>'radioPickList','type'=>'RadioDropDown','addBlank'=>true),),),array('detailViewOnly'=>false,'elements'=>array(array('attributeName'=>'pickList','type'=>'DropDown','addBlank'=>true),),),)),数组('细胞'=>数组(数组('detailViewOnly'=>true,'elements'=>array(array('attributeName'=>'null','type'=>'DateTimeCreatedUser'),),),array('detailViewOnly'=>true,'elements'=>array(array('attributeName'=>'null','type'=>'DateTimeModifiedUser'),),),)),),),),);返回元数据;}protectedfunctiongetNewModelTitleLabel(){returnYii::t('Default','CreateAnimalsModuleSingularLabel',LabelUtil::getTranslationParamsForAllModules());}}?>如您所见,我们添加了该字符段的位置array('cells'=>array(array('elements'=>array(array('attributeName'=>'description','type'=>'TextArea'),),),)),还有下面的链接:array('type'=>'AnimalDeleteLink','renderType'=>'Details'),这个不是必须的,但是如果需要,您可以在详细信息页面中删除该动物。要实现这个功能,必须在protected->modules->animals->elements->action下添加AnimalDeleteLinkActionElement.php文件,使用如下代码完成操作。从今天开始,Zurmo支持以下类型的字段:下面的源代码显示了如何将它们合并到您的代码中。models->Animals.php首先需要定义模型中的所有字段,官网的示例代码中都有。文档中的那些代码示例是旧版本zurmo的代码,新版本中的方法有些不同。以新版本代码为正。例如:models->Animals.php中的这段代码是旧版本的代码。它现在已被新代码取代。'labels'=>array('cust_checkbox'=>array('en'=>'CheckBox'),'cust_currency'=>array('en'=>'Currency'),'cust_date'=>array('en'=>'Date'),'cust_datetime'=>array('en'=>'DateTime'),'cust_decimal'=>array('en'=>'Decimal'),'cust_integer'=>array('en'=>'Integer'),'cust_picklist'=>array('en'=>'PickList'),'cust_phone'=>array('en'=>'Phone'),'cust_radiopicklist'=>array('en'=>'RadioPickList'),'cust_text'=>array('en'=>'Text'),'cust_textarea'=>array('en'=>'TextArea'),'cust_url'=>array('en'=>'URL'),),写完上面的代码,部分就完成了。具体代码在官网samplemodule中有,直接下载即可。链接:https://bitbucket.org/zurmo/z...如果页面效果不生效,记得清空缓存,更新元数据。
