PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Abstraktes HTML mit HAML

Haml LogoNein. Es ist kein Hase, es ist ein Haml. Gerade über dieses erstaunliche Projekt gestolpert, muss ich es auch gleich mal bloggen. Was ist Haml? Und was macht es?

Haml ist eine Abstraktions-Auszeichnungssprache für Webfrontends, original entworfen für Ruby. Es erinnert mich an einen Mix aus CSS, Yaml und TextilePHP… Mit anderen Worten: Man beschreibt anhand strukturierter Ausdrücke den Aufbau einer HTML-Datei:

%h2 Überschrift
  %ul
    %li Eintrag 1
    %li Eintrag 2

wird zu:

<h2>Überschrift</h2>
<ul>
  <li>Eintrag 1</li>
  <li>Eintrag 2</li>
</ul>

Im Haml-Labor kann man ein bisschen mit der Syntax rumspielen. Aber Haml kann noch ein bisschen mehr. Auch logische Verzweigungen und Schleifen sind möglich.

So kann man das:

<html><head>
<?php if ($title) { ?>
<title><?php echo $title; ?></title>
<?php } else { ?>
<title><?php echo $pagename; ?></title>
<?php } ?>
</head>
<body>
<div id=”header”>
<h1><?php echo $pagename; ?></h1>
<?php if ($slogan) { ?>
<span><?php echo $slogan; ?></span>
<?php } ?>
</div>

durch folgenden Haml-Code ersetzen:

%html%head
- if ( $title)
%title= $title
- else
%title= $pagename
%body
#header
%h1 Example page
- if ($slogan)
%span= $slogan

Etwas übersichtlicher wirkt es ja schon, dieses Haml. Aber würde nicht auch der PHP Fetzen besser aussehen, wenn man ihn ein wenig mit Einrückungen und Blanks verziert?

Und wie kommen die echten Werte jetzt in die Haml-Variablen? Hier hilft das PHP Projekt “phpHaml” von Amadeusz Jasak weiter. Er stellt eine gut dokumentierte Klasse zur Verfügung, mit deren Hilfe man Haml-Templates parsen und in HTML umwandeln kann.

Trotzdem bin ich von diesem Logik-Gerammel in Templates nicht sonderlich begeistert. Immerhin bietet Haml eine Alternative zum PHP-Tag Geraffel in Templates, ob es übersichtlicher ist? Ich behaupte nein, aber es möge auch andere Stimmen geben.

Wer auf Haml aufsetzt sollte daran denken, dass es wie jede andere Templatesprache erstmal geparst werden muss. Und wenn der Parser selbst von einem Parser geparst wird, dann verschenkt man eben wertvolle Millisekunden.

Geschmacksache. Wie so oft.

Ähnliche Artikel:

  1. Slimbox auf deutsch
  2. 1996: Mein erstes HTML Buch
  3. Archiv und Suche
  4. Bröckchen für Bröckchen
  5. Die besten Artikel

Philip meint dazu:

26. Oktober 2007 um 14:31

Ich hoffe mal, dass der Editor hier nicht die Leerzeichen zerfetzt, aber ich finde unten genanntes auch relativ lesbar. Gut mag ein Unterschied sein, wenn man damit jeden Tag zu tun hat. Aber ich denke mal, dass jemand der sich in HAML einliest sich auch gleich in PHP einlesen kann und damit am Ende wahrscheinlich besser fährt. Zumal sich mir schon mit YAML so einige Schwachstellen im wirklich produktiven Einsatz aufgetan haben.

[...]

Philip meint dazu:

26. Oktober 2007 um 14:35

Hmm super der Code schluckt alle HTML-Tags einfach weg, anstatt sie zu encoden…. super. Also hier nochmal und bitte alle ‘#’ durch ” (im Kopfe) ersetzen.

