Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Translate to English… Ins Deutsche übersetzen…

Kosmetické HTML

V některých rodinách panuje zvyk před odjezdem na dovolenou celý byt vygruntovat. Proč? To kdyby se k nim vloupal zloděj, aby si nepomyslel něco špatného. Do stejného pytle patří kodéři puntičkářsky dbající na vzhled HTML kódu jejich stránek. To aby se jejich kód snáze vykrádal, aby je lepič na Webtrhu nepomluvil.

Sám jsem děsný perfekcionista. Takže mě žralo, že hezky naformátovaná PHP šablona:

<?php
$items = array('user', 'see', 'too');
?>

<ul>
<?php foreach ($items as $item): ?>
        <li><?php echo htmlSpecialChars($item) ?>
<?php endforeach ?>
</ul>

generuje ošklivý HTML kód:

<ul>
        <li>user        <li>see <li>too</ul>

Jak už asi víte, v Nette Framework lze ekvivalentní šablonu zapsat pomocí přehlednějšího Curly Brackets filtru:

<ul>
{foreach $items as $item}
        <li>{$item}
{/foreach}
</ul>

Filtr má v sobě zabudovanou kosmetickou drobnost – podle určité heuristiky se snaží učinit perfekcionistické duši za dost. A vygeneruje tento výstup:

<ul>
        <li>user
        <li>see
        <li>too
</ul>

Já vím, pro mnohé z vás je to detail, ale pro nás chronické puntičkáře zásadní feature ;)

p.s. jsou situace, kdy jde o velmi praktickou vlastnost, pokud třeba generujete plain text nebo Texy kód, kde na formátování a správném odřádkování hodně záleží

p.s.s. tahle feature má nulový vliv na rychlost generování stránky

napsáno 17. 7. 2009 | shlédnuto 5371x | nahoru


Komentáře RSS 2.0 komentářů » přidat

avatar

#1 Ondřej Mirtes http://ondrej.mirtes.cz/ nový

Moc hezké, něco takového jsem vždycky chtěl :o)

Ještě jsem plánoval nadhodit feature request – aby řádek ve zdrojáku šablony = řádek v cacheované verzi (s čistým PHP). Nette hlásí totiž chybu právě v té cacheované verzi a člověk se, aby chybu odhalil, musí koukat do ní, protože počty řádků těch dvou souborů nesouhlasí.

Posláno 17. 7. 2009 v 11.11 | Odpovědět
Na komentář reagoval [2] David Grudl
avatar

#2 David Grudl http://davidgrudl.com nový

#1 Ondřej Mirtes: tohle udělat nejde. Ale novinkou jedné z posledních revizí je výrazné zčitelnění generovaných šablon.

Posláno 17. 7. 2009 v 11.17 | Odpovědět
Na komentář reagoval [13] Jakub Vrána
avatar

#3 Martin Hassman http://methisto.blogspot.com/2009/07/facebook-fan-box-cycler nový

Supr, šablonovací systém, který tohle neumí by vůbec neprošel mým vstupním filtrem.

Posláno 17. 7. 2009 v 11.30 | Odpovědět
avatar

#4 Jakub Vrána http://php.vrana.cz/ nový

Zrovna teď v sobotu jsem na to taky narazil, když jsem výstup Adminera změnil z XHTML na HTML. Přemýšlel jsem, že bych u té příležitosti nechal HTML kód při kompilaci i komprimovat (protože by to ušetřilo pár bajtů ve výsledném souboru a posílaných stránkách), ale přehlednost kódu je pro mě i v tomto případě přednější.

Při generování plain-textu by na formátování HTML podle mě záležet vůbec nemělo, převaděč by se měl orientovat výhradně podle značek.

Posláno 17. 7. 2009 v 11.41 | Odpovědět
Na komentář reagoval [12] Messa
avatar

#5 Tomáš nový

Proč vůbec nechávat HTML kód tak dobře čitelný? Mně by se třeba líbil při debugu hezky odsazený kód, ale v ostré verzi nějaká zkompresovaná verze a pokud by se zmenšily i CSS a javascript, tak by podle mně byl i při pomalejším připojení poznat rozdíl.

Posláno 17. 7. 2009 ve 12.24 | Odpovědět
Na komentář reagoval [22] Martin

#6 veena http://webexpo.cz nový

Posláno 17. 7. 2009 ve 12.33 | Odpovědět
Na komentář reagoval [16] johno

#7 Pavol nový

Keď sme pritom puňtičkárení, je škoda, že v Nette\Web\Html nie je možné nastaviť, aby HTML atribúty boli obalené apostrofom namiesto dvojitých úvodzoviek.

