Proměnná v includované šabloně
- balicekt
- Člen | 52
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
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#…
- nightfish
- Člen | 517
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í:
- 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']++}
- 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
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++}
?>