You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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函数:

  1. 在Sugar的自定义目录下创建custom/include/Smarty/plugins/function.get_multiselect_item.php文件
  2. 写入以下代码:
<?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 '';
    }
}
  1. 在邮件模板里这样调用:
{* 按索引取第二个值 *}
{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模块新增一个计算字段:

  1. 进入Admin > Studio > Leads > Fields,新建一个Text类型的字段(比如field_c_selected_value)
  2. 设置该字段为计算字段,编写计算逻辑:
$values = explode(',', $bean->field_c);
return isset($values[1]) ? trim($values[1]) : '';
  1. 保存后做Quick Repair and Rebuild,之后在邮件模板里直接调用{::Leads::field_c_selected_value::}即可。

以上几种方法都能解决你的问题,根据你的实际需求选择最合适的就行~

内容的提问来源于stack exchange,提问作者nic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:17:08