SugarCRM 6.5 CE:如何使用Smarty

时间:2017-03-29 13:22:49

标签: smarty sugarcrm

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

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

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

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

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

首先:以下致命错误获取bean的字段:

  

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

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

  

{€'module ='omn_fornitura_gas'}

而不是

  

1 个答案:

答案 0 :(得分:1)

这个很难谜。

你看到这样的事情的原因是,Sugar似乎对Smarty Detail和Edit视图定义有很大的不同。

问题

详细地说,它非常巧妙地编译了这个领域:

高速缓存/模块/ 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}

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

高速缓存/模块/ 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代码。

然而,我们可以做的是通过指定一个不同的标签来解决它,然后动态设置该标签,就像你在元数据中一样,但这次是通过PHP在view.edit.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是糖中的全局变量,用于保存当前模块的标签。我们在这里所做的就是利用我们的优势,并通过在生成视图时设置此自定义标签的属性来有条件地设置标签应该是什么。欣赏这在技术上并不是使用Smarty的解决方案,但我希望我的上述细节可以帮助解决无法解决这个问题与Sugar中的详细视图定义完全相同的问题。

如果有帮助,或者我可以提供任何进一步的信息,请告诉我!