Princip: Renderují se pouze snippety, které jsou volány přímo (bloky jsou interně implementovány jako funkce), takže neznají svůj kontext. V ajaxové odpovědi se posílá čistý JSON
2009 - prvotní koncept nových snippetů fungujících jako bloky
předchozí implementace (stále výchozí) označeno jako old snippet mode
nové snippety se od původních liší dvojtečkou (např. {snippet:cart}), nefungují uvnitř komponent
2009 - zrušení starých snippetů
zrušení zavináčů, SnippetHelperu
zrušeno dvojtečkové rozlišení (nové snippety se tedy zapisují jako {snippet cart})
Podrobný popis principu starých snippetů
Celá šablona se obalila jednou podmínkou if (!majiSeRenderovatPouzeSnippety) { a }
Např. jednoduchá šablona
<p>Ahoj světe!</p>
<p>Mám rád Nette!</p>
se přeložila jako
<?php if (!majiSeRenderovatPouzeSnippety): // automatický podmínka okolo celé šablony ?>
<p>Ahoj světe!</p>
<p>Mám rád Nette!</p>
<?php endif; // konec automatické podmínky okolo celé šablony ?>
Vložení snippetu rozbilo tuto obalovací podmínku, takže tato šablona
<p>Ahoj světe!</p>
{snippet}<p>Mám rád AJAX!</p>{/snippet}
<p>Mám rád Nette!</p>
se přeložila jako
<?php if (!majiSeRenderovatPouzeSnippety): // automatická podmínka okolo celé šablony ?>
<p>Ahoj světe!</p>
<?php endif; // {snippet} ?>
<p>Mám rád AJAX!</p>
<?php if (!majiSeRenderovatPouzeSnippety): // {/snippet} ?>
<p>Mám rád Nette!</p>
<?php endif; // konec automatické podmínky okolo celé šablony ?>
Čímž došlo při majiSeRenderovatPouzeSnippety = TRUE k vykreslení pouze obsahu snippetu.
Zavináče pak řešili následující problém a to, že šablona:
<p>Ahoj světe!</p>
{if $mamRadAjax}
{snippet}<p>Mám rád AJAX!</p>{/snippet}
{/if}
<p>Mám rád Nette!</p>
se přeloží jako
<?php if (!majiSeRenderovatPouzeSnippety): // automatická podmínka okolo celé šablony ?>
<p>Ahoj světe!</p>
<?php if ($mamRadAjax): // {if ...} ?>
<?php endif; // {snippet} ?>
<p>Mám rád AJAX!</p>
<?php if (!majiSeRenderovatPouzeSnippety): // {snippet} ?>
<?php endif; // {/if} ?>
<p>Mám rád Nette!</p>
<?php endif; // konec automatické podmínky okolo celé šablony ?>
Po doplnění zavináčů do šablony
<p>Ahoj světe!</p>
@{if $mamRadAjax}
{snippet}<p>Mám rád AJAX!</p>{/snippet}
@{/if}
<p>Mám rád Nette!</p>
se šablona přeložila správně jako
<?php if (!majiSeRenderovatPouzeSnippety): // automatická podmínka okolo celé šablony ?>
<p>Ahoj světe!</p>
<?php endif; // díky @ ?>
<?php if ($mamRadAjax): // díky {if $mamRadAjax} ?>
<?php if (!majiSeRenderovatPouzeSnippety): // díky @ ?>
<?php endif; // díky {snippet} ?>
<p>Mám rád AJAX!</p>
<?php if (!majiSeRenderovatPouzeSnippety): // díky {/snippet} ?>
<?php endif; // díky @ ?>
<?php endif; // díky {/if} ?>
<?php if (!majiSeRenderovatPouzeSnippety): // díky @ ?>
<p>Mám rád Nette!</p>
<?php endif; // konec automatické podmínky okolo celé šablony ?>
1. Prahistorická podpora AJAXu v Nette
AjaxResponse
a makra{partial}
(budoucí snippet)AjaxResponse
naAjaxDriver
2. Snippety, zavináčová magie a
IPartiallyRenderable
aka Staré snippetyIRenderable
aIPartiallyRenderable
+ jejich implementace vNette\Application\Control
AjaxDriver
nyní posílá v odpovědi čistý JSON{partial}
přejmenováno na{snippet}
+ jeho implementace pracující sIPartiallyRenderable
Nette\Application\Control
doNette\Templates\SnippetHelper
IAjaxDriver
Presenter::getPayload
(alias proAjaxDriver
)AjaxDriver
, payload si nyní držíNette\Application\Presenter
jakostdClass
3. Snippety jako bloky aka Nové snippety
{snippet:cart}
), nefungují uvnitř komponentSnippetHelperu
{snippet cart}
)Podrobný popis principu starých snippetů
if (!majiSeRenderovatPouzeSnippety) {
a}
Např. jednoduchá šablona
se přeložila jako
se přeložila jako
Čímž došlo při
majiSeRenderovatPouzeSnippety = TRUE
k vykreslení pouze obsahu snippetu.Zavináče pak řešili následující problém a to, že šablona:
se přeloží jako
Po doplnění zavináčů do šablony
se šablona přeložila správně jako
{{tags: snippety, ajax}}
{{author: Jan Tvrdík|1657}}