#html#
#head#
#?php if ($title) :?#
#title##?=$title;?##/title#
#?php else : ?#
#title##?=$pagename;?##/title#
#?php endif; ?#
#/head#
#body#
#div id=”header”#
#h1##?=$pagename;?##/h1#
#?php if ($slogan) : ?#
#span##?=$slogan;?##/span#
#?php endif; ?#
#/div#
[...]

loci meint dazu:

29. Oktober 2007 um 10:24

wie waers denn einfach mit datenhaltung in xml und einer wandlung via xslt?
dazu gibts saubere spezifikationen und jede moderne programmiersprache kann die transformation durchfuehren.
immer wieder solche proprietaeren ansaetze welche nur dinge abbilden, die es schon lange gibt.

insel meint dazu:

31. Oktober 2007 um 17:28

sieht auf den ersten blick etwas komisch aus, zumindest fallen mir auf anhieb keine einsatzmöglichkeiten ein, wo man mit anderen technologien nicht genauso gut vorankommt (auch wenn zB xslt auch nicht gerade das gelbe vom ei ist und hoffentlich bald durch etwas zeitgemäßes ersetzt wird),

andererseits scheint haml ja eigentlich für ruby-on-rails gedacht zu sein und ERB, wo ich mir schon eher einen vorteil dadurch vorstellen kann…

bei php würde es fürst erste reichen die dämlichen $-zeichen wegzubekommen….würde viele coder-finger freuen….is natürlich nur meine meinung ;)

loci meint dazu:

5. November 2007 um 08:35

@insel: was findest du an xslt denn nicht zeitgemaess?

fd meint dazu:

23. November 2007 um 15:28

Wenn ihr den Sinn von haml nicht versteht, dann schaut euch doch mal staticmatic an!

butzi meint dazu:

22. April 2008 um 16:18

Die Templatesprachen sind ja eher gedacht, dass ein Programmierer, am umgesetzten Design mit seinen normalen Tools weiter Änderungen vornehmen und die Pixel rumschubsen kann.

Mit HAML geht der Gedanke irgendwie verloren und man kann es gleich sauber einprogrammieren. Suchen und Ersetzen kann man auch mit PHP (str_replace) das sollte immernoch effizienter sein.

timi meint dazu:

22. April 2008 um 16:49

Na klar, hat vor und Nachteile. Man sollte aber nie vergessen, dass PHP die Templatesprache selbst ist.

Marc Weber meint dazu:

24. März 2011 um 13:47

HAML ist eine DSL (domain specific language). Sie werden erfunden um das Leben einfacher zu gestalten. SQL ist auch ein Beispiel. zB bietet PHP viele verschieden Funktionen an um Text zu escapen, so dass HTML nicht durcheinander gebracht wird. Im Laufe der Zeit findet man dann verschiedene Vorgehensweisen im gleichen Projekt: Mal gar nicht escaped, mal mit und mal ohne UTF-8 Support, …. Es gibt einfach zu viele Möglichkeiten was falsch zu machen. Der gute Programmierer will diese Fehlerquellen loswerden und schreibt statt

nunmal einfach lieber:

%div=$text

und konfiguriert “utf-8″ einmal in der setup.php Datei. Darum gehts bei HAML.

http://haml-to-php.com schreibt die kurze, elegante HAML Schreibweise in PHP Code um. Damit wird praktisch die Geschwindigkeit von von Hand optimiertem PHP Code erreicht. Zusätzlich ist sichergestellt, dass alle Tags die geöffnet wurden auch wieder an der richtigen Stelle geschlossen werden.

Marc Weber meint dazu:

24. März 2011 um 13:51

Das mein Text oberhalb von “nunmal einfach lieber” entfernt wurde legt nahe, dass bei diesem Blog entweder aus Sicherheitsgründen Text entfernt wurde, oder aber hier ein Sicherheitsproblem vorliegen könnte.. Ein Grund mehr ein Template System wie HAML zu verwenden.

Ich hatte geschrieben:
div (?php echo htmlentities(text,..,’utf-8′); ) /div

Schreibweise habe Ich absichtlich verändert, so dass dieses Mal der Text hoffentlich akzeptiert wird.

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung