SugarCRM邮件模板中如何调用多选字段数组的单个值?
解决SugarCRM邮件模板中多选字段单个值的获取问题
首先明确一点:SugarCRM的多选字段(multienum类型)在数据库中是以逗号分隔的字符串形式存储的,并不是数组。这就是你没法用$field_c['value2']或索引语法直接取值的原因——模板里调用{::Leads::field_c::}返回的是原始存储的字符串,而非数组对象。
下面给你几种可行的解决思路:
1. 利用Smarty模板内置函数拆分字符串
SugarCRM的邮件模板基于Smarty引擎,你可以直接在模板里用explode函数把字符串拆分成数组,再取指定索引的值。示例代码如下:
{* 先把逗号分隔的字符串转成数组 *} {assign var="selected_values" value="`explode(',', {::Leads::field_c::})`"} {* 取第二个值(索引从0开始,所以[1]对应第二个元素) *} {$selected_values[1]}
注意:如果你的多选值本身包含逗号(这种情况很少见,但要留意),这种方法会失效。
2. 创建自定义模板函数(更可靠)
如果需要更灵活的处理,比如按值名称取(比如value2),可以自定义一个Smarty函数:
- 在Sugar的自定义目录下创建
custom/include/Smarty/plugins/function.get_multiselect_item.php文件 - 写入以下代码:
<?php function smarty_function_get_multiselect_item($params, &$smarty) { $field_value = $params['value']; $target = $params['target']; // 可以是索引(数字)或值名称 $values = explode(',', $field_value); if (is_numeric($target)) { return isset($values[$target]) ? trim($values[$target]) : ''; } else { foreach ($values as $val) { if (trim($val) == $target) { return $val; } } return ''; } }
- 在邮件模板里这样调用:
{* 按索引取第二个值 *} {get_multiselect_item value={::Leads::field_c::} target=1} {* 按值名称取value2 *} {get_multiselect_item value={::Leads::field_c::} target='value2'}
写完后记得修复Sugar的权限,或者执行一次Quick Repair and Rebuild。
3. 新增计算字段(适合固定需求)
如果只需要固定取某个位置的值,也可以在Leads模块新增一个计算字段:
- 进入Admin > Studio > Leads > Fields,新建一个Text类型的字段(比如
field_c_selected_value) - 设置该字段为计算字段,编写计算逻辑:
$values = explode(',', $bean->field_c); return isset($values[1]) ? trim($values[1]) : '';
- 保存后做Quick Repair and Rebuild,之后在邮件模板里直接调用
{::Leads::field_c_selected_value::}即可。
以上几种方法都能解决你的问题,根据你的实际需求选择最合适的就行~
内容的提问来源于stack exchange,提问作者nic
相关产品推荐
相关产品推荐

