Переназначить родительскую переменную во включенном шаблоне 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}

А поскольку это объект, он будет автоматически передаваться по ссылке, что также решает вашу проблему.

Так что да, это выполнимо, но вы должны "планировать", прежде чем вы будете в шаблоне, потому что вы не можете просто передать данные обратно в родительский шаблон из включенного.

Я надеюсь, что это помогает, ура

Другие вопросы по тегам