Na navigaci | Klávesové zkratky

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 #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 15 lety | reagoval [2] David Grudl
  2. David Grudl #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 15 lety | reagoval [13] Jakub Vrána
  3. Martin Hassman #3

    avatar

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

    před 15 lety
  4. Jakub Vrána #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 15 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 15 lety | reagoval [22] Martin
  6. veena #6

    před 15 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 15 lety
  8. Tomáš Fejfar #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 15 lety
  9. MichaL #9

    avatar

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

    před 15 lety
  10. ic #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 15 lety
  11. Čuga #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 15 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 15 lety | reagoval [14] Jakub Vrána
  13. Jakub Vrána #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 15 lety
  14. Jakub Vrána #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 15 lety
  15. Petr #15

    avatar

    Pěkné. Díky.

    před 15 lety
  16. johno #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 15 lety | reagoval [17] David Grudl
  17. David Grudl #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 15 lety
  18. Inza #18

    avatar

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

    před 15 lety
  19. Jod #19

    avatar

    Paráda ! :)

    před 15 lety
  20. Ondřej Mirtes #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 15 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 15 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 15 lety
  23. pachollini #23

    Ať žije Vojtěch Steklač.

    před 15 lety
  24. Lukáš Satin #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 15 lety

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


phpFashion © 2004, 2024 David Grudl | o blogu

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