Haml - następna generacja szablonów

Opublikowane przez Jarosław Zabiełło Sat, 27 Jan 2007 03:33:00 GMT

W związku z przestawieniem się całkowicie na najnowszą wersję Railsów (1.2.1), postanowiłem przy zrobić także upgrade oprogramowania do mego bloga (który w wersji jaką miałem nie współpracował z RoR 1.2.1). Na szczęście, dzięki railsowym migracjom proces aktualizacji skryptów jak i struktury baz przebiegł bez problemów i niedestrukcyjnie dla danych w bazie. Typo”:http://trac.typosphere.org/ zawsze był kodem trochę awangardowym, wprowadzającym zaawansowane mechanizmy Rubiego i najnowsze pomysły Railsów. Przekonałem się o tym podczas próby modyfikacji paru szablonów. Typo zamiast dotychczasowego formatu ERb (*.rhtml) Typo używa już szablony nowej generacji – Haml. Chcąc niechcąc, musiałem przejść szybki kurs posługiwania się nimi aby zmodyfikować szablony w swoim blogu.

Moje pierwsze wrażenia są bardzo pozytywne. Wystarczyło mi parę minut aby ogarnąć składnię. Szablon bazowy (layout) mojego bloga wygląda teraz tak (zrzut ekranu z RadRails/Eclipse, który doczekał się już pluginu):

Może na początku to nie wydaje się czytelne, ale po paru minutach pracy z Haml widać, że kod jest znacznie bardziej przejrzysty i krótszy. Nie trzeba także zamykać tagów. Widać tu inspirację Pythonem, gdyż Haml używa dwóch spacji jako wyznacznika bloku. Ci, co patrzyli z niechęcią na pythonowe używanie wcięć do oznaczania bloków, będą musieli przejrzeć na oczy. :)

Hamlto skrót od “XHTML Abstraction Markup Language”. Został stworzony aby ułatwić tworzenie czystego, dobrze zagnieżdżonego kodu HTML. Haml umożliwia pełny dostęp do Rubiego i helperów Rails. Ale może być teoretycznie zastosowany jako wymiennik składni dla PHP czy JSP. Aktualnie Haml to młody projekt (powstał w maju 2006). Jest aktualnie używany tylko we frameworku Ruby on Rails.

Haml generuje kod XHTML (czyli zgodny z XML). Dba o odpowiednie wcięcia i zagnieżdżenia tagów. Zwykłe, ręczne tworzenie kodu HTML jest nie tylko podatne na błędy. Jest także mało czytelne. Jak do tego dodamy składnię ERb, to się robi jeszcze mniej czytelniej. Haml jest receptą zapewniającą pełny dostęp do wszystkich mechanizmów Rubiego i Railsów ale… bez zagnieżdżania kodu Rubiego w kodzie HTML. Zamiast mozolnie wklepywać tagi, Haml proponuje budowanie ich w znacznie przejrzysty sposób.

Instalacja

Haml jest dostępny w formie pluginu do Railsów.

./script/plugin install svn://hamptoncatlin.com/haml/tags/stable

Można też zainstalować Haml za pomocą gemsów:

gem install haml

Moim zdaniem Haml jest pierwszorzędnym kandydatem na zastąpienie głównych szablonów Railsów – RHTML. Chyba zacznę już przebudowywać wszystkie swoje szablony. :)

Appendix:

Haml są już przygotowane dla Jedita, Eclipse/RadRails, Textmate i (G)vim. Wysłałem informację na listę Komodo aby to też dodali.

Update 2007-01-29:

Przepisałem wszystkie szablony na mojej stronie do Haml. Są po prostu świetne.

Posted in  | Tagi , , ,  | 13 comments

Comments

  1. Avatar obcy powiedział about 4 hours later:

    sprawdzałeś może wydajność z i bez Haml’a?

  2. Avatar Piotr Usewicz powiedział about 8 hours later:

    Nie uzywamy juz @content_for_layout, tylko yield :layout :)

  3. Avatar Jarosław Zabiełło powiedział about 13 hours later:

    obcy: Nie sprawdzałem, ale z tego co piszą wynika że narzut wydajności jest mały, rzędu 5%. Haml są kompilowane raz (podobnie jak pehapowe Smarty) i potem już jest przetwarzany Ruby.

    Piotr: Tak, wiem, ale tak jest w oryginale kodu Typo i nie chciałem go zmieniać.

  4. Avatar obcy powiedział 1 day later:

    jakoś trudno mi uwierzyć, żeby tylko 5%, ale sprawdzę to kiedyś.

    Inną sprawą jest, że żaden designer nie skuma Haml’a. A jeśli nawet to nie będzie chciał z tym pracować.

    Moim zdaniem jedynym zastosowaniem Haml’a mogą być małe projekty w których designer i programista to ta sama osoba.

  5. Avatar Paweł Rutkowski powiedział 1 day later:

    obcy: zalezy jaki designer. Jak jest “css-enabled” to załapie szybko. Jak ja to pokazałem naszym “łebowcom”, to odrazu zauważyli selektory css i szybko to ogarneli. Nie zmienia to faktu ze jeszcze nie użyliśmy tego w żadnym komercyjnym projekcie :)

  6. Avatar Jarosław Zabiełło powiedział 1 day later:

    Problem może być tylko dla designerów uzależnionych od Dreamweavera. Jeśli jednak są to osoby kodujące ręcznie w HTML i CSS to z pewnością docenią piękno i prostotę składni Hamla.

  7. Avatar alfanick powiedział 4 months later:

    A propos – napisałem interpreter Hamla dla PHP 5http://phphaml.sourceforge.net

  8. Avatar Jima powiedział 5 months later:

    Szczerze mowiąc, pomysł średnio trafiony. Czytelność formularza zerowa, chyba że ktoś popracuje nad dodatkowymi wcięciami. Po wszystkich latach pracy z różnymi engine szablonów, jak na razie najbardziej spodobał mi się freemarker (dla Javy) i jego składnia. Ten cały Haml wydaje się być na dokładnie przeciwległym biegunie… Poza tym nie ma nic chwalebnego w kodowaniu stron “z palca”, co wydaje ci się najwyraźniej czynnikiem wyznaczającym prawdziwego designera (w odróżnieniu od tego co używa Dreamweavera). Szczerze mówiąc, ja też często najpierw tworzę szablon strony w czym wysiwygowym (ostatnio jest to Microsoft Expression, dostałem licencję za darmo więc nie marudzę, zwłaszcza że kod jest o niebo lepszy niż w używanym powszechnie w firmie FrontPage), po czym “ożywiam” stronę już “z palca” bo edycja wizualna mieszanych szablonów już kilka razy mi się źle skończyła, nawet gdy korzystałem z Dreamweavera. Tego typu potworki uniemożliwiają takie tworzenie, chyba że po napisaniu całej masy karkołomnych regexpów.

  9. Avatar Jarosław Zabiełło powiedział 5 months later:

    Nie zgadzam się. Haml są bardzo czytelne. Czytelniejsze od ERb i krótsze. Oczywiście, że służą do kodowania ręczniego. Rails potrafi współpracować z wieloma systemami szablonów jeśli ktoś ma inne upodobania.

    W wypadku korzystania z wizualnych wpomagaczy takich jak Dreamweaver, lepiej użyć szablonów MasterView, które logikę trzymają w atrybutach HTML. Są w ten sposób 100% przezroczyste dla designera operującego Dreamweaverem.

  10. Avatar Jarek powiedział 6 months later:

    Też uważam Haml za czytelne i proste w implementacji. Trzeba sie poprostu do nich przyzwyczajić ale myslę ,że warto.Właśnie myslę nad implementacją ich na mojej stronie Wyliczanka.pl

  11. Avatar Janusz 'Kali' Kaliszczak powiedział 6 months later:

    Czytelne, ale każdorazowa przeróbka statycznych template’ów w HTML-u do HAML-a jest kłopotliwa. Konserwacja i przeróbki takiego kodu również.

    RHTML jako mieszanina HTML-a z Ruby’m jest strawniejsza a i da się w miarę rozsądnie podejrzeć w przeglądarce.

  12. Avatar Uzytkownik powiedział 11 months later:

    @Jima: Wizualny design ma jedną podstawową wadę – jest oparty na wyglądzie a nie na znaczeniu. A tendencja jest teraz taka (co widać w rozwoju XHTML), że to mają być dane a CSS to opis wyglądu tych danych. Przez co można wstawić przykładowe dane, napisać pliki CSS i mieć gotową stronę(tzn. w teori się do tego dąży, ale nie zawsze jest tak różowo). Zmiana wyglądu strony (nie chodzi o wyświetlane informacje) to tylko podmiana plików CSS.

  13. Avatar Seobaglyak powiedział over 4 years later:

    Awesome article!Thanks for ur sharing…

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz