Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:8.4.2017 20:35

Zdravím, věřím, že nadpis mluví za vše. Chci v nějaké konkrétní šabloně presenteru (v .latte) nastavit proměnnou, se kterou bych mohl pracovat v layoutu, ve kterém je vložená. Konkrétně mám na mysli třeba typ boolean, takže {block} je mimo mísu, poněvadž zároveň obsah zobrazí.
Existuje řešení, kdy bych nemusel předávat proměnnou v presenteru?

Odpovědět
8.4.2017 20:35
the cake is a lie
Avatar
Odpovídá na Petr Čech
Martin Konečný (pavelco1998):8.4.2017 20:54

Ahoj, z nějakého důvodu nemůžeš proměnnou předat v metodě beforeRender() např. v BasePresenteru?

Edit: Já blbec nedočetl do posledního řádku. Nicméně otázku modifikuji na "proč nechceš předávat proměnnou z presenteru?"

Editováno 8.4.2017 20:55
Nahoru Odpovědět
8.4.2017 20:54
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Petr Čech:8.4.2017 21:58

Protože potom budu mít kopu renderSth(), které nebudou dělat nic jiného, než že budou nastavovat jeden boolean. Navíc je to většinou něco, co by mělo logicky patřit do šablony. Uvedu konkrétní příklad:
v layoutu chci polovinu vkládaných šablon vkládat do <article>, tu druhou ne. Když bych to nastavoval v latte šablonách, bylo by to pohodlnější.

Nahoru Odpovědět
8.4.2017 21:58
the cake is a lie
Avatar
TomasGlawaty
Člen
Avatar
Odpovídá na Petr Čech
TomasGlawaty:9.4.2017 10:02

Ahoj,
Mám dojem, že lze "redefinovat" bloky, jelikož ty šablony ve skutečnosti od sebe dědí:

@layout.latte:

<div>
        {include #wrapper}
</div>

{define #wrapper}
        <section>
                {include content}
        </section>
{/define}

______________________________________________
template1.latte:

{block content}
        Obsah section

______________________________________________
template2.latte:

{define #wrapper}
        <article>
                {include content}
        </article>
{/define}

{block content}
        Obsah article

Myslím, že jsem to dříve takto nějak použil, ale nejsem si jistý jestli to v aktuální verzi funguje. Lepší řesení je podle mě to sypat do šablony z presenteru, třeba nějak takto:

BasePresenter extends UI\Presenter
{
        /** @var bool */
        protected $useArticle = FALSE;

        /**
        * {@inheritdoc}
        */
        public function beforeRender()
        {
                $this->template->useArticle = $this->useArticle;
        }
}

V konečném Presenteru už potom jenom případně přepíšeš tu proměnnou. Dá se to udělat více způsoby, napadá mě třeba pomocí annotace ad. Ale toto je asi nejsnažší způsob :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
9.4.2017 10:02
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na TomasGlawaty
Petr Čech:9.4.2017 10:15

Díky, vypadá to spíš jako "workaround" než oficiálně podporované řešení. Myslím, že to tam budu sypat z presenteru, alespoň bude jasné, co to vlastně dělám, až se k tomu kódu vrátím za několik měsíců :D

Nahoru Odpovědět
9.4.2017 10:15
the cake is a lie
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.