Szablony dla Railsów
Posted by Jarosław Zabiełło Thu, 22 Mar 2007 02:05:00 GMT
Tak ostatnio zrobiłem sobie przegląd szablonów do Railsów i sytuacja wygląda dosyć ciekawie. Standardowo Rails korzysta z 3 typów szablonów.
- ERb – dla plików z końcówką .rhtml, podstawowe szablony zagnieżdżające Rubiego w HTML. Generują oczywiście kod HTML.
- RXML – do generowanie kodu XML, np. dla kanałów RSS. Właściwie to trudno nazwać je szablonami bo ich składnia to 100% kod Rubiego wykorzystujący bibliotekę Builder.
- RJS – do generowania kodu JavaScript i do Ajaksa. To też nie jest jakaś inna składnia. To czysty Ruby.
Pomijając RXML i RJS, można użyć dodatkowych szablonów dostępnych poprzez system pluginów do Railsów. Co ciekawe, w niektórych przypadkach, nie trzeba wszystkiego wymieniać, można je stosować obok starych szablonów. Tak robię w wypadku szablonów Haml. Po prostu jak dodam plik z rozszerzeniem .haml to Rails użyje jego zamiast pliku z końcówką .rhtml. W niczym to oczywiście nie przeszkadza. Można w ten sposób łatwo i przyjemnie, krok po kroku, wymienić szablony tam, gdzie mamy ochotę.
- Erubis – dużo szybsza wersja ERb, powinny zastąpić standardowe ERb.
- Haml – moje ulubione, opisywałem już je wczesniej
- Markaby – HTML budowany w czystym Ruby
- MasterView – zgodne z XML, przypominają miejscami składnię używaną przez ASP.NET
- Liquid – wzorowane na Django, ale o mniejszych możliwościach (np. nie mają dziedziczenia)
Na koniec słowo opdnośnie aktualizacji Rubiego.
Osoby chcące używać nowego Ruby 1.8.6 muszą zaktualizować Rails do 1.2.3. Z pewnymi problemami udało mi się jednak zaktualizować kod dla bloga i mojej strony domowej. Jeśli ktoś używa szablonów Haml i pluginu Globalize, to musi uważać. W Globalize, do tabeli globalize_translations, dodano nowe pole namespace o typie VARCHAR. Musi ono tam być, bo inaczej plugin źle działa. Z kolei nowy Haml odrzucał skrócony zapis div’ów (za pomocą kropki) Musiałem poprawić szablon.


Kanały IRC![[Dilber w Onecie]](/images/larry.png)


Tu jest lista 19 różnych bibliotek do Rubiego.