0

这是我从 CMS 发送到 Smarty 的示例数组。

[field] => Array
(
    [value] => 19
    [options] => Array
        (
            [labels] => Array
                (
                    [0] => --- Select ---
                    [1] => John
                    [2] => Mark
                    [3] => Luke
                    [4] => Philip
                )

            [values] => Array
                (
                    [0] => 
                    [1] => 15
                    [2] => 1
                    [3] => 19
                    [4] => 17
                )

        )

所以我通常会写{$field.value}{html_options values=$field.options.values output=$field.options.labels selected=$field.value}

我的问题是如何轻松地从值中获取标签。我试过这个:{$field.options.labels[$field.value]}但后来意识到这只是获取数组的索引而不是值。

我知道您可以在 {foreach/if} 中执行此操作,但这会在模板中变得混乱。有没有办法为此编写插件?

4

1 回答 1

1

如果没有 foreach 循环,它可以在单行中完成:

{$field.options.labels[$field.value|array_search:$field.options.values]}

或修饰符:

function extractLabel($field){
    $idx = array_search($field['value'], $field['options']['values']);
    if($idx !== FALSE && isset($field['options']['labels'][$idx])){
        return $field['options']['labels'][$idx];       
    }
}

$smarty->registerPlugin('modifier', 'extractLabel', 'extractLabel');

tpl:

{$field|extractLabel}
于 2012-09-22T08:20:31.147 回答