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 に答える