Na navigaci | Klávesové zkratky

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

Komentáře

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

    avatar

    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í.

    před 7 lety | reagoval [2] David Grudl
  2. David Grudl http://davidgrudl.com #2

    avatar

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

    před 7 lety | reagoval [13] Jakub Vrána
  3. Martin Hassman http://methisto.blogspot.com/2009/07/facebook-fan-box-cycler #3

    avatar

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

    před 7 lety
  4. Jakub Vrána http://php.vrana.cz/ #4

    avatar

    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.

    před 7 lety | reagoval [12] Messa
  5. Tomáš #5

    avatar

    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.

    před 7 lety | reagoval [22] Martin
  6. veena http://webexpo.cz #6

    před 7 lety | reagoval [16] johno
  7. Pavol #7

    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 :-(

    před 7 lety
  8. Tomáš Fejfar http://blog.red-pill.cz #8

    avatar

    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

    před 7 lety
  9. MichaL #9

    avatar

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

    před 7 lety
  10. ic http://icweb.eu #10

    avatar

    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ří.

    před 7 lety
  11. Čuga http://www.divdesign.cz #11

    avatar

    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???

    před 7 lety
  12. Messa #12

    avatar

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

    před 7 lety | reagoval [14] Jakub Vrána
  13. Jakub Vrána http://php.vrana.cz/ #13

    avatar

    #2 Davide Grudle, 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".

    před 7 lety
  14. Jakub Vrána http://php.vrana.cz/ #14

    avatar

    #12 Messo, 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 :-).

    před 7 lety
  15. Petr http://www.cdh.cz #15

    avatar

    Pěkné. Díky.

    před 7 lety
  16. johno http://johno.jsmf.net/ #16

    avatar

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

    před 7 lety | reagoval [17] David Grudl
  17. David Grudl http://davidgrudl.com #17

    avatar

    #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 :-)

    před 7 lety
  18. Inza http://www.dvojmo.cz #18

    avatar

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

    před 7 lety
  19. Jod http://romcok.eu #19

    avatar

    Paráda ! :)

    před 7 lety
  20. Ondřej Mirtes http://ondrej.mirtes.cz/ #20

    avatar

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

    • CurlyBracketsFilter: exceptions shows line number of template
    před 7 lety | reagoval [21] LM
  21. LM #21

    #20 Ondřeji Mirtesi, 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.

    před 7 lety
  22. Martin #22

    avatar

    #5 Tomáši, 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 % …

    před 7 lety
  23. pachollini http://blog.ataxo.cz #23

    Ať žije Vojtěch Steklač.

    před 7 lety
  24. Lukáš Satin http://cyberluke.elite-media.net #24

    avatar

    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.

    před 7 lety

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