Proměnná v includované šabloně

balicekt
Člen | 52
+
0
-

Je zde nejaka moznost jak udelat aby promenna upravena v includovane sablone propsala do puvodni sablony? Zjednodusene aby tento kod vypsal v sablone TEMPLATE1.latte cislo 4 a ne cislo 0?

//TEMPLATE1.latte
{var $count = 0}
{foreach [1,2,3,4] as $x}
    {include TEMPLATE2.latte count => $count}
{/foreach}

{$count}

//TEMPLATE2.latte
{php $count++}

Děkuji

Editoval balicekt (6. 3. 2018 0:37)

Ondřej Kubíček
Člen | 494
+
0
-

možná když to tam předáš jako referenci & ? nebo bys musel ten $count++ dát do foreach za include
nicméně nevím co přesně potřebuješ, ale iterator má v sobě přímo i foreach, nemusíš tam dávat svůj viz https://latte.nette.org/cs/tags#…

balicekt
Člen | 52
+
0
-

Dekuji za odpoved. Tak bohuzel & nefunguje. No prave ze se ten $count zvysuje jen na zaklade podminky ktera je v template2.latte takze proto to resim. Zatim jsem to vyresil tak ze jsem celou tu podminku vyndal a dal ji pred ten include ale neni to uplne idealni reseni…

nightfish
Člen | 517
+
+2
-

Předání proměnné přes referenci nefunguje, protože v includované šabloně se volá extract() bez flagu EXTR_REFS, takže se u proměnných skalárních typů reference zahodí.

Nabízí se dvě řešení:

  1. naprasit to přes superglobální proměnnou
//TEMPLATE1.latte
{var $GLOBALS['count'] = 0}
{foreach [1,2,3,4] as $x}
    {include TEMPLATE2.latte}
{/foreach}

{$GLOBALS['count']}

//TEMPLATE2.latte
{php $GLOBALS['count']++}
  1. udělat si přepravku na integer:
// Integer.php
final class Integer {
	/** @var int */
	private $value;
	public function __construct(int $value) {
		$this->value = $value;
	}
	public function inc(): void {
		$this->value++;
	}
	public function getValue(): int {
		return $this->value;
	}
}
//TEMPLATE1.latte
{block content}
{var $count = new \Integer(0)}
{foreach [1,2,3,4] as $x}
    {include 'template2.latte' count => $count}
{/foreach}
{$count->getValue()}

//TEMPLATE2.latte
{php $count->inc()}
balicekt
Člen | 52
+
0
-

SUPER dekuji za radu vyresil jsem to pres ArrayHash

<?php

//TEMPLATE1.latte
{block content}
{var $count = \Nette\Utils\ArrayHash::from(["count" => 0])}
{foreach [1,2,3,4] as $x}
    {include 'template2.latte' count => $count}
{/foreach}
{$count->count}

//TEMPLATE2.latte
{php $count->count++}

?>