Не могу получить доступ к элементу массива Smarty
Есть код
{foreach from=$aPromotions item=promotion}
{$promotion|@debug_print_var}
{/foreach}
Тут все ок, он возвращает массив
Array (12)
id => "75"
name => "Акция13"
type_target => "cats"
cats-id-target => "99,9999"
brands-id-target => ""
id-target => ""
percent => "2"
time-start => "2021-07-05"
time-end => "2021-07-12"
status => "0"
description => "Акция для категорий ..."
tt => Array (0)
Получаю доступ к элементу массива в смарти я так
{$promotion.name}
{$promotion.type_target}
...и т.д.
Тут все ок. Но при попытке получить {$promotion.time-start|@debug_print_var}
Я получаю 0
При попытке его вывести, при помощи
{$promotion.time-start} - я тоже получаю 0
Что не так то?
======upd===one======
{$promotion['time-start']|@debug_print_var}
{$promotion['time-start']}
Не возвращают ничего
Ответы (1 шт):
У smarty 2 какие-то сложности с доступом к элементам массива, содержащим в т.ч. дефисы. В третьей версии будет работать простой доступ через {$promotion['time-start']}, а во второй так не работает. Из найденного на просторах сети - заключить имя поля в переменную и организовать доступ следующим образом
{assign var=f value="time-start"}
{$promotion.$f}
Также предлагается заменить цикл {foreach} на {section}.
ниже написанный вариант ответа, как выяснилось, не актуален для Smarty 2
не так то, что -start это "минус константа start"
как и в случае с пхп, доступ к членам класса, когда имя поля нестандартное, использовать следует альтернативный вариант записи. В смарти у вас массив, так что обращайтесь как к массиву. Доступ через точку это для упрощения.
{$promotion['time-start']}
в случае объектов пхп было бы $promotion->{"time-start"}