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



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

如果名为decription的字段的值为 1,则应具有带有货币符号的标签LBL_LABEL_ONEsome_fiedsLBL_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是当前模块的字段,$CURRENCY使用以下代码在view.detail.php中分配:

function preDisplay() {
parent::preDisplay();
$currency = new Currency();
$this->ss->assign('CURRENCY', $currency->getDefaultCurrencySymbol());
}

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

第一:获取 Bean 字段的以下致命错误:

致命错误: 聪明的错误: [在 cache/modules/omn_fornitura_gas/EditView.tpl line 506]:语法错误: 无效的属性名称:"$bean->some_field" (Smarty_Compiler.class.php,第 1536 行)在 C:\xampp\htdocs\sugar\include\Smarty\Smarty.class.php 在第 1095 行

第二:变量$CURRENCY似乎不正确:

{€' 模块='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}

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

那么我们能做些什么呢?

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

但是,我们可以做的是通过指定不同的标签,然后动态设置该标签来解决它,就像您在元数据中所做的那样,但这次是通过 view.edit.php 中的 PHP。

试试这个:

编辑视图定义.php

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

查看.编辑.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_string 是 sugar 中的一个全局变量,用于保存当前模块的标签。我们在这里所做的是利用这一点来发挥我们的优势,并通过在生成视图时设置此自定义标签的属性来有条件地设置标签应该是什么。理解这在技术上不是使用 Smarty 的解决方案,但我希望我的上述细节可以帮助阐明无法解决这个问题,就像 Sugar 中的细节视图定义一样。

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

最新更新