2012-09-21 4 views
0

Voici le tableau d'exemple que je reçois du CMS à Smarty.Smarty modifer/plugin pour obtenir des étiquettes à partir d'un tableau

[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 
       ) 

     ) 

donc je normalement écrire {$field.value} ou {html_options values=$field.options.values output=$field.options.labels selected=$field.value}

Ma question est de savoir comment puis-je obtenir facilement l'étiquette de la valeur. J'ai essayé ceci: {$field.options.labels[$field.value]} mais alors réaliser que ceci va juste obtenir l'index du tableau et pas la valeur.

Je sais que vous pourriez le faire dans un {foreach/if} mais cela va devenir désordonné dans le modèle. Existe-t-il un moyen d'écrire un plugin pour cela?

+0

Je ne suis pas sûr, mais quelque chose comme ça pourrait fonctionner '{html_options values ​​= array_combine (array_values ​​($ field.options.values), array_values ​​($ field.options.labels))}' – sofl

Répondre

1

Sans foreach il peut être fait dans une doublure:

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

Ou modifier:

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} 
Questions connexes