这是我从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}中执行此操作,但这会在模板中变得混乱。有没有办法为此编写插件?
答案 0 :(得分: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}