Переназначить родительскую переменную во включенном шаблоне Dwoo
У меня есть Dwoo
шаблон - в примере base.html
и есть массив $data
,
{assign '' 'globalVar'} {* $globalVar empty right now *}
{foreach $data element}
{include '_partial.html'}
{/foreach}
...
<b>{$globalVar}</b>
И вот _partial.html
<p>
{$element.someText}
</p>
{assign "$globalVar $element.someVar" 'globalVar'}
Что я хочу получить? В каждом частичном файле я хочу изменить некоторые $globalVar
что я хочу использовать после {foreach}
,
И здесь важная вещь - я не хочу делать частичное {assign}
в base.html
! Только в _partial.html
,
Можно ли пройти $globalvar
в _partial.html
по ссылке, поэтому частичный файл изменил бы эту переменную?
2 ответа
Я не нашел никакого реального решения - только этот обходной путь:
Dwoo позволяет получить доступ к суперглобальным переменным с $dwoo.get.variable
или же $dwoo.post.variable
так далее..
Мы можем получить данные или также установить, так что в _partial.html
Я сделал что-то вроде:
{$dwoo.env.globalVar "$globalVar $element.someVar"}
В base.html
Теперь я могу получить к нему доступ:
{$dwoo.env.globalVar}
Я бы сказал, что вы можете использовать два подхода, но нет действительно хорошего способа сделать это из самого шаблона.
Самый простой - просто создать переменную перед вызовом $dwoo->get и назначить ее по ссылке, если вы просто используете объект Dwoo_Data:
$globalVar = '';
$data->assignByRef('globalVar', $globalVar);
Если вы не используете объект Dwoo_Data, сделайте это вместо этого:
$globalVar = '';
$data['globalVar'] =& $globalVar;
Это в основном инициализирует переменную как ссылку, поэтому она будет передана как ссылка на включенные шаблоны.
Тогда в частичном шаблоне я бы порекомендовал назначить так, потому что это проще, но это зависит от вас:
{$globalVar .= $element.someVar}
Другой вариант заключается в том, чтобы просто поместить новый объект stdClass() в ваши данные, а затем вы можете назначить ему такие вещи, как
{$globalObj->stuff .= $element.someVar}
А поскольку это объект, он будет автоматически передаваться по ссылке, что также решает вашу проблему.
Так что да, это выполнимо, но вы должны "планировать", прежде чем вы будете в шаблоне, потому что вы не можете просто передать данные обратно в родительский шаблон из включенного.
Я надеюсь, что это помогает, ура