Artykuły:

  • data publikacji: 16.05.2010

    pHAML – inne spojrzenie na rozlazłego HTML’a

    kategoria: Skrypty server-side, XHTML/CSS autor: palmiak

    phaml

    Ostatnio chwaliłem się fajną zabawką do CSS, a mianowicie CSS Scaffold. Dziś zaś przyszła pora na zrobienie czegoś z HTML'em. HAML jest głównie znany osobom, które używają RoRa. Ja taką osobą nie jestem, więc przez długi czas omijałem temat szerokim łukiem.

    Jednak któregoś dnia szlag mnie trafił i postanowiłem coś w końcu zrobić, bo efekt mieszania php i HTML'a na dłuższą metę jest tragiczny. Człowiek się gubi gdzie się pętle zaczynają, gdzie kończą i ogólnie jest bajzel. Okazało się, że ktoś był na tyle miły, żeby przeportować HAMLa na php i tak oto powstał pHAML. W porównaniu z oryginałem są pewne różnice, jednak to co najważniejsze zostało zachowane.

    Pierwsze starcie

    Dzięki pHAML kod ulega dość imponującemu skróceniu. Dla przykładu zobaczmy różnicę między w 'Hello world':

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <title>hello</title>
    </head>
    <body>
    <p>Hello world</p>
    </body>
    </html>
     
    !!! Strict
    %html
        %head
            %title hello
        %body
            %p hello world
     

    Przeanalizujmy linijka po linijce.
    !!! Strict to nic innego jak doctype (koniec kopiowania tego cholerstwa za każdym razem)
    %html %head etc - po prostu tagi, tyle że zamiast ich zamykać używamy wcięć.

    Na pierwszy rzut wygląda to dziwnie, ale chwila wprawy i zaczyna być fajnie.

    Parametry

    Przekazywanie parametrów odbywać się może na kilka sposobów. Najbardziej uniwersalnym jest:

    %p{class="jaka_klasa jakas_inna_klasa" id="unikalny_id" style="color:red"}
     

    Jak się zapewne domyślacie w rezultacie otrzymamy:

    <p class="jaka_klasa jakas_inna_klasa" id="unikalny_id" style="color:red"></p>
     

    Klasy i idy możemy jednak przekazywać w troszkę krótszej formie:

    %p.jaka_klasa.jakas_inna_klasa#unikalny_id{style="color:red"}
     

    Po prostu po kropkach wymieniamy klasy a po # id.

    Pewnym wyjątkiem jest div, gdzie nie trzeba pisać nazwy taga:

    .jaka_klasa.jakas_inna_klasa#unikalny_id{style="color:red"}
     

    jest równoznaczne z:

    %div.jaka_klasa.jakas_inna_klasa#unikalny_id{style="color:red"}
     

    Kilka przykładów na potwierdzenie, że HAML fajny jest

    Do myków, które mi się strasznie podobają należą na pewno listy:

    %ul
                %li raz
                %li dwa
                %li trzy
                %li
                    %ul
                        %li trzy jeden
     

    W końcu wygląda to czytelnie, szczególnie zagnieżdżenia.

    Bardzo przyjemnie wyglądają też tabele:

    %table
                %tr
                    %th id
                    %th imię
                    %th nazwisko
                %tr
                    %td 1
                    %td maciek
                    %td kowalski
                %tr
                    %td 2
                    %td andrzej
                    %td nowak
     

    Znaki specjalne

    \ - wyświetla wiersz dosłownie taki jaki jest.
    <<< oraz >>> - wyświetla zawartość dokładnie taką jaką jest znajdującą się między tymi znakami
    / - zamienia wiersz na typowy htmlowy komentarz
    // - komentarz, ale niewidzoczny w htmlu

    A jak tu php wrzucić?

    Najprościej mówiąc - za pomocą myślnika:

    - for($x=1; $<=1 ;$x++ {
       %p hello
    - }
     

    to nic innego jak:

    <?php for($x=1; $<=1 ;$x++ { ?>
    <p>hello</p>
    <?php } ?>
     

    Jednak różnica jeśli chodzi o czytelność dość spora.

    Wywoływanie

    Pokazałem już jak pisanie w HAMLu wygląda, teraz czas to jakoś uruchomić. Najpierw pobieramy ze strony twórcy odpowiednie archiwum. Następny krok to rozpakowanie zipa.

    Kiedy już wszystko mamy przygotowane tworzymy sobie plik np test.php a w nim piszemy:

    <?php include('class.pHAML.php');
    $template ='!!! Strict
    %html
        %head
            %title hello
        %body
            - for($i=0;$i<=10;$i++){
                %p
                    - echo $i."<br/>";
            - }
    '
    ;
    $pHAML = new HAMLatin();
    $content = $pHAML->render($template);
    $content = $pHAML->renderPHP($content);
    echo $content;
     

    Całą treść przypisujemy sobie do jakiejś zmiennej a potem przekazujemy jako parametry dla render i renderPHP.

    Jeżeli uzywamy tylko htmla, nie jest potrzebna linijka $content = $pHAML->renderPHP($content);.

    Zachęcam do zabawy, bo wywoływanie tego można zrobić na wiele wygodniejszych sposobów.

    Drobne bugi

    Wersja dostępna na phaml.sourceforge.net ma w sumie dwie wady. Jedna to taka, że wszystkie tagi traktuje jako podwójne, a druga, że stosuje notację htmlową, a nie xhtmlową.

    Na szybko poprawiłem te dwie rzeczy i tagi pojedyncze zamyka poprawnie, a kwestię html/xhtml rozwiązałem poprzez dopisanie zmiennej $is_xhtml. Uprzedzam, że były to poprawki na szybko lecz nie zauważyłem żeby coś nie działało/działało źle. Plik do pobrania stąd.

    Podsumowanie

    Muszą przyznać, że (p)HAML jest fajnym wynalazkiem. Strasznie upraszcza widok HTMLa. Szkoda jednak, że pod PHP nie ukazała się żadna porządna i ciągle rozwijana implementacja (ta prezentowana tutaj nie sprawia już wrażenie rozwijanej) Pod tym względem muszę przyznać, że jest to coś czego programistom od Ruby'ego można pozazdrościć.

    A Wy jakie znacie i polecacie substytuty zwykłego (x)HTML'a?

    Udostępnij ten artykuł:
    • Print
    • Digg
    • del.icio.us
    • Facebook
    • Mixx
    • Google Bookmarks
    • Gwar
    • RSS
    • Technorati
    • Twitter
    • Wykop

    Tagi:,
  • 12 Responses to “pHAML – inne spojrzenie na rozlazłego HTML’a”

    1. [...] This post was mentioned on Twitter by vivee.info. vivee.info said: pHAML – inne spojrzenie na rozlazłego HTML'a http://bit.ly/d3jItN [...]

    2. Ciekawa idea, tylko co będzie np. z cache'owaniem wyników takiego "przetwarzania? I jak jest z wydajnością w stosunku do "natywnego" HTMLa?

    3. palmiak pisze:

      Cache'owania w samej klasie nie ma. Trzeba dopisać lub użyć gotowca. W przypadku gdy dopiszemy cache'owanie problem wydajności możemy pominąć, w przeciwnym dostaniemy troszkę w kość (konkretnych wartości przyznam, że nie znam).

    4. Michał pisze:

      osobiście jednak pozostanę przy systemach szablonów. Tworzenie kolejnego pseudo-języka tylko utrudnia i wydłuża czas realizacji projektu. Tym bardziej, że w klasie tak naprawdę nie ma żadnego wbudowanego systemu cache'owania.

      Już widzę zadowolenie moich pracowników na informację o stosowaniu pHAML'a w projektach…

      • palmiak pisze:

        Dlatego tego typu rzeczy można wprowadzać gdy pisze się samemu, albo po uzgodnieniach z zaspołem. I po dopsianiu cache'owania.

      • PSV90 pisze:

        Fajne…
        I na pewno nie jest to kolejny PSEUDOjęzyk, bo jesli znasz HTMLa znasz pHAMLa, zamiast

        piszesz %p i już :)
        Szkoda że nie jest juz rozwijane ;)

    5. @Michał – gdyby to byłą warstwa pomocnicza, coś na kształt "renderowania" HTMLa na żywo przy pomocy JS, to pewnie przydałoby się do tworzenia np. helperów, ale jako rozwiązanie całościowe – z czym się zgadzam – odpada.

      • Piotrek pisze:

        ja polecam zen-coding po prostu. przerost formy nad treścią w tym momencie, zgadzam się z przedmówcami.

    6. Testowy wpis…

      Spodobał mi się Twój artykuł, umieściłem Trackbacka na swoim blogu do tego wpisu….

    7. Ja przez jakiś czas z kolei zachwycałem się Xt, gdzie do zagadnienia podchodzi od zupełnie innej strony – operuje się oddzielnie na czystym (x)HTMLu, bez żadnego pseudojęzyka, a tylko z klasami i id, oraz na php, gdzie przez te klasy i id ma się do htmla dostęp. Jako że całość opiera się na parsowaniu xmla, jest to naprawdę szybkie, do tego stopnia że eksperymentalna wersja z cache, przygotowana przez autora… nie przyniosła żadnej zmiany wydajności. ;)

      Szkoda, że projekt nie jest już rozwijany, i to chyba od dobrych paru latek… :(

    8. Parthena pisze:

      I’m impesresd! You’ve managed the almost impossible.

    Leave a Reply

Komentarze

Kategorie

Top 10

  • CMSy Artykuły dotyczące różnego rodzaju systemów zarządzania treścią CMS.
  • Flash Podstawowe informacje pomocne przy tworzeniu animacji w Adobe Flash.
  • Fotografia Samouczki dotyczące nie tylko robienia zdjęć ale też ich cyfrowej obróbki.
  • Grafika Ogólnie pojęta grafika komputerowa, od inspiracji, po tworzenie layoutów oraz mniejszych form graficznych.
  • Inne tutoriale wordpressowe Wszystkie inne zagadnienia dotyczące WordPressa.
  • Inspiracje Inspirujące materiały graficzne z dziedziny projektowania stron www, projektów DTP, digital painting, itp.
  • Obróbka zdjęć Techniki retuszu fotografii cyfrowych.
  • Rysunek Tworzenie rysowanych ilustracji w Adobe Photoshop.
  • Skóry do Wordpressa Darmowe oraz płatne – najlepsze skóry do WordPressa.
  • Skrypty client-side
  • Skrypty server-side
  • Tutoriale
  • Webdesign Tutoriale z zakresu projektowania stron www i grafiki użytkowej na rzecz internetu.
  • Wieczór z Open Source
  • Wordpress Ulubieniec naszej publiczności CMS WordPress: nowości, tricki, wtyczki, skóry i wszystko to co może przydać się przy korzystaniu z tego systemu.
  • Wtyczki do Wordpressa Recenzje oraz instrukcje najbardziej popularnych i najbardziej niezbędnych pluginów do WordPressa.
  • XHTML/CSS Ciekawostki z dziedziny kodowania stron www: XHTML, CSS, jQuery.

Najnowsze newsy

Wieczór z Open Source 2010

Jak co roku WSINF organizuje konferencję Wieczór z Open Source.
Chciałbym zaprosić was na tegoroczna konferencję Wieczór z Open Source 2010! Czytaj dalej

Grafart.org i WACOM zapraszają na konkursy!

Witam!

Myślę, że czas najwyższy nadmienić, że za niedługi czas zostanie zorganizowany pierwszy z trzech konkursów, w których główną nagrodą będą tablety firmy WACOM!
Za miejsca drugie oraz trzecie nagrodami będą kubki i koszulki firmy WACOM oraz magazyny graficzne PSD PHOTOSHOP oraz COMPUTERARTS.
Czytaj dalej

Zapraszamy na forum graficzne Graffika.pl

Każda osoba interesująca się grafiką komputerową ma czasami ochotę porozmawiać o swoich pracach, posłuchać rad, krytyki i pochwał innych osób. Idealnym miejscem na realizowanie takich potrzeb jest forum graficzne Graffika.pl.
Czytaj dalej

Polecane strony

  • No bookmarks avaliable.