У меня есть массив в PHP, который похож на это:
$config['detailpage.var1']
$config['detailpage.var2']
$config['otherpage.var2']
$config['otherpage.var2']
...
Для доступа к нему в Присяжном острослове, я сделал бы
$smarty->assign('config', $config);
С этим шаблоном:
{$config.detailpage.var1}
К сожалению, это не работает, из-за точки в моем ключе массива "detailpage.var1", который для Присяжного острослова является разделителем для элементов массива. Поскольку я не хочу переписывать свой массив конфигурации (причина, это используется во многих других местах), мой вопрос:
Есть ли какая-либо другая нотация, которую я мог использовать, который работает с точками в ключах массива? Или я могу так или иначе выйти из них?
Не самое умное решение, но оно должно работать:
{assign var=myKey value="detailpage.var1"}
{$config.$myKey}
Попробуйте использовать нотацию массива {$ config ['detailpage.var1']} или {$ config [detailpage.var1]}.
Вы можете переформатировать ключи в ассоциативном массиве для соответствия Smart Compiler Regex'ам.
$configS = array();
foreach($config as $key => $value)
{
$key = str_replace('.','_',$key);
$configS[$key] = $value;
}
$smarty->assign('config', $configS);
ИЛИ
$configS = array();
foreach($config as $key => $value) $configS[str_replace('.','_',$key)] = $value;
$smarty->assign('config', $configS);
Теперь вы можете использовать {$config.detailpage_var1}
вместо этого, просто замените .
на _
.
Пройдитесь по массиву,
function cleanKeysForSmarty(&item,$key)
{
return array(str_replace('.','_',$key) => $value);
}
$smarty->assign("config",array_walk_recursive($config,'cleanKeysForSmarty'));
Что-то в этом роде.