Smarty modifer/plugin для получения меток из массива

Это пример массива, который я отправляю из 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}, но в шаблоне это будет беспорядочно. Есть ли способ написать плагин для этого?


person John Magnolia    schedule 21.09.2012    source источник
comment
Я не уверен, но что-то вроде этого может сработать {html_options values=array_combine(array_values($field.options.values),array_values($field.options.labels))}   -  person sofl    schedule 22.09.2012


Ответы (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');

тпл:

{$field|extractLabel}
person dev-null-dweller    schedule 22.09.2012