<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag haml)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Netzleben, Rettungs- und Rechtswesen</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Mon, 31 Jul 2017 05:31:06 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Netzleben, Rettungs- und Rechtswesen</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Markup mit HAML</title>
    <link>https://netz-rettung-recht.de/archives/1990-Markup-mit-HAML.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1990-Markup-mit-HAML.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1990</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1990</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Websites bestehen - hoffentlich - in der Regel aus (wenigen) Templates, die dann mit (vielen verschiedenen) Inhalten gefüllt werden. So arbeiten Blogs und CMS, so arbeitet auch ein &lt;em&gt;static site generator&lt;/em&gt;. Die Templates können dabei HTML-Dateien sein - müssen es aber nicht, wie ich schon anno 2015&amp;#160;&lt;a href=&quot;https://netz-rettung-recht.de/archives/1821-Templates-und-Template-Engines.html&quot; title=&quot;&quot;&gt;beschrieb&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Bei der Arbeit mit meinen Webseiten habe ich mit HTML-Templates angefangen, die ich dann in der Regel mit &lt;i&gt;Markdown&lt;/i&gt; gefüllt habe - oder, um in der Diktion von &lt;i&gt;nanoc&lt;/i&gt;, dem von mir verwendeten &lt;em&gt;static site generator&lt;/em&gt;, zu bleiben: die Layouts in &lt;code&gt;layouts/&lt;/code&gt; waren HTML-Dateien, die Inhalte in &lt;code&gt;content/&lt;/code&gt; in der Regel &lt;i&gt;Markdown&lt;/i&gt;, beides (soweit erforderlich) kombiniert mit &lt;em&gt;embedded ruby&lt;/em&gt; (&lt;em&gt;ERB&lt;/em&gt;). Beim Compilieren durchliefen die Layouts dementsprechend einen &lt;em&gt;ERB&lt;/em&gt;-Filter, die Inhalte zwei Filter (&lt;i&gt;Markdown&lt;/i&gt; und &lt;em&gt;ERB&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Direkt mit HTML macht die Arbeit aber - gerade bei ein wenig komplexeren Gestaltungen - auf die Dauer nur wenig Spaß: ständig muss man Tags öffnen und schließen (gut, dabei unterstützen Editoren), und die Übersicht leidet. Daher habe ich mich nach kurzer Zeit entschieden, statt auf HTML auf &lt;a href=&quot;http://haml.info/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;i&gt;HAML&lt;/i&gt;&lt;/a&gt; zu setzen, eine Template-Sprache, die von HTML abstrahiert.&lt;/p&gt;

&lt;p&gt;Ein typisches Seitengerüst wie&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&#039;de&#039;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&#039;utf-8&#039;&amp;gt;
    &amp;lt;meta content=&#039;IE=edge&#039; http-equiv=&#039;X-UA-Compatible&#039;&amp;gt;
    &amp;lt;meta content=&#039;width=device-width, initial-scale=1&#039; name=&#039;viewport&#039;&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;%= @item[:title] %&amp;gt;&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;header&amp;gt;
      &amp;lt;div class=&#039;header-container&#039;&amp;gt;
        &amp;lt;div class=&#039;row&#039;&amp;gt;
           [...]
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/header&amp;gt;
    &amp;lt;div class=&#039;main&#039;&amp;gt;
      &amp;lt;h1&amp;gt;Überschrift&amp;lt;/h1&amp;gt;
      &amp;lt;p&amp;gt;
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
        diam nonumy eirmod tempor invidunt ut labore et dolore magna
        aliquyam erat, sed diam voluptua. At vero eos et accusam et
        justo duo dolores et ea rebum. Stet clita kasd gubergren, no
        sea takimata sanctus est. 
      &amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;footer class=&#039;footer&#039;&amp;gt;
      [...]
    &amp;lt;/footer&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;sieht in &lt;i&gt;HAML&lt;/i&gt; so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;!!!
%html{:lang =&amp;gt; &quot;de&quot;}
  %head
    %meta{:charset =&amp;gt; &quot;utf-8&quot;}
    %meta{:content =&amp;gt; &quot;IE=edge&quot;, &quot;http-equiv&quot; =&amp;gt; &quot;X-UA-Compatible&quot;}
    %meta{:content =&amp;gt; &quot;width=device-width, initial-scale=1&quot;, :name =&amp;gt; &quot;viewport&quot;}
    %title #{@item[:title]}
  %body
    %header
      .header-container
        .row
          [...]
    .main
      %h1 Überschrift
      %p
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
        diam nonumy eirmod tempor invidunt ut labore et dolore magna
        aliquyam erat, sed diam voluptua. At vero eos et accusam et
        justo duo dolores et ea rebum. Stet clita kasd gubergren, no
        sea takimata sanctus est. 
    %footer
      [...]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ist kürzer, klarer strukturiert - und die logische Struktur wird unmittelbar erkennbar. Außerdem wird das Ende eines Elements nicht durch ein schließendes Tag, sondern das Zeilenende (beziehungsweise das Ende einer Einrückungsebene) gekennzeichnet. &lt;i&gt;HAML&lt;/i&gt; schließt Tags im generierten HTML daher selbständig. Nie mehr vergessene Tags, die sich öffnen, aber nicht wieder schließen! Fehler kann man im Prinzip nur noch beim Einrücken machen - aber fehlerhafte Einrückungen führen zu einem Fehler beim Compilieren und werden daher sofort erkannt. Zudem erhält das aus dem Template generierte HTML wunderbare Einrückungen, die es ebenfalls gut lesbar machen.&lt;/p&gt;

&lt;p&gt;Für Templates ist &lt;i&gt;HAML&lt;/i&gt; demnach hervorragend geeignet - für Inhalte allerdings &lt;a href=&quot;http://chriseppstein.github.io/blog/2010/02/08/haml-sucks-for-content/&quot; title=&quot;Haml Sucks for Content&quot;&gt;nicht so sehr&lt;/a&gt;. Die große Stärke - die klaren Einrückungen - wird bei Texten, die immer wieder innerhalb von Blöcken Textauszeichnungen enthalten, zu einer großen Schwäche.&lt;/p&gt;

&lt;p&gt;Man denke an folgendes Beispiel:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
  Lorem ipsum dolor sit amet, consetetur &amp;lt;strong&amp;gt;sadipscing&amp;lt;/strong&amp;gt;
  elitr, sed diam nonumy eirmod tempor invidunt ut labore et
  &amp;lt;em&amp;gt;dolore magna&amp;lt;/em&amp;gt; aliquyam erat, sed diam voluptua. At
  &amp;lt;a href=&quot;https://netz-rettung-recht.de/vero/&quot;&amp;gt;&amp;lt;strong&amp;gt;vero&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; eos et accusam et justo duo
  dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus
  est. 
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das sieht in &lt;i&gt;HAML&lt;/i&gt; dann so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;%p
  Lorem ipsum dolor sit amet, consetetur
  %strong sadipscing
  elitr, sed diam nonumy eirmod tempor invidunt ut labore et
  %em dolore magna
  aliquyam erat, sed diam voluptua. At
  %a{:href =&amp;gt; &quot;/vero/&quot;}
    %strong vero
  eos et accusam et justo duo
  dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
  sanctus est.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ist &amp;#8230; weniger schön, und beim Schreiben nicht mehr angenehm, sondern schnell die Hölle.&lt;/p&gt;

&lt;p&gt;Es fragt sich also, was man am besten tut, wenn &lt;i&gt;Markdown&lt;/i&gt; allein für Inhalte nicht genügt, weil es bspw. keine Elemente wie &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; oder &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; kennt und auch Tabellen nicht ohne weiteres abgebildet werden können. Man könnte natürlich wieder auf HTML zurückgreifen, das sich bekanntlich mit &lt;i&gt;Markdown&lt;/i&gt; mischen lässt.&lt;/p&gt;

&lt;p&gt;Oder man nutzt ein weiteres Feature von &lt;i&gt;HAML&lt;/i&gt;: es unterstützt nämlich Filter, d.h. die Verwendung anderer Markupsprachen innerhalb eines Templates. So kann man die Verwendung von &lt;i&gt;HAML&lt;/i&gt; auf die Templates und Strukturen beschränken und die Inhalte - bspw. - in &lt;i&gt;Markdown&lt;/i&gt; beisteuern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  %body
    %header
      .header-container
        .row
          [...]
    .main
      %h1 Überschrift
      :markdown
        Lorem ipsum dolor sit amet, consetetur **sadipscing** elitr,
        sed diam nonumy eirmod tempor invidunt ut labore et *dolore
        magna* aliquyam erat, sed diam voluptua. At [**vero**](/vero/)
        eos et accusam et justo duo dolores et ea rebum. Stet clita
        kasd gubergren, no sea takimata sanctus est.
    %footer
      [...]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Best of both worlds!&lt;/p&gt;

&lt;p&gt;Außerdem unterstützt &lt;i&gt;HAML&lt;/i&gt; &lt;em&gt;embedded ruby&lt;/em&gt; - statt HTML-Templates und &lt;i&gt;Markdown&lt;/i&gt;-Inhalten bleiben also nur noch &lt;code&gt;.haml&lt;/code&gt;-Dateien, die einen &lt;i&gt;HAML&lt;/i&gt;-Filter durchlaufen. Fertig - &lt;i&gt;Markdown&lt;/i&gt; und &lt;em&gt;ERB&lt;/em&gt; gibt es quasi gratis dazu. (Und &lt;i&gt;Textile&lt;/i&gt;, LESS, SASS und vieles andere, wenn man das möchte, auch.)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/151573aa979b477cb6673642efd6dcaf&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 08 May 2017 07:15:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1990-guid.html</guid>
    <category>haml</category>
<category>markdown</category>
<category>webdesign</category>

</item>
<item>
    <title> Markup-Formate konvertieren</title>
    <link>https://netz-rettung-recht.de/archives/1823-Markup-Formate-konvertieren.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1823-Markup-Formate-konvertieren.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1823</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1823</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;In meiner Reihe &amp;#8220;&lt;a href=&quot;https://netz-rettung-recht.de/archives/1810-Webdesign-anno-2015.html&quot; title=&quot;&quot;&gt;Webdesign anno 2015&lt;/a&gt;&amp;#8221; habe ich versucht, einen Überblick über Techniken und Tools zu geben, die letztlich jedermann die Gestaltung moderner, gut aussehender Webseiten ermöglichen. Das hatte natürlich einen konkreten Anlass: ich bin dabei, allmählich und sehr langsam - im Rahmen der mir bleibenden zeitlichen Möglichkeiten - verschiedene ältere Webpräsenzen zu überarbeiten und inhaltlich wie optisch und technisch auf den heutigen Stand zu bringen.&lt;/p&gt;

&lt;p&gt;Eine große Erleichterung ist dabei die automatische Konvertierung von &amp;#8220;klassischem&amp;#8221; &lt;em&gt;HTML&lt;/em&gt; in &lt;em&gt;HAML&lt;/em&gt; und/oder &lt;em&gt;Markdown&lt;/em&gt;. Ein machtvolles Werkzeug für solche Konvertierungsaufgaben ist &lt;a href=&quot;http://johnmacfarlane.net/pandoc/&quot; title=&quot;302 Found&quot;&gt;&lt;strong&gt;pandoc&lt;/strong&gt;&lt;/a&gt;; es geht aber oft auch eine Nummer kleiner, ganz simpel per &lt;em&gt;cut &amp;amp; paste&lt;/em&gt; online:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://htmltohaml.com/&quot; title=&quot;htmltohaml - htmltohaml&quot;&gt;Convert HTML to HAML&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;HTML&lt;/em&gt; zu &lt;em&gt;Markdown&lt;/em&gt; konvertieren:&lt;br /&gt;
&lt;a href=&quot;https://domchristie.github.io/to-markdown/&quot; title=&quot;Site not found &amp;middot; GitHub Pages&quot;&gt;to-markdown&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wenn nur eine Handvoll Seiten - oder Teile einer Seite - zu konvertieren sind, reicht (mir) das vollständig aus.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 16 Feb 2015 05:55:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1823-guid.html</guid>
    <category>haml</category>
<category>markdown</category>
<category>webdesign</category>

</item>
<item>
    <title>Templates und Template Engines</title>
    <link>https://netz-rettung-recht.de/archives/1821-Templates-und-Template-Engines.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1821-Templates-und-Template-Engines.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1821</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1821</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&lt;em&gt;HTML&lt;/em&gt; und &lt;em&gt;CSS&lt;/em&gt;, Frameworks wie &lt;em&gt;Bootstrap&lt;/em&gt;, &lt;em&gt;Web&lt;/em&gt;- und &lt;em&gt;Iconfonts&lt;/em&gt;, &lt;em&gt;LESS&lt;/em&gt; oder &lt;em&gt;SASS&lt;/em&gt; bieten viele Möglichkeiten zur Gestaltung standardkonformer, gut lesbarer und auf verschiedenen Endgeräten nett anzusehender Webseiten. Eine größere Webpräsenz komplett &amp;#8220;von Hand&amp;#8221; zu pflegen macht allerdings wenig Spaß - und ist auch alles andere als professionell oder eine gute Idee.&lt;/p&gt;

&lt;p&gt;Denn regelmäßig ist eine Website oder auch eine Webapplikation gekennzeichnet durch ein &amp;#8220;Grundkorsett&amp;#8221;, das mit wechselnden Inhalten gefüllt wird. So wird sich meist ein einheitliches Gestaltungskonzept mit Kopf- und/oder Fußzeile, mit einer oder mehreren Spalten und einer Navigation auf allen Seiten wiederfinden. Dieses Grundgerüst der ganzen Webpräsenz sollte sich dann nicht per &lt;em&gt;copy &amp;amp; paste&lt;/em&gt; auf jeder Einzelseite wiederholen, sondern vielmehr in Form einer Vorlage, eines &lt;em&gt;Templates&lt;/em&gt;, vorliegen, um dann jeweils mit spezifischen Inhalten gefüllt zu werden. Auch ist es - gerade bei Webapplikationen - sinnvoll, die &amp;#8220;Technik&amp;#8221; von der &amp;#8220;Darstellung&amp;#8221; zu trennen, damit Änderungen am Design nicht zwingend Änderungen an der Programmierung erfordern und umgekehrt. (Und, natürlich, damit verschiedene Teams an der optischen Darstellung der Seiten und der dahinterstehenden Programmlogik arbeiten können).&lt;/p&gt;

&lt;p&gt;Auf diese Art und Weise arbeiten bspw. Blogsysteme wie &lt;em&gt;Wordpress&lt;/em&gt; (mit eigenen Template-Funktionen) oder &lt;em&gt;Serendipity&lt;/em&gt; (wo das Template-System &lt;a href=&quot;http://www.smarty.net/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Smarty&lt;/em&gt;&lt;/a&gt; genutzt wird) und natürlich auch &lt;em&gt;Content Management Systeme&lt;/em&gt; (CMS) oder &lt;em&gt;static site generators&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Das Prinzip ist immer gleich: ein Grundgerüst und mögliche Inhalte werden getrennt definiert, wobei das Grundgerüst oft aus einer &lt;em&gt;HTML&lt;/em&gt;-Datei besteht. In dieser (&lt;em&gt;HTML&lt;/em&gt;-) Datei können Platzhalter (Variablen) durch passenden Text ersetzt und andere Dateien eingebunden werden, Codefragmente (in einer Programmiersprache wie &lt;em&gt;Perl&lt;/em&gt;, &lt;em&gt;PHP&lt;/em&gt;, &lt;em&gt;Python&lt;/em&gt; oder &lt;em&gt;Ruby&lt;/em&gt; und/oder in einer speziellen Template-Sprache) eingebaut und/oder sogar statt &lt;em&gt;HTML&lt;/em&gt; andere Auszeichnungssprachen verwendet werden. Das kann &amp;#8220;dynamisch&amp;#8221; bei jedem Aufruf der Seite erfolgen, ggf. mit Caching, oder die Webseiten können einmal aus ihren Quelltexten generiert werden und dann &amp;#8220;statisch&amp;#8221; online gestellt - und nur bei Änderungen aktualisiert - werden.&lt;/p&gt;

&lt;h3 id=&quot;einbindung-von-script-programmiersprachen-in-html-dokumente&quot;&gt;Einbindung von Script-/Programmiersprachen in &lt;em&gt;HTML&lt;/em&gt;-Dokumente&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://php.net/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;PHP&lt;/em&gt;&lt;/a&gt; ist an und für sich - und ganz ursprünglich - selbst eine &lt;em&gt;Template Engine&lt;/em&gt;. In eine &lt;em&gt;HTML&lt;/em&gt;-Datei werden &lt;em&gt;PHP&lt;/em&gt;-Fragmente eingebunden und die Webseite auf diese Weise dynamisiert. In ähnlicher Weise funktionieren &lt;em&gt;eRuby&lt;/em&gt; (das &lt;em&gt;Ruby&lt;/em&gt; einbindet), &lt;em&gt;Active Server Pages&lt;/em&gt; (ASP) oder &lt;em&gt;Java Server Pages&lt;/em&gt; (JSP).&lt;/p&gt;

&lt;p&gt;Die Einbindung kompletter Scriptsprachen in Webdokumente führt zwar einerseits zu einem großen Funktionsumfang, ist aber andererseits nicht immer bequem, weil oft komplex, und zudem auch nicht sicher - eben wegen des Funktionsumfangs: wer eine &lt;em&gt;PHP&lt;/em&gt;-Datei auf einen Server hochladen kann, darf faktisch dort Programme ausführen.&lt;/p&gt;

&lt;h3 id=&quot;spezialisierte-template-engines-&quot;&gt;Spezialisierte &lt;em&gt;Template Engines&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Systeme wie &lt;a href=&quot;http://www.smarty.net/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Smarty&lt;/em&gt;&lt;/a&gt; enthalten hingegen eine eigene, abgespeckte &amp;#8220;Sprache&amp;#8221;, die einerseits nicht unmittelbar die Ausführung beliebigen Codes erlaubt und - vor allem - andererseits speziell auf die Aufgabe, eine Vorlage mit individuellen Inhalten zu füllen, zugeschnitten ist.&lt;/p&gt;

&lt;p&gt;Solche &lt;em&gt;Template Engines&lt;/em&gt; können unter verschiedenen Sprachen ausgeführt werden; &lt;em&gt;Smarty&lt;/em&gt; erfordert bspw. &lt;em&gt;PHP&lt;/em&gt;. Ein anderes Beispiel, das unter einer Vielzahl von Sprachen ausgeführt werden kann, wäre &lt;a href=&quot;http://mustache.github.io/&quot; title=&quot;{{ mustache }}&quot;&gt;&lt;em&gt;mustache&lt;/em&gt;&lt;/a&gt;. Die dort gebotenen Möglichkeiten sind allerdings nicht ganz so vielseitig.&lt;/p&gt;

&lt;h3 id=&quot;-template-engines-und-markup-languages-&quot;&gt;&lt;em&gt;Template Engines&lt;/em&gt; und &lt;em&gt;Markup Languages&lt;/em&gt;&lt;/h3&gt;

&lt;p&gt;Setzen die vorgenannten Beispiele in der Regel auf ein &lt;em&gt;HTML&lt;/em&gt;-Dokument, also eine konventionelle Webseite, auf, und ergänzen das &lt;em&gt;HTML&lt;/em&gt; mit zusätzlicher Funktionalität - Variablen, Funktionen, Datenbankanbindung usw. -, gibt es auch &lt;em&gt;Template Engines&lt;/em&gt;, die eine eigene Auszeichnungssprache mitbringen und auf diese Art und Weise die Vorteile eines &lt;em&gt;Templates&lt;/em&gt; mit einer vereinfachten Auszeichnungssprache wie &lt;em&gt;Markdown&lt;/em&gt; oder &lt;em&gt;Textile&lt;/em&gt; verbinden.&lt;/p&gt;

&lt;p&gt;Eines dieser Systeme ist &lt;a href=&quot;http://haml.info/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;strong&gt;HAML&lt;/strong&gt;&lt;/a&gt;. &lt;em&gt;HAML&lt;/em&gt;-Templates bestehen nicht aus &lt;em&gt;HTML&lt;/em&gt;, sondern einer vereinfachten Variante, die v.a. ohne schließende Tags auskommt und zudem die logische Struktur des Dokuments durch Einrückungen abbildet. Das hat - neben eingesparter Schreibarbeit - den charmanten Vorteil, dass das Problem &amp;#8220;vergessener&amp;#8221; schließender Tags der Vergangenheit angehört. Darüber hinaus bietet &lt;em&gt;HAML&lt;/em&gt; zum einen die Möglichkeit des Einbindens von &lt;em&gt;Ruby&lt;/em&gt;-Code (ersetzt insoweit also &lt;em&gt;eRuby&lt;/em&gt;) und zum anderen den Einsatz von Filtern, so dass bspw. &lt;em&gt;Markdown&lt;/em&gt; oder &lt;em&gt;Textile&lt;/em&gt; in &lt;em&gt;HAML&lt;/em&gt;-Templates eingebaut werden können. Letzteres ist schon deshalb wichtig, weil das Verfassen längerer Texte in &lt;em&gt;HAML&lt;/em&gt; durch die Notwendigkeit, für jedes neue Tag einen neuen eingerückten Abschnitt zu beginnen, doch ziemlich umständlich ist.&lt;/p&gt;

&lt;p&gt;Nach dieser komplizierten Erläuterung ein Beispiel für &lt;em&gt;HAML&lt;/em&gt; in der Praxis. Der folgende kurze &lt;em&gt;HTML&lt;/em&gt;-Schnipsel:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;section class=&quot;container&quot;&amp;gt;
  &amp;lt;h1&amp;gt;Ein neues Kapitel&amp;lt;/h1&amp;gt;
  &amp;lt;div class=&quot;content&quot;&amp;gt;
    &amp;lt;p&amp;gt;
      Hier könnte jetzt ein längerer Text stehen,
      der sich über viele Zeilen erstreckt!
    &amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;würde in &lt;em&gt;HAML&lt;/em&gt; folgendermaßen aussehen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;%section.container
  %h1 Ein neues Kapitel
  .content
    %p
      Hier könnte jetzt ein längerer Text stehen,
      der sich über viele Zeilen erstreckt!
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Sollte der &amp;#8220;längere Text&amp;#8221; weitere Tags enthalten, wird das in &lt;em&gt;HAML&lt;/em&gt; allerdings eher umständlich:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;Hier könnte jetzt ein &amp;lt;strong&amp;gt;längerer&amp;lt;/strong&amp;gt; Text stehen,
  der sich über &amp;lt;em&amp;gt;viele&amp;lt;/em&amp;gt; Zeilen erstreckt!&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;wird zu:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;%p
  Hier könnte jetzt ein
  %strong längerer
  Text stehen,
  der sich über
  %em viele
  Zeilen erstreckt!
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Daher kann man stattdessen - innerhalb von &lt;em&gt;HAML&lt;/em&gt; - &lt;em&gt;Markdown&lt;/em&gt; (oder auch &lt;em&gt;Textile&lt;/em&gt;) verwenden und direkt auch (via &lt;em&gt;eRuby&lt;/em&gt;) variable Elemente einbinden:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;= render &#039;header&#039;
%section.container
  %h1= chapter.title
  .content
    :markdown
      Hier könnte jetzt ein **längerer** Text stehen,
      der sich über *viele* Zeilen erstreckt!
= render &#039;footer&#039;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Schick, nicht wahr?&lt;/p&gt;

&lt;h3 id=&quot;-template-engines-im-vergleich&quot;&gt;&lt;em&gt;Template Engines&lt;/em&gt; im Vergleich&lt;/h3&gt;

&lt;p&gt;Die Anzahl der verfügbaren &lt;em&gt;Template Engines&lt;/em&gt; ist ähnlich unüberschaubar wie das bei &lt;em&gt;CMS&lt;/em&gt; oder &lt;em&gt;static site generators&lt;/em&gt; der Fall ist. Die englischsprachige &lt;em&gt;Wikipedia&lt;/em&gt; bietet immerhin eine &lt;a href=&quot;http://en.wikipedia.org/wiki/Comparison_of_web_template_engines&quot; title=&quot;&quot;&gt;Vergleichstabelle&lt;/a&gt; für einen ersten Überblick an.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Dieser Beitrag gehört zur Reihe &amp;#8220;&lt;a href=&quot;https://netz-rettung-recht.de/archives/1810-Webdesign-anno-2015.html&quot; title=&quot;&quot;&gt;Webdesign anno 2015&lt;/a&gt;&amp;#8221;.&lt;/em&gt;&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/dcadc8dcd8af4d41b601c781b0477419&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 02 Feb 2015 05:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1821-guid.html</guid>
    <category>haml</category>
<category>webdesign</category>

</item>

</channel>
</rss>
