Snippety, AJAX, zápis –historie
- bojovyletoun
- Člen | 667
Ahoj, může mi někdo popsat, jak se v průběhu vyvjívela podpora snippetů v nette
- zápis
- funkčnost
- cílový stav vývoje
- na webexpo 2009 – eshop s bynány, melounem a kiwi se zapisovaly bez @, ale s :, ale to je rok staré {snippet:cart} – 1h:3min videa
- co je snippetHelper- a jeho odstranění v nové verzi
- oldsnippetmode
- Jan Tvrdík
- Nette guru | 2595
1. Prahistorická podpora AJAXu v Nette
- Publikace: pravděpodobně s uvedením Nette
- Princip: Celá stránka se renderuje od output bufferu a vše kromě snippetů se zahodí. V ajaxové odpovědi posílá Nette zároveň i obslužný JS kód.
- 1. 7. 2008 – vznik
AjaxResponse
a makra{partial}
(budoucí snippet) - 3. 7. 2008 – přejmenování
AjaxResponse
naAjaxDriver
2. Snippety, zavináčová magie a IPartiallyRenderable
aka
Staré snippety
- Publikace: 24. 7. 2008
- Princip: Renderují se pouze snippety, ke kterým se prochází přes zavináče. V ajaxové odpovědi se posílá čistý JSON
- 24. 7. 2008 – kompletní přepis implementace
- vznik rozhraní
IRenderable
aIPartiallyRenderable
+ jejich implementace vNette\Application\Control
AjaxDriver
nyní posílá v odpovědi čistý JSON- makro
{partial}
přejmenováno na{snippet}
+ jeho implementace pracující sIPartiallyRenderable
- vznik rozhraní
- 12. 12. 2008 – logika renderování snippetů přesunuta z
Nette\Application\Control
doNette\Templates\SnippetHelper
- 12. 12. 2008 – zjednodušení rozhraní
IAjaxDriver
- 27. 4. 2009 – přidána metoda
Presenter::getPayload
(alias proAjaxDriver
) - 15. 6. 2009 – zrušen
AjaxDriver
, payload si nyní držíNette\Application\Presenter
jakostdClass
- 17. 10. 2009 – invalidace snippetu vynutí odeslání ajaxové odpovědi
3. Snippety jako bloky aka Nové snippety
- Publikace: 17. 10. 2009 (první koncept)
- 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
- 17. 10. 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
- 7. 10. 2009 – zrušení starých snippetů
- zrušení zavináčů,
SnippetHelperu
- zrušeno dvojtečkové rozlišení (nové snippety se tedy zapisují jako
{snippet cart}
)
- zrušení zavináčů,
Podrobný popis principu starých snippetů
1. 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 ?>
2. 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 ?>
Editoval Jan Tvrdík (16. 11. 2010 22:28)
- Filip Procházka
- Moderator | 4668
poklona, zajímalo by mě kde a jak jsi to vyhrabal :)
Editoval HosipLan (8. 11. 2010 8:28)
- bojovyletoun
- Člen | 667
Díky moc, mám v tom jasno. To by si zasloužilo zvláštní kategorii
historie.
Mám verzi dev 2010–11–04 a vše tam funguje pomocí {snippet x} a snipetty
se ručně invalidují. Takhle to bude finální?