作者:James Zhu (fatindeed@hotmail.comenvelope )
创建日期:2018-08-31
例如,数据库中有一个的字段weight_c,值为70,期望输出70 kg,则仅需修改相关view文件即可。
列表页面:custom/modules/module_name/metadata/listviewdefs.php
Copy $ listViewDefs [$ module_name ] = array (
// ...
' WEIGHT_C ' => array (
' type ' => ' int ' ,
' default ' => true ,
' label ' => ' LBL_WEIGHT ' ,
' width ' => ' 5% ' ,
' customCode ' => ' {$WEIGHT_C} kg ' ,
),
// ...
); 详情页面:custom/modules/module_name/metadata/detailviewdefs.php
Copy $ viewdefs [$ module_name ] = array (
// ...
array (
' name ' => ' weight_c ' ,
' label ' => ' LBL_WEIGHT ' ,
' customCode ' => ' {$fields.weight_c.value} kg ' ,
),
// ...
); 子面板页面?不支持customCode 。
2. 自定义function字段
例如,数据库中有一个的字段born_c,值为1990-01-01,期望输出计算后的年龄28。
首先需要新建一个字段定义文件custom/Extension/modules/module_name/Ext/Vardefs/sugarfield_age_c.php,内容如下:
module_name_util可以随便放个地方,只要在module里require_once就可以了。
然后,运行 系统管理 > 修复 > 快速修复和重建 来重新生成字段定义缓存文件。
列表页面:无法直接使用自定义字段,需要通过 process_record 的 logic_hook 手动触发function后,才可在listviewdefs.php中使用。custom/modules/module_name/logic_hooks.php文件内容如下:
custom/modules/module_name/module_name_logic_hook.php文件内容如下:
custom/modules/module_name/metadata/listviewdefs.php文件内容如下:
详情页面:custom/modules/module_name/metadata/detailviewdefs.php
子面板页面:与列表页面类似,也需触发 process_record 的 logic_hook ,但是定义文件中无法使用related_fields ,且无法使用customCode ,实现方法如下:
custom/modules/module_name/metadata/subpanels/relation_name.php
3. 字段function属性
仍然是born_c字段,现在期望输出1990-01-01 (28),这种情况下有一个比较简单的方法。
直接修改born_c的字段定义文件custom/Extension/modules/module_name/Ext/Vardefs/sugarfield_born_c.php,加入如下配置:
show_dob_with_age方法实现如下:
列表页面、详情页面、子面板页面默认显示function处理后的结果。如支持customCode (列表页面、详情页面),则仍可自定义输出内容。
PS: 此方法会影响字段的正常编辑,显示虽然方便了,但是编辑不了了。
4. 自定义SugarField
以上两种方法都有局限性,有没有其它更好的方法呢?那就是自定义 SugarField 了。
我们新建一个类型为DateOfBirthWithAge的 SugarField ,需要创建以下3个文件:
custom/include/SugarFields/Fields/DateOfBirthWithAge/SugarFieldDateOfBirthWithAge.php文件内容如下:
custom/include/SugarFields/Fields/DateOfBirthWithAge/ListView.tpl文件内容如下:
custom/include/SugarFields/Fields/DateOfBirthWithAge/DetailView.tpl文件内容如下:
至此,SugarField 创建完成,接着我们需要在使用的module中进行配置。
show_dob_with_age方法仍可以直接写入module文件,再修改born_c的字段定义文件custom/Extension/modules/module_name/Ext/Vardefs/sugarfield_born_c.php,加入如下配置:
现在,不管是列表页面、详情页面、子面板页面,还是编辑页面,都可以正常显示。应该是一个比较完美的方案了。
介绍了以上4种方法,在实际开发过程中,还需根据不同需求,使用相应的方法。