SugarCRM 6.5 CE:如何使用 Smarty 在 editview 中自定义标签

SugarCRM 6.5 CE: how to customize label in editview using Smarty

我正在尝试使用 Smarty 在编辑视图中自定义标签。

如果 some_fieds 的值为 1,则名为 decription 的字段应具有带货币符号的标签 LBL_LABEL_ONE,否则为 LBL_LABEL_TWO

使用 detailviewdefs.php 中的以下代码,我可以毫无问题地在视图详细信息中完成此操作:

array (
    'name' => 'description',
    'label' => '
        {if $bean->some_field==1}
          {$MOD.LBL_LABEL_ONE} {$CURRENCY}
        {else}
          {$MOD.LBL_LABEL_TWO}
        {/if}',
),

注意some_field是当前模块的字段,$CURRENCYview.detail.php中赋值,代码如下:

function preDisplay() {
    parent::preDisplay();

    $currency = new Currency();
    $this->ss->assign('CURRENCY', $currency->getDefaultCurrencySymbol());
}

editviewdefs.php 中使用相同的代码我遇到了几个问题:

首先:获取bean的字段出现如下致命错误:

Fatal error: Smarty error: [in cache/modules/omn_fornitura_gas/EditView.tpl line 506]: syntax error: invalid attribute name: '$bean->some_field' (Smarty_Compiler.class.php, line 1536) in C:\xampp\htdocs\sugar\include\Smarty\Smarty.class.php on line 1095

其次:变量$CURRENCY好像不正确:

{€' module='omn_fornitura_gas'}

而不是

这个真是个谜。

您看到这种情况的原因是 Sugar 似乎以完全不同的方式呈现 Smarty Detail 和 Edit 视图定义。

问题

详细地说,它非常巧妙地编译字段:

cache/modules/omn_fornitura_gas/EditView.tpl

{capture name="label" assign="label"}
{if $bean->some_field==1}
{$MOD.LBL_LABEL_ONE} {$CURRENCY}
{else}
{$MOD.LBL_LABEL_TWO}
{/if}{/capture}

但是,在编辑中,它会尝试将其作为已翻译标签的属性插入:

cache/modules/omn_fornitura_gas/EditView.tpl

{capture name="label" assign="label"}{sugar_translate label='
{if $bean->some_field==1}
{$MOD.LBL_LABEL_ONE} {$CURRENCY}
{else}
{$MOD.LBL_LABEL_TWO}
{/if}' module='omn_fornitura_gas'}{/capture}

这解释了您看到的两个问题,因为它抱怨属性,并在底行显示模块名称。

那么我们能做些什么呢?

不幸的是,由于 edit/detail 模板是由 Sugar 编译和缓存的,如果不深入研究 Sugar 代码,我们无法直接访问它们。

但是,我们可以通过指定不同的标签来解决这个问题,然后动态设置该标签,就像您在元数据中所做的那样,但这次是通过 PHP in [=65] =].

试试这个:

editviewdefs.php

array (
    'name' => 'description',
    'label' => 'LBL_CUSTOM_LABEL',
),

view.edit.php

function preDisplay() {
    parent::preDisplay();

    $currency = new Currency();
    global $mod_strings;
    if ($this->bean->some_field == "1"){
        $mod_strings['LBL_CUSTOM_LABEL'] = $mod_strings['LBL_LABEL_ONE'] . " " . $currency->getDefaultCurrencySymbol();
    }
    else {
        $mod_strings['LBL_CUSTOM_LABEL'] = $mod_strings['LBL_LABEL_TWO'];
    }
}

那里发生了什么?

$mod_strings 是 sugar 中的全局变量,用于保存当前模块的标签。我们在这里所做的是利用它来发挥我们的优势,并在生成视图时通过设置此自定义标签的 属性 有条件地设置标签应该是什么。意识到这在技术上不是使用 Smarty 的解决方案,但我希望我上面的详细信息可以帮助阐明无法解决这个问题,就像 Sugar 中的详细视图定义一样。

让我知道这是否有帮助,或者我是否可以提供任何进一步的信息!