Teraz mám v šablónach apostrofy, ale formuláre používajú dvojité úvodzovky. To je škaredý mix :-(

Posláno 17. 7. 2009 ve 12.41 | Odpovědět
avatar

#8 Tomáš Fejfar http://blog.red-pill.cz nový

Tak to je davide opravdu killer feature. Tohle mi dycky děsně pije krev. To se snad pokusim naforkovat ten tvůj view na ZF :P

Posláno 17. 7. 2009 ve 12.48 | Odpovědět
avatar

#9 MichaL nový

Ja to resim tim, ze si vystup z view prozenu Tidy.

Posláno 17. 7. 2009 ve 13.27 | Odpovědět
avatar

#10 ic http://icweb.eu nový

V (x)html ‚všechno co mohlo být vykradeno, už bylo vykradeno‘.
Neříkám javascript, a v budoucnu zase html5 tam to hrozí, ale dneska je v tomhle moři bezvětří.

Posláno 17. 7. 2009 v 15.10 | Odpovědět
avatar

#11 Čuga http://www.divdesign.cz nový

Mám

{foreach $terms as $term}
{if $iterator->isFirst()}<ul>{/if}
  <li><a href="{plink xxx xxx">xxx</a></li>
{if $iterator->isLast()}</ul>{/if}
{/foreach}

šlo by, aby při vyhodnocení podmínky na false nevypisoval prázdný řádek???

Posláno 17. 7. 2009 v 15.12 | Odpovědět
avatar

#12 Messa nový

#4 Jakub Vrána: podíval jsem se na pár diffů – bez ukončovacích tagů má kód vypadat lépe? :-)

Posláno 17. 7. 2009 v 16.26 | Odpovědět
Na komentář reagoval [14] Jakub Vrána
avatar

#13 Jakub Vrána http://php.vrana.cz/ nový

#2 David Grudl: tohle udělat nejde

Proč to nejde? Podle mě by to jít mělo, ale možná jsem něco přehlédl a nechce se mi to zkoušet implementovat jenom proto, abych na konci zjistil, že to opravdu nejde.

Taky je otázka, jak moc užitečné by sjednocení řádek bylo. Jestli by se kvůli tomu vyplatilo do vygenerovaného kódu přidat třeba echo "\n".

Posláno 17. 7. 2009 v 18.24 | Odpovědět
avatar

#14 Jakub Vrána http://php.vrana.cz/ nový

#12 Messa: Ukončovací tagy jsem odstranil kvůli zmenšení velikosti. V HTML nejsou všechny ukončovací tagy potřeba a protože se Adminer posílá s Content-Type: text/html, tak jsem je vyhodil. Přehlednost to podle mě nijak nezhoršilo, ale nebylo cílem ji ani zlepšit.

Uvažoval jsem o odstranění ukončení řádek, které by z kódu udělalo teprve tu správnou kaši :-).

Posláno 17. 7. 2009 v 18.28 | Odpovědět
avatar

#15 Petr http://www.cdh.cz nový

Pěkné. Díky.

Posláno 17. 7. 2009 ve 20.34 | Odpovědět
avatar

#16 johno http://johno.jsmf.net/ nový

#6 veena: Jojo, to je stare a uz to nevyvyjam, a ten kod tiez ziadna slava. Hold ucime sa cely zivot.

Posláno 19. 7. 2009 v 16.06 | Odpovědět
Na komentář reagoval [17] David Grudl
avatar

#17 David Grudl http://davidgrudl.com nový

#16 johno: jakmile si to při pohledu na svůj pár let starý kód přestaneš myslet, tak jsi na konci programátorského vývoje.

jinak teda holt :-)

Posláno 20. 7. 2009 v 10.59 | Odpovědět
avatar

#18 Inza http://www.dvojmo.cz nový

Prostě geniální Davide;-) – Nette je zase o krok dál;-)…

Posláno 21. 7. 2009 v 10.03 | Odpovědět
avatar

#19 Jod http://romcok.eu nový

Paráda ! :)

Posláno 21. 7. 2009 ve 22.16 | Odpovědět
avatar

#20 Ondřej Mirtes http://ondrej.mirtes.cz/ nový

Koukám, že revize 450 asi přinesla to, po čem jsem toužil :)

  • CurlyBracketsFil­ter: exceptions shows line number of template
Posláno 22. 7. 2009 v 9.45 | Odpovědět
Na komentář reagoval [21] LM

#21 LM nový

#20 Ondřej Mirtes: Tohle jsou ale chyby které vznikají při kompilaci šablony, pokud bude chyba ve vygenerovaném PHP, tak to bude stále hlásit chybu v cache.

Posláno 22. 7. 2009 v 10.05 | Odpovědět
avatar

#22 Martin nový

#5 Tomáš: Pridávam hlas ku kompresii výstupu. Nech to v debug mode takto krásne uprace, ak je však web v ostrej prevádzke – vymazanie prázdnych miest skráti výstupný kód o par % …

Posláno 24. 7. 2009 v 1.33 | Odpovědět

#23 pachollini http://blog.ataxo.cz nový

Ať žije Vojtěch Steklač.

Posláno 31. 7. 2009 v 1.57 | Odpovědět
avatar

#24 Lukáš Satin http://cyberluke.elite-media.net nový

Pro všechny puntičkáře stačí php-tidy (používám). Jinak šablonu mi takhle zarovná přímo NetBeans i phpEclipse. Na kompresi doporučuji gzip či mod_deflate.

Posláno 19. 9. 2009 ve 22.40 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

phpFashion © 2004, 2012 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.