Haml filter: pro HTML krásnější
- Mikulas Dite
- Člen | 756
Edit: Vylepšená verze a nová dokumentace: https://componette.org/search/?…
Moje implementace Haml pro Nette. Protože už tady máme skvělé Latte, je to hlavně krásnější zápis html.
Repo: https://github.com/…s/HamlFilter
Proč?: tady bych si dovolil citoval http://haml-lang.com/:
Haml takes your gross, ugly templates and replaces them with veritable Haiku.
Haml is the next step in generating views in your Rails application. Haml is a refreshing take that is meant to free us from the shitty templating languages we have gotten used to.
Haml is based on one primary principle. Markup should be beautiful.
Použití:
Stačí zaregistrovat v BasePresenter
u (případně
BaseControl
). Zlaté pravidlo je „nejdřív Haml, potom
Latte“.
public function templatePrepareFilters($template)
{
$template->registerFilter(new Nette\Templating\Filters\Haml);
$template->registerFilter(new Nette\Latte\Engine);
}
Ukázka
!!! 5
%html
%head
%meta [name => robots, content => {$robots}, n:ifset => $robots]
%title Nette Application Skeleton
%script [type => text/javascript, src => {$basePath}/js/netteForms.js]
%body
%div [n:foreach => $flashes as $flash, class => flash {$flash->type}]
{$flash->message}
.note
%ul
%li Haml...
%li Haml is here...
%li Haml for your Nette!
%article
{include #content}
<!DOCTYPE html>
<html>
<head>
<title>Nette Application Skeleton</title>
<script type="text/javascript" src="/haml/www/js/netteForms.js"></script>
</head>
<body>
<div class="note">
<ul>
<li>Haml...</li>
<li>Haml is here...</li>
<li>Haml for your Nette!</li>
</ul>
</div>
<article>
<!-- tady by opravdu byl obsah #content bloku -->
</article>
</body>
</html>
O co přijdu?
O nic!
- Je to filtr, takže se výsledek cachuje
- Latte, makra i n:attributy fungují jako dřív
- Dědičnost šablon zůstává a vkládané šablony jsou filtrem taky prohnané
Editoval Mikulas Dite (20. 5. 2011 22:45)
- na1k
- Člen | 288
Vypadá to zajímavě, ale co nějaké praktické zkušenosti? Používáte to už někdo v běžném provozu u běžných webů?
Bojím se, že pokud by po mně měl někdo s tím kódem pracovat, bude dost mimo. Přeci jenom HTML zvládne každý středoškolák, ale tohle mi přijde spíš jako takové undergroundové kódění :-D
- Filip Procházka
- Moderator | 4668
Woooow, tos jako celý filter přepsal z Ruby do PHP, jo? Dobrá práce! Nevím jestli pro to budu mít využití, ale vypadá to moc dobře.
- Mikulas Dite
- Člen | 756
Díky : ) Není to úplně celý haml, například to nepoužívá zkratky pro ruby, dynamičnost zůstává na Nette makrech. Btw oproti Ruby implementaci je tady pro parametry hranatá místo curly závorky, aby se to nebilo s Latte.
ic napsal(a):
Jak s tím budou pracovat všelijaké doplňky? Které třeba na nějaké místo položí klasické html? nezkolabuje to? A DebugPanel pod
</html>
taky bez problému?
Panelů se to netýká. Když to najde klasické html v normální
šabloně, tak se ho to pokusí naparsovat, ale přeloží to jako textový
obsah, ne jako elementy (buď tam začíná tag <
nebo
text
). Ve výsledném html to bude v pořádku, akorát možná
jinak naformátované – očekávám, že ruční html bude
v jednom řádku.
Co se týče 3rd party doplňků, tam se Haml vůbec nedostane, protože ty
dědí přímo od Nette tříd. Do vlatních komponent se musí explicitně
vypsat v BaseControl
u (stejně jako u prezenterů stačí
templatePrepareFilters
).
- Mikulas Dite
- Člen | 756
Sass zatím implementuju takhle ve své sbírce nette nástrojů:
case "sass":
isProjectDir();
echo "Sass is watching for changes. Press Ctrl-C to stop.";
passthru('sass --watch app/stylesheets/:www/css/');
break;
a každá změna se mi automaticky kompiluje. Není potřeba to mít i na serveru, ale byla by to parádička.
- pEeLL
- Člen | 23
at se na haml divam jak chci nevidim vtom zadny pokrok. pokud pouzivate zen coding (nebo staci i lepsi editor) tak nejake zavorky <> a uzaviraci tagy stejne nikdy nepisete. navic nepotrebujete zadny vice ci mene dokonaly prevodnik.
ted kdyz jsem to psal me napadlo ze mozna zajimavy by byl prave prevodnik zen
coding na html
(ikdyz by se muselo upravit hromada veci se kterymi se v zen coding
nepocita)
ale napsat neco jako
ul#nav>li.blue*6>a:href(‚href1‘,‚href2‘.....):text(‚jedna‘,‚dva‘…)
a vygenerovat
<ul id=„nav“>
<li class=„blue“>
<a href=„href1“>jedna</a>
</li>
<li class=„blue“>
<a href=„href2“>dva</a>
</li>
<li class=„blue“>
<a href=„href3“>tri</a>
</li>
<li class=„blue“>
<a href=„href4“>ctyri</a>
</li>
<li class=„blue“>
<a href=„href5“>pet</a>
</li>
<li class=„blue“>
<a href=„href6“>sest</a>
</li>
</ul>
- Mikulas Dite
- Člen | 756
Mám dopsanou vylepšenou verzi, která je o něco chytřejší a spolupracuje víc s latte.
Ukážu na #posob : )
Editoval Mikulas Dite (20. 5. 2011 18:12)
- Tomáš Votruba
- Moderator | 1114
Skvělá věc!
Když chci zapsat dva %a
tagy pod sebe, tak mi to k prvnímu
přičte odřákování, které vede k tomu druhému.
Nejde nějak natvrdo uzavírat %a
tagy?