Не могу получить доступ к элементу массива 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 шт):

Автор решения: teran

У 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"}

→ Ссылка