SugarCRM6.5中字段定制显示方法研究

作者:James Zhu (fatindeed@hotmail.com)

创建日期:2018-08-31

1. customCode

例如,数据库中有一个的字段weight_c,值为70,期望输出70 kg,则仅需修改相关view文件即可。

列表页面:custom/modules/module_name/metadata/listviewdefs.php

$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

$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_recordlogic_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_recordlogic_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 了。

我们新建一个类型为DateOfBirthWithAgeSugarField,需要创建以下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种方法,在实际开发过程中,还需根据不同需求,使用相应的方法。

Last updated