【问题标题】:SugarCRM 6.5 CE: how to customize label in editview using SmartySugarCRM 6.5 CE:如何使用 Smarty 在编辑视图中自定义标签
【发布时间】:2017-03-29 13:22:48
【问题描述】:

我正在尝试使用 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 的字段时出现以下致命错误:

致命错误:Smarty 错误:[in 缓存/模块/omn_fornitura_gas/EditView.tpl 第 506 行]:语法错误: 无效的属性名称:'$bean->some_field' (Smarty_Compiler.class.php,第 1536 行)在 C:\xampp\htdocs\sugar\include\Smarty\Smarty.class.php 在第 1095 行

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

{€' 模块='omn_fornitura_gas'}

而不是

【问题讨论】:

    标签: smarty sugarcrm


    【解决方案1】:

    这真是个谜。

    您看到这种情况的原因是 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。

    试试这个:

    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 中的细节视图定义一样解决这个问题。

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

    【讨论】:

    • 虽然这不是 Smarty 管理的,但您解释了为什么我不能使用 smarty。您的解决方案是完全可以接受的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多