
{"pages":[{"title":"Stacey installieren","thumb":"","url":"../dokumentation/installation/","date":"","updated":"2016-04-07T20:35:04+10:00","title":"Stacey installieren","content":"<ol><li>Stacey-Archiv herunterladen und auf den PC entpacken</li><li>FTP-Programm starten und auf dem Webspace anmelden</li><li>alle Dateien und Verzeichnisse aus dem entpackten Archiv hochladen</li><li>auf dem Webspace in /app für das Verzeichnis /_cache die Zugriffsrechte auf 777 setzen</li><li>im Browser Webspace-Adresse eingeben</li></ol><p>Optional kann man noch saubere URL aktivieren, in dem man die Datei <strong>htaccess</strong> im Wurzelverzeichnis in <strong>.htaccess</strong> umbenennt.</p>","images":[]},{"title":"Wie Stacey funktioniert - Grundlagen","thumb":"","url":"../dokumentation/grundlagen/","date":"","updated":"2016-04-07T20:35:04+10:00","title":"Wie Stacey funktioniert - Grundlagen","content":"<p>Stacey speichert alle Textinformationen nicht wie sonst üblich in einer Datenbank sondern in einfachen <strong>Textdateien</strong> und <strong>Verzeichnissen</strong>. Daher ist die Installation einfach, die Einrichtung einer Datenbank entfällt ebenso wie andere Setup-Schritte. Die Installation besteht nur darin, die Dateien auf den PHP-fähigen Webspace hoch zu laden.</p><h2>Inhalt</h2><p>Um eine neue Seite (oder ein neues Projekt) zu erstellen, legt man ein neues Verzeichnis an, kopiert dort hinein alle Bestandteile (Bilder, PDF-Dateien etc) und erstellt eine .txt-Datei. Das ist die eigentliche Inhaltsdatei, die nur aus einzelnen Textabschnitten besteht.</p><h2>Templates</h2><p>Das Templatesystem benutzt ganz normale HTML-Anweisungen mit einem einfachen Variablensystem. Es sind keinerlei PHP-Kenntnisse erforderlich, um eine Website zu erstellen. Einige Grundkenntnisse in HTML und CSS reichen aus, um eine den eigenen Vorstellungen entsprechende Website zu erstellen. Man kann natürlich das mitgelieferte Templateset nutzen oder geringfügig den eigenen Bedürfnissen anpassen. Zur Verwaltung der Navigation sowie zum Handling der Assets werden so genannte Partials benutzt. Um nun beispielsweise die Art und Weise der Navigation zu verändern muss man sich nicht mit irgendwelchem PHP-Code herumschlagen, sondern lediglich das entsprechende Partial anpassen.</p><h2>RSS/Atom</h2><p>Stacey stellt direkt RSS- und Atom-Feeds bereit.</p>","images":[]},{"title":"Templates für Stacey - Templates installieren","thumb":"","url":"../dokumentation/templates-installieren/","date":"","updated":"2016-04-07T20:35:05+10:00","title":"Templates für Stacey - Templates installieren","content":"<ol><li>Aktuelle Version von <strong>Stacey</strong> herunterladen</li><li>Verzeichnisse <code>/content</code> (aber natürlich nicht bereits selbst erstellte Inhalte), <code>/public</code> und <code>/templates</code> löschen</li><li>Aus der <strong>zip-Datei</strong>, die das Template enthält die Verzeichnisse <code>/content</code> , <code>/public</code> und <code>/templates</code> an die Stelle kopieren, wo sich die gelöschten Verzeichnisse gleichen Namens befanden.</li></ol><h2>Quellen</h2><p>Herunterladen kann man Templates hier <a href=\"http://www.staceyapp.com/download-templates/\">http://www.staceyapp.com/download-templates/</a>.</p>","images":[]},{"title":"Stacey Überblick zur detailiierten Dokumentation","thumb":"","url":"../dokumentation/ueberblick/","date":"","updated":"2016-04-07T20:35:05+10:00","title":"Stacey Überblick zur detailiierten Dokumentation","content":"<p>Stacey ist ein CMS zur Erstellung <strong>dynamischer</strong> HTML-Seiten.</p><p>Das Projekt zielt auf zwei zentrale Grundsätze ab:</p><ol><li>die Trennung von Textinhalt und sonstigen Bestandteilen der Seite</li><li>der <strong>Vermeidung</strong> von php-artigem Code in den Templates</li></ol><p>Diese werden direkt in den Verzeichnissen <code>/content</code> und <code>/templates</code> abgelegt.</p><p>Stacey verarbeitet alle dynamischen Teile der Webseite wie</p><ul><li>Breadcrumbs</li><li>Navigationslisten</li><li>Bilderzusammenstellungen</li><li>Gemeinsame Bestandteile</li></ul><p>Stacey verfügt über eine einfache <strong>Templatesprache</strong> und ein <strong>Partialsystem</strong>. Mit Hilfe dieser beiden Bestandteile hat der Nutzer vollständige Kontrolle über den HTML-Code, der erzeugt wird.</p><p>Stacey stellt einige einfache Templates im Portfolio-Stil bereit, um dem Anwender einen ersten Eindruck über die Funktionsweise des Systems zu vermitteln. Stacey ist jedoch dank seiner Flexibilität in der Lage, Websites von beeindruckender Flexibilität zu erzeugen.</p><h2>Einsatz</h2><p>Da Stacey das Dateisystem zur Speicheurng und Verwaltung der Daten nutzt, ist das System innerhalb kürzester Zeit einsatzbereit. Außerdem ist <strong>PHP</strong>  beim Webhosting derart weit verbreitet, dass eine auf Stacey basierende Website sehr kostensparend bei nahezu jedem Webhoster erfolgen kann.</p><h2>Caching</h2><p>Da das Auslesen des Dateisystems bei größeren Websites zu <strong>Performanceeinbußen</strong> führen kann, nutzt Stacey eine Kombination von <strong>dateibasiertem Caching</strong> und <strong>E-Tag-Headers</strong>. Dadurch wird sichergestellt, dass die einzelnen Seiten so schnell wie möglich geladen werden. Das Cache-Sytem so intelligent, dass der Cache nur dann erneut wird, wenn der Inhalt verändert wurde.</p><h2>600 Zeilen Code</h2><p>Der gesamt Code  von Stacey umfasst etwa 600 Zeilen. Daher ist es nicht allzu schwierig, diesen Durchzuarbeiten, um die Funktionsweise des Systems zu verstehen und es an die eigenen Zwecke anzupassen.</p><p>Das Projekt wird auf <a href=\"http://github.com/kolber/stacey\">http://github.com/kolber/stacey</a> bereitgestellt. Man muss sich also nicht scheuen, den Code durchzusehen, Verbesserungen, vorzuschlagen, eigenen Varianten zu erstellen oder (vermeintliche) Fehler zu beheben.</p>","images":[]},{"title":"","thumb":"","url":"../dokumentation/seiten-erstellen/","date":"","updated":"2016-04-07T20:35:05+10:00","title":"","content":"<p>Jeder Unterverzeichnis im Hauptverzeichnis <code>/content</code>, dass eine Datei .txt enthält wird zu einer HTML-Seite. Um eine neue Seite anzulegen, muss man demzufolge nur ein neues <strong>Unterverzeichnis</strong> anlegen und dort eine .txt-Datei erstellen. Der <strong>Name dieser .txt-Datei</strong> informiert das Stacey-System darüber, welches Template zur Anzeige der Seite benutzt werden soll. Eine Inhaltsdatei index.txt nutzt also die Templatedatei index.html, content.txt benötigt content.html usw.</p><p>Die Verzeichnisse kann man mit einem Zahlen-Präfix versehen. Die Seiten werden dann in der umgekehrt numerischen Reihenfolge angezeigt, der Zahlenpräfix wird bei der URL weggelassen.</p><p>Beispiel: Ein Verzeichnis mit dem Namen 1.projekt-name-10 hat also die URL http://deinedomain.de/projekte/projekt-name-10.</p><p>Wenn SEO-freundliche URL nicht aktiviert sind lautet die URL http://deinedomain.de/?/projekte/projekt-name-10.</p><p>Wenn man den Zahlen-Präfix weglässt, wird die Seiten in Kollektionen nicht angezeigt. Sie ist aber trotzdem über die URL direkt erreichbar.</p><p>Bei der Namensvergabe für Verzeichniss sollte man an Stelle des Unterstrichs (_) den Bindestrich (-) verwenden, wenn man Worte trennt.</p><p>Stacey unterstützt eine unbegrenzte Zahl von Verschachtelungsebenen.</p><h2>Bilder</h2><p>Stacey fügt alle Bilder, die sich in einem Verzeichnis befinden, automatisch in die HTML-Seite ein. Ebenso wie die Seiten werden sie in umgekehrt numerischer Reihenfolge angezeigt.</p><p>Hier ein Bild</p><p>Bilder werden so eingefügt, wie sie sind. Das heißt, dass man sie sinnvollerweise vorher zurechtschneidet. Das <strong>Standardtemplate</strong> geht von einer maximalen Breite von 560 Pixel aus.</p><p>Bilder werden in einem Partial mit dem Namen :image gesammelt, das an einer beliebigen Stelle in einem Template eingefügt werden kann.</p><h2>Andere  Assets</h2><p><strong>Video- und Flash-Dateien</strong> werden auf die gleiche Art eingefügt wie Bilder. Die entsprechenden Partials sind :video und :swf. Der Inhalt einer HTML-Datei wird dort eingefügt, wo sich das Partial :html befindet. Die kann nützlich sein, um YOUTUBE-Videos in eine Seite einzufügen.</p><p>Videos müssen mit den Abmessungen des Videos benannt werden, also zum Beispiel 1.800x600.mp4.</p><p>Außerdem erkennt Stacey alle anderen Assets innerhalb eines Verzeichnisses.</p><h2>Vorschaubilder / Thumbnails</h2><p>Jede Seite kann ein eigenes Vorschaubild haben. Man fügt dabei einfach eine Datei mit dem Namen thumb in das Verzeichnis ein (Erweiterung: .jpg, .png oder .gif).</p><p>In den Standardtemplates werden diese Vorschaubilder durch eine CSS-Anweisung versteckt. Um sie anzuzeigen, muss die entsprechende CSS-Datei (/public/docs/css/screen.css) angepasst werden. Dort befindet sich recht weit am Ende der Datei.</p><p>Hier ein Bild</p><p>img.project-thumb { ... display: none; }</p><p>Das muss geändert werden zu</p><p>img.project-thumb { ... display: inline; }</p><p>Diese Vorschaubilder können jede erdenkliche Größe haben. Im <strong>Standardtemplate</strong> ist für Thumbnails eine relativ kleine Größe vorgesehen.</p>","images":[]},{"title":"Inhalte bei Stacey bearbeiten","thumb":"","url":"../dokumentation/inhalt-bearbeiten/","date":"","updated":"2016-04-07T20:35:06+10:00","title":"Inhalte bei Stacey bearbeiten","content":"<p>Innerhalb des Verzeichnisses <code>/content</code> gibt es eine Datei <code>_shared.txt</code>. Wenn man diese Datei ( im <strong>Stacey-Download-Paket</strong>) mit einem Texteditor öffnet, findet man den folgenden Inhalt vor:</p><pre>name: <em>Name</em>&#45;profession: <em>Graphic Designer</em>&#45;email: <em>hi@yourdomain.com</em></pre><p>Diese Angaben kann man mit den eigenen ersetzten. Man kann hier jedoch auch vollkommen neue Werte definieren. Sie sind dann überall verwendbar.</p><h2>Codierung von Textdateien</h2><p>Alle Textdateien müssen mit dem <strong>UTF-8-Zeichensatz</strong> codiert werden. Dadurch können auch Zeichen verwendet werden, die nicht zum Standard-ASCII-Vorrat gehören. Das ist natürlich für deutschsprachige Webseiten besonders wichtig.</p><h3>Der richtige Editor</h3><p>Die meisten Editoren können mit dem UTF-8-Zeichenssatz umgehen. Bereits der Windows-Standard-Editor kann bei richtiger Zeichensatzwahl die entsprechnden Dateiene erzeugen. wesentlich mehr Komfort bietet aber ein Editor wie <strong>Notepad++</strong>.</p><p>Mehr zum Thema  <a href=\"http://de.wikipedia.org/wiki/Textdatei\">text files</a> &amp; <a href=\"http://de.wikipedia.org/wiki/UTF-8\">UTF-8 encoding</a> on Wikipedia.</p><h2>Inhalt bearbeiten</h2><p>Jedes Verzeichniss, dass als Seite angezeigt werden soll muss eine .txt-Datei enthalten. Diese Datei kann durchaus leer sein. Der Name dieser .txt-Datei muss mit einem Dateinamen im Verzeichnis <code>/templates</code> übereinstimmen, damit Stacey weiß, wie es die Inhalte der .txt-Datei darstellen soll.</p><p>Hier Beispielbild</p><h2>Variablen erzeugen und verarbeiten</h2><p>Dieser Prozess kann mit der folgenden, beispielhaften Schrittfolge beschrieben werden:</p><ol><li>Im Browser wird <code>http://yourdomain.com/?/about/</code> aufgerufen.</li><li>Stacey liesst die entsprechende Inhaltsdatei <code>/content/3.about/content.txt</code></li><li>Aus der .txt-Datei werden die Schlüssel-Wert-Paare zu <code>&#64;title </code>und zu <code>&#64;content</code> extrahiert.</li></ol><pre>title: About Title&#45;content:Lorem ipsum.</pre><ol><li>Stacey sucht nach der dem Namen der <strong>Textdatei</strong> entsprechenden <strong>Templatedatei</strong>, also <code>/templates/content.html</code>.</li><li>Stacey sucht die entsprechenden Variablen im Template, ersetzt sie und erzeugt den endgültigen HTML-Code. So wird aus</li></ol><pre>&lt;div id=&quot;main&quot;&gt;  &lt;h1&gt;<em>&#64;title</em>&lt;/h1&gt;  <em>&#64;content</em>&lt;/div&gt;</pre><p>der HTML-Code</p><pre>&lt;div id=&quot;main&quot;&gt;  &lt;h1&gt;<em>About Title</em>&lt;/h1&gt;  <em>&lt;p&gt;Lorem ipsum.&lt;/p&gt;</em>&lt;/div&gt;</pre><h2>Format der Inhaltsdateien</h2><p>Die Inhaltsdateien weisen alle das gleiche Muster auf. Jedem <strong>Schlüssel (key)</strong> folgt ein <strong>Doppelpunkt (:)</strong>, dann kommt der <strong>Wert</strong> und schließlich ein <strong>Bindestrich</strong>. Letzterer beendet den Wert, also</p><pre><em>schluessel</em>: <em>wert&#45;</em></pre><p>Die Schlüsselwerte entsprechen den <strong>Platzhaltern</strong> in der Templatedatei die mit dem Wert des INahltes (der .txt-datei) ersetzt werden. Man kann soviele <code>schluessel:wert</code>-Paare erzeugen, wie man benötigt.</p><h3>Schlüssel</h3><p>Schlüssel dürfen nur diese Zeichen enthalten</p><p><code>abcdefghijklmnopqrstuvwxyz0123456789_</code></p><p>also kleingeschriebene alphanumerische Zeichen und den Unterschrich, also auf keinen Fall deutsche Sonderzeichen (äöüß).</p><p>Eine Standardinhaltsdatei kann demzufolge so aussehen</p><pre>title: The Test Project 1&#45;date: 2009, Jun—&#45;content:Lorem ipsum dolor...</pre><h3>Trennung von Schlüssel und Wert</h3><p>Jedem Wert muss eine Zeile folgen, die nur einen Bindestrick enthält Stacey toleriert aber zufällige Tabs bzw. Leerzeichen.</p><p>Nach dem letzten Schlüssel/Wert-Paar ist der Bindestrich optional.</p><h3>Leer Werte</h3><p>Wenn ein Wert leer sein soll, lässt man einfach ein <strong>Leerzeichen</strong> nach dem Doppelpunkt.</p><h2>&#64;path</h2><p>Diese Variable ist auch in den Inhaltsdateien verfügbar. Das ist besonders nützlich, wenn man Assets (Bilder, Flash-Dateien etc.) innenrhalb des aktuellen Verzeichnisses verlinken will.</p><h2>&#64;bypass_cache</h2><p>Diese Variable kann man zu einer bestimmten Inhaltsdatei hinzufügen, wenn man möchte, dass die entsprechende Seite nicht gecacht werden soll.</p><h2>Markdown</h2><p>Alle Werte innerhalb der Inhaltsdatei, die einen oder mehrere Zeilenumbrüche enthalten, werden als <a href=\"http://daringfireball.net/projects/markdown/\">Markdown</a> ausgewertet. In dem folgenden Beispiel wird &#64;title als einfacher Text ausgewertet, &#64;content hingegen als Markdown. So wird aus</p><pre>date: 2009, Jun—&#45;content:# TitleLorem ipsum.</pre><p>dies:</p><pre>&#64;date =&gt; 2009, Jun—&#64;content =&gt; <em>&lt;h1&gt;</em>Title<em>&lt;/h1&gt;</em> <em>&lt;p&gt;</em>Lorem ipsum.<em>&lt;/p&gt;</em></pre><p>Markdown ignoriert HTML-Tags, daher kann man an Stelle von Markdown auch HTML-Tags zur Kennzeichnung verwenden. Man kann also an Stelle des obigen Beispiels in die Textdatei auch einfügen:</p><pre>date: 2009, Jun—&#45;content:&lt;h1&gt;Title&lt;/h1&gt;&lt;p&gt;Lorem ipsum.&lt;/p&gt;</pre><h3>Referenzen für Markdown</h3><p>Stacey nutzt <a href=\"http://michelf.com/projects/php-markdown/extra/\">PHP Markdown Extra</a>, eine PHP-spezifische <strong>Erweiterung</strong> von Markdown. Markdown Extra verfügt auch über einige spezische Syntaxelelemente, wie <strong>hübsche Codeblöcke</strong> und <strong>IDs für Überschriften</strong>. Es ist also sinnvoll, beide Referenzen zu konsultieren.</p><ul><li><a href=\"http://daringfireball.net/projects/markdown/syntax/\">Markdown Documentation</a></li><li><a href=\"http://michelf.com/projects/php-markdown/extra/\">PHP Markdown Extra Documentation</a></li></ul>","images":[]},{"title":"Templates bearbeiten","thumb":"","url":"../dokumentation/templates-bearbeiten/","date":"","updated":"2016-04-07T20:35:06+10:00","title":"Templates bearbeiten","content":"<p>Die Templates von Stacey unterstützten mit einer Mischung aus HTML und einfachen dynamischen Variablen die Erstellung der eigentlichen Ausgabeseiten.</p><p>Dabei kommt so etwas heraus wie dies:</p><pre>...&lt;h1 class=&quot;col three&quot;&gt;  <em>&#64;name</em>  &lt;strong&gt;<em>&#64;profession</em>&lt;/strong&gt;&lt;/h1&gt;&lt;em class=&quot;col three&quot;&gt;<em>&#64;email</em>&lt;/em&gt;&lt;hr&gt;<em>&#58;navigation</em>&lt;div id=&quot;content&quot; class=&quot;col eight&quot;&gt;  <em>&#58;category_lists</em>&lt;/div&gt;&lt;hr&gt;&lt;p class=&quot;col five&quot;&gt;&amp;copy; Copyright <em>&#64;name</em> <em>&#64;current_year</em>&lt;/p&gt;...</pre><p>Alle Templates befinden sich im Verzeichnis <code>/templates</code>. Die sogenannten <strong>Partial Templates</strong> befindnen sich im Verzeichnis <code>/templates/partials</code>. Sie werden dazu genutzt, <strong>Zusammenstellungen</strong> (collections) zu erstellen. Diese Zusammenstellungen sind Zusammenfassungen gleichartiger Objekte (z.B. alle Bilder, Navigationsobjekte) in einem Verzeichnis.</p><h2>Templatezuweisung</h2><p>Templates werden den Inhaltsdateien auf Grund identischer Namen zugewiesen, d.h. eine Inhaltsdatei meinname.txt muss zwingend eine Templatedatei meinname.html vorfinden. Gibt es diese Datei nicht, gibt Stacey einen Fehler zurück.</p><h2>Templatetypen</h2><p>Templates müssen nicht zwingend .html-Dateien sein. Stacey erkennt automatisch content-type Header für Templates mit den folgenden Erweiterungen: .html, .json, .xml, .atom, .rss, .rdf &amp; .txt. Solche Templates werden korrekt verarbeitet.</p><h2>Das Verzeichnis Public</h2><p>Wenn <strong>suchmaschinengerechte URL</strong> aktiviert sind, dann sind alle Dateien im Verzeichnis <code>/public</code> vom <strong>Wurzelverzeichnis</strong> des Webserver erreichbar. Also ist</p><p><code>/public/docs/css/screen.css</code></p><p>erreichbar unter</p><p><code>http://yourdomain.com/docs/css/screen.css</code></p><p>Das Verzeichnis <code>/public</code> wird üblicherweise dazu genutzt, um .css, .javascript und andere in Templates genutzte Teile zu speichern.</p><h3>Anmerkung</h3><p>Diese Aussage muss noch einmal verifiziert werden.</p>","images":[]},{"title":"Templatesprache","thumb":"","url":"../dokumentation/template-sprache/","date":"","updated":"2016-04-07T20:35:06+10:00","title":"Templatesprache","content":"<p>Stacey verarbeitet jedes Template zunächst als reinen Text, erst danach wird es als HTML verarbeitet. Anweisungen wie <code>&lt;?php ?&gt;</code> werden nicht verarbeitet.</p><h2>Sprachkonstrukte</h2><p>Innerhalb der Templates von Stacey stehen die folgenden drei Sprachkontrukte zur Verfügung:</p><ul><li><em><code>get</code></em> -Blöcke </li><li><em><code>foreach</code></em> -Sschleifen </li><li>boolische <em><code>if</code></em> Abfragen.</li></ul><dl class=\"thin\">    <dt><strong>get</strong></dt>    <dd><pre><em>get \"/url\" do</em>  # do stuff<em>end</em></pre>  </dd></dl><dl class=\"thin\">    <dt><strong>foreach</strong></dt>    <dd><pre><em>&#102;oreach $collection do</em>  # do stuff<em>endforeach</em></pre>  </dd></dl><dl class=\"thin\">    <dt><strong>if</strong></dt>    <dd><pre><em>i&#102; &#64;variable do</em>  # do stuff<em>endif</em></pre>    </dd></dl><dl class=\"thin\">    <dt><strong>if not</strong></dt>    <dd><pre><em>i&#102; !@variable do</em>  # do stuff<em>endif</em></pre>    </dd></dl><h3>Variablenkontext</h3><p>Wenn man sich innerhalb einer <code>foreeach</code>-Schleife befindet, verschiebt sich der Kontext auf das aktuelle Objekt, das gerade durch die Schleife referenziert wird.</p><p>Wenn man den Kontext einer bestimmten Seite temporär verschieben will, muss man einen <code>get</code>-Block einfügen.</p><pre><em>get \"/projects/project-1\" do</em>  &lt;p&gt;&#64;page_name&lt;/p&gt;<em>end</em></pre><p>Damit wird der Kontext von der aktuellen, gerade angezeigten Seite verschoben zur Seite <code>/projects/project-1</code>. Das bedeutet, $children wird mit den Unterelementen der Seite <code>/projects/project-1</code> gefüllt, <code>@page_name</code> ist 'Projects' usw.</p><p>Wenn man also nur die Unterelemente des Verzeichnisses /projects auflisten (die selbst wieder keine Unterelemente beinhalten), kann man das folgende <strong>Partial</strong> nutzen:</p><pre>get \"<em>/projects</em>\" do  &#102;oreach <em>$children</em> do    i&#102; !<em>$children</em> do      &lt;p&gt;&lt;a href=&quot;<em>&#64;url</em>&quot;&gt;<em>&#64;page_name</em>&lt;/a&gt;&lt;/p&gt;    endif  endforeachend</pre><h3>foreach-Schleifen begrenzen</h3><p>foreach-Schleifen kann man begrenzen in dem man die Konstruktion</p><pre><code>$collection[start:limit] </code></pre><p>nutzt. Das Array wird nun auf die mit <code>start</code> und <code>limit</code> vorgegebenen Werte begrenzt.</p><p>Die Werte <code>start</code> und <code>limit</code> sind jeweils optional. Man kann auch</p><pre><code>$collection[:2] </code></pre><p>angeben, um nur die ersten beiden Elemente oder</p><pre><code>$collection[2:] </code></pre><p>um alle Elemente außer den ersten beiden auszuwählen. Das folgende Partial gibt nur das dritte und vierte Element der Kollektion $children aus:</p><pre>&lt;ol id=&quot;navigation&quot;&gt;  <em>&#102;oreach $children[2:2] do</em>    &lt;li&gt;&lt;a href=&quot;&#64;url&quot;&gt;&#64;page_name&lt;/a&gt;&lt;/li&gt;  <em>endforeach</em>&lt;/ol&gt;</pre><h3>foreach-Schleifen verschachteln</h3><p>Um die unterschiedlichen Ebenen eines Objektes zu durchlaufen können foreach-Schleifen ineinander verschachtelt werden, z.B.</p><pre>&lt;ol id=&quot;navigation&quot;&gt;  <em>&#102;oreach $root do</em>    &lt;li&gt;&lt;a href=&quot;&#64;url&quot;&gt;&#64;page_name&lt;/a&gt;      <em>i&#102; $children do</em>        &lt;ol&gt;          <em>&#102;oreach $children do</em>            &lt;li&gt;&lt;a href=&quot;&#64;url&quot;&gt;&#64;page_name&lt;/a&gt;          <em>endforeach</em>        &lt;/ol&gt;      <em>endif</em>    &lt;/li&gt;  <em>endforeach</em>&lt;/ol&gt;</pre><p>Allerdings wäre in diesem Fall wohl ein rekursives <strong>Partial</strong> die elegantere Lösung.</p>","images":[]},{"title":"","thumb":"","url":"../dokumentation/assets-in-templates/","date":"","updated":"2016-04-07T20:35:07+10:00","title":"","content":"<p>Außer Bildern und Videos erkennt Stacey auch alle anderen Assets innerhalb des Verzeichnisses einer Seite. Diese werden jeweils in ihren eigenen <strong>Kollektionen</strong> abgelegt.</p><p>So hat zum Beispiel diese SeiteHier Bild</p><p>die folgenden Kollektionen:</p><pre><em>$pdf</em>: ['pdf-file.pdf' => Asset]<em>$mp3</em>: ['mp3-file-1.mp3' => Asset       'mp3-file-2.mp3' => Asset]<em>$html</em>: ['youtube-embed.html' => HTML]<em>$doc</em>: ['word-document.doc' => Asset]<em>$jpg</em>: ['01.jpg' => Image]</pre><p>Diese können genauso wie Kollektionen <em>$images</em> oder <em>$video</em> in Templates oder Partials mit Schleifen durchlaufen werden. Beispielsweise so:</p><pre>foreach <em>$mp3</em> do  &lt;object height=\"50\" width=\"200\"&gt;    &lt;param name=\"kioskmode\" value=\"true\"&gt;    &lt;param name=\"src\" value=\"<em>&#64;url</em>\"&gt;    &lt;param name=\"autoplay\" value=\"false\"&gt;    &lt;param name=\"controller\" value=\"true\"&gt;    &lt;embed height=\"50\" src=\"<em>&#64;url</em>\" type=\"video/quicktime\" width=\"200\" controller=\"true\" autoplay=\"false\" kioskmode=\"true\"&gt;  &lt;/object&gt;endforeach</pre><h2>Asset Kollektionen</h2><p>Man kann auch eine spezielle, benannte Kollektion aus Assets erstellen. Stacey erkennt Verzeichnisse, die mit einem Unterstrich (<em>_</em>) beginnen, als Asset Kollektionen. Auf diese Kollektionen kann man mit dem Verzeichnisnahmen, dem ein <em>$</em> vorangestellt wird, Bezug nehmen.</p><p>Zum Beispiel die VerzeichnisstrukturBeispielbild</p><p>erstellt die folgenden Asset Kollektionen.</p><pre><em>$_logos</em>: ['logo1.gif' => Image          'logo2.mov' => Video]<em>$_thumbnails</em>: ['thumb1.jpg' => Image               'thumb2.jpg' => Image               'thumb3.jpg' => Image               'thumb4.jpg' => Image]</pre><p>Diese Kollektion kann auf die gleiche Art und Weise durchlaufen werden, wie die Kollektion <em>$images</em>.</p><pre>foreach <em>$_logos</em> do  &lt;li&gt;&lt;img src=&quot;<em>&#64;url</em>&quot; alt=&quot;<em>&#64;name</em>&quot;&gt;&lt;/li&gt;endforeach</pre><p>Diese speziellen Kollektionen werden innerhalb anderer Kollektionen ( z.B.: <em>$siblings</em> oder <em>$children</em>) nicht angezeigt.</p><h2>Asset Typen</h2><p>Stacey weiß schon standardmäßig, wie einige Assettypen zu behandeln sind. Jeder dieser Typen besitzt spezifische Variablen, auf die im Zusammenhang einer Schleife zurückgegriffen werden kann.</p><h3>Bilder</h3><p>(<em>.jpg</em>, <em>.jpeg</em>, <em>.gif</em>, <em>.png</em>)</p><dl><dt><strong>&#64;name</strong></dt><dd>Der Name des aktuellen Bildes. Dieser entsteht, in dem aus dem Dateinamen ein Text gebildet wird (z.B. <em>1.my-image.jpg</em> wird <em>My image</em>).</dd><dt><strong>&#64;file_name</strong></dt><dd>Der Dateiname des aktuellen Bildes. (z.B. <em>1.my-image.jpg</em>)</dd><dt><strong>&#64;url</strong></dt><dd>Der relative Pfad zu dieser Datei, ausgehend von der aktuellen Seite.</dd><dt><strong>&#64;small</strong></dt><dd>Der relative Pfad zu einer Datei gleichen Namens und gleichen Typs wie die aktuelle Datei, aber mit einem &#95;sml-Suffix am Dateinamen (wenn es so eine Datei gibt).<br />z.B. ein Bild mit dem Namen <em>portrait.jpg</em> hat eine &#64;small Variable <em>portrait_sml.jpg</em></dd><dt><strong>&#64;large</strong></dt><dd>Der relative Pfad zu einer Datei gleichen Namens und geleichen Typs wie die aktuelle Datei, aber mit einem &#95;lge-Suffix (wenn es so eine Datei gibt).z.B. ein Bild mit dem Namen <em>portrait.jpg</em> hat eine &#64;large Variable  <em>portrait_lge.jpg</em></dd><dt><strong>&#64;width</strong></dt><dd>Die Breite des aktuellen Bildes.z.B. 560</dd><dt><strong>&#64;height</strong></dt><dd>Die Höhe des aktuellen Bildesz.B. 400</dd></dl><p>Die folgenden Variablen werden aus den <a href=\"#iptc-meta\">IPTC metadata</a> des Bildes ausgelesen</p><dl><dt><strong>&#64;title</strong></dt><dd>Das Feld 'title' der IPTC metadata (field 005).</dd><dt><strong>&#64;description</strong></dt><dd>Das Feld 'description/caption' der IPTC metadata (field 120).</dd><dt><strong>&#64;keywords</strong></dt><dd>Das Feld 'keywords' der IPTC metadata (field 025).</dd></dl><h3>Video</h3><p>(<em>.mov</em>, <em>.mp4</em>, <em>.m4v</em>, <em>.swf</em>)</p><dl><dt><strong>&#64;name</strong></dt><dd>Der Name des aktuellen Videos. Dieser entsteht, in dem aus dem Dateinamen ein Text gebildet wird (z.B. <em>1.my-movie.mov</em> wird <em>My movie</em>).</dd><dt><strong>&#64;file_name</strong></dt><dd>Der Dateiname der aktuellen Videodatei.</dd><dt><strong>&#64;url</strong></dt><dd>Der relative Pfad zu dieser Datei, ausgehend von der aktuellen Seite.</dd><dt><strong>&#64;width</strong></dt><dd>Die Breite der aktuellen Video-Datei (aus dem Dateinamen – z.b: <em>300</em>x150.mov).</dd><dt><strong>&#64;height</strong></dt><dd>Die Höhe der aktuellen Video-Datei (aus dem Dateinamen – z.b: 300x<em>150</em>.mov).</dd></dl><h3>HTML</h3><p>(<em>.html</em>, <em>.htm</em>)</p><dl><dt><strong>&#64;name</strong></dt><dd>Der Name der aktuellen HTML-Datei. Dieser entsteht, in dem aus dem Dateinamen ein Text gebildet wird(z.B. <em>1.my-youtube-video.html</em> wird <em>My youtube video</em>).</dd><dt><strong>&#64;file_name</strong></dt><dd>Der Dateiname der aktuellen HTML-Datei.</dd><dt><strong>&#64;url</strong></dt><dd>Der relative Pfad zu dieser Datei, ausgehend von der aktuellen Seite.</dd><dt><strong>&#64;content</strong></dt><dd>Der Inhalt der HTML-Datei (als raw html).</dd></dl><h3>Alle anderen Assets</h3><p>(<em>.*</em>)</p><dl><dt><strong>&#64;name</strong></dt><dd>Der Name der aktuellen Datei. Dieser entsteht, in dem aus dem Dateinamen ein Text gebildet wird (z.B. <em>1.my-resume.pdf</em> wird <em>My resume</em>).</dd><dt><strong>&#64;file_name</strong></dt><dd>Der Dateiname der aktuellen Datei.</dd><dt><strong>&#64;url</strong></dt><dd>Der relative Pfad zu dieser Datei, ausgehend von der aktuellen Seite.</dd></dl><h3>IPTC Metadaten</h3><p>(muss noch fortgesetzt werden)</p>","images":[]},{"title":"Variablen","thumb":"","url":"../dokumentation/variablen-typen/","date":"","updated":"2016-04-07T20:35:07+10:00","title":"Variablen","content":"<h2>Übersicht</h2><p>Im Templatesystem von Stacey gibt es drei Variablentypen:</p><dl><dt><strong><em>@</em>Variablen</strong></dt><dd>werden durch die .txt-Datei der jeweiligen Seite bereitgestellt und durch das Stacey System ergänzt (z.B. <em>&#64;page_name</em>).</dd><dt><strong><em>$</em>Kollektionen/<br>Sammlungen/<br>Zusammenstellungen</strong></dt><dd>Sammlung von Assets oder Seiten, die mit einer Schleife durchlaufen werden kann (z.B. <em>$children</em>).</dd><dt><strong><em>:</em>Partials</strong></a></dt><dd>Kurzschreibweise um Dateien aus dem Verzeichnis <em>/templates/partials</em> einzufügen (z.B. <em>&#58;navigation</em>).</dd></dl><h2>@Variables</h2><p>Innerhalb der <strong>Template-Dateien</strong> stehen neben den HTML-Tags auch die innerhalb der entsprechenden .txt-Seite erstellten Variablen zur Verfügung. Auf diese kann im Template mit Hilfe des Symbols <em>@</em>, gefolgt vom Schlüsselwort, zugegriffen werden.</p><p>z.B. <em>&#64;title</em></p><p>Außerdem sind die in <code>/content/_shared.txt</code> definierten Variablen in <strong>allen Templatedateien</strong> verfügbar.</p><h3>Durch Stacey erstellte Variablen</h3><p>Das Stacey System erstellt eine Reihe generell verfügbarer Variablen. Das sind:</p><dl><dt><strong>&#64;root_path</strong></dt><dd>Ausgegeben wird der relative Pfad von der aktuellen Seite zum Wurzelverzeichnis der Website.z.B. in <em>/projects/project-name/</em>&#64;root&#95;path will contain <em>../../</em>.</i></dd><dt><strong>&#64;thumb</strong></dt><dd>Ausgegeben wird die relative URL zu einem Thumbnail für diese Seite (falls ein solcher existiert).</dd><dt><strong>&#64;url</strong></dt><dd>Ausgegeben wird der relative Pfad zu dieser Seite ausgehend von der aktuell betrachteten Seite (z.B. <em>../../projects/project-1</em>).</dd><dt><strong>&#64;permalink</strong></dt><dd>Ausgegeben wird der absolute URL-Pfad der aktuellen Seite (z.B. <em>projects/project-1</em>).</dd><dt><strong>&#64;slug</strong></dt><dd>Ausgegeben wird der <strong>slug</strong> der aktuellen Seite (z.B. <em>project-1</em>).</dd><dt><strong>&#64;is_current</strong></dt><dd>Gibt <strong>true (wahr)</strong> zurück wenn <em>&#64;permalink</em> der beim Server abgefragten URI entspricht.</dd><dt><strong>&#64;is_first</strong></dt><dd>Gibt <strong>true (wahr)</strong> zurück, wenn die aktuelle Seite die <b>erste</b> einer <strong>Kollektion</strong> ist.</dd><dt><strong>&#64;is_last</strong></dt><dd>Gibt <strong>true (wahr)</strong> zurück, wenn die aktuelle Seite die <b>letzte</b> einer <strong>Kollektion</strong> ist.</dd><dt><strong>&#64;page_name</strong></dt><dd>Ausgegeben wird der Name der aktuellen Seite.Dieser wird gebildet, in dem der slug der Seite in einen title-case Text umwandelt(z.B. <em>test-project-1</em> wird <em>Test Project 1</em>).</dd><dt><strong>&#64;siblings_count</strong></dt><dd>Die Anzahl der Seiten, die sich auf der gleichen Ebene wie die aktuelle befinden (z.B. <em>12</em>).</dd><dt><strong>&#64;children_count</strong></dt><dd>Die Anzahl der Children unterhalb der aktuellen Seite (z.B. <em>12</em>).</dd><dt><strong>&#64;index</strong></dt><dd>Die Nummer der aktuellen Seite relativ zu den anderen Seiten auf der gleichen Ebene (z.B. <em>5</em>).</dd><dt><strong>&#64;current_year</strong></dt><dd>Gibt das aktuelle Jahr aus.</dd><dt><strong>&#64;domain_name</strong></dt><dd>Gibt den Domainsnamen der aktuellen Seite aus (z.B. <em>staceyapp.com</em>).</dd><dt><strong>&#64;base_url</strong></dt><dd>Gibt den Domainsnamen und das Verzeichnis, in dem Stacey läuft, aus(z.B. <em>staceyapp.com/stacey</em>).</dd><dt><strong>&#64;site_updated</strong></dt><dd>Gibt das Datum aus, an dem die Website zuletzt verändert wurde. Das Format entspricht dem <a href=\"http://tools.ietf.org/html/rfc3339\">RFC 3339</a> Format(z.B. <em>2009-12-12T17&#58;34&#58;23+11&#58;00</em>).</dd><dt><strong>&#64;updated</strong></dt><dd>Gibt das Datum aus, an dem die aktuelle Seite zuletzt verändert wurde. Das Format entspricht dem <a href=\"http://tools.ietf.org/html/rfc3339\">RFC 3339</a> Format (z.B. <em>2009-12-12T17&#58;34&#58;23+11&#58;00</em>).</dd><dt><strong>&#64;stacey_version</strong></dt><dd>Gibt die aktuelle Verion von Stacey aus (z.B. <em>2.0</em>).</dd></dl><h3 id=\"text-file-variables\">Text-Datei Variablen</h3><p>In einigen Fällen können Variablen auch innerhalb von .txt-Dateien genutzt werden. Das sind die Variablen:</p><dl><dt><strong>&#64;path</strong></dt><dd>Ausgegeben wird  der <strong>vollständige</strong> Pfad des Dateisystems zur aktuellen Seite. (z.B. <em>/content/3.about</em>)</dd><dt><strong>&#64;bypass_cache</strong></dt><dd>Wenn diese Variable gesetzt ist, wird der <strong>Cache</strong>-Mechanismus des Stacey-Systems für diese Seite außer Kraft gesetzt.</dd></dl><h2>$Kollektionen (Sammlungen/Zusammenstellungen)</h2><p>Stacey stellt zwei Arten von Kollektionen bereit:</p><ul><li>Kollektionen zu miteinander in Beziehung (Eltern, Kinder usw.) stehenden Seiten</li><li>Kollektionen zu Assets</li></ul><p>Diese können jeweils mit <code>foreeach</code>-Schleifen durchlaufen werden.</p><h3>Seiten Kollektionen</h3><p>Die Seitenkollektionen sind:</p><dl><dt><strong>$root</strong></dt><dd>Listet alle Seiten der höchsten Ebene innerhalb von <em>/content</em> auf.</dd><dt><strong>$children</strong></dt><dd>Listet alle untergeordneten Seiten ausgehend von der aktuellen Seite auf.</dd><dt><strong>$parents</strong></dt><dd>Listet den vollständgen Vorgänger-Baum ausgehend von der aktuellen Seite auf.</dd><dt><strong>$parent</strong></dt><dd>Gibt den direkten Vorgänger der aktuellen Seite aus.</dd><dt><strong>$siblings</strong></dt><dd>Gibt alle Seiten aus, die sich auf der gleichen Ebene wie die aktuelle befinden, <b>beinhaltet nicht</b> die aktuelle Seite.</dd><dt><strong>$siblings_and_self</strong></dt><dd>Gibt alle Seiten aus, die sich auf der gleichen Ebene wie die aktuelle befinden, <b>beinhaltet auch</b> die aktuelle Seite.</dd><dt><strong>$next_sibling</strong></dt><dd>Gibt eine Referenz zur <b>nächsten</b> Seite auf der gleichen Ebene wie die aktuelle Seite (in umgekehrter numerischer Reihenfolge).</dd><dt><strong>$previous_sibling</strong></dt><dd>Gibt eine Referenz zur <b>vorherigen</b> Seite auf der gleichen Ebene wie die aktuelle Seite (in umgekehrter numerischer Reihenfolge).</dd></dl><h3>Asset Kollektionen</h3><dl><dt><strong>$images</strong><br><strong>$video</strong></dt><dd>Gibt eine Liste aus mit allen Garfikdateien oder Videodateien, die mit der aktuellen Seite verbunden sind (d.h. sich im gleichen verzeichnis wie die aktuelle Seite befinden). Wenn keine derartigen Dateien vorhanden sind, ist die Kolletion leer.</dd><dt><strong>$html</strong>,<br><strong>$swf</strong>,<br><strong>$mp3</strong>,<br><strong>$pdf</strong>,<br>etc.</dt><dd>Zusätzlich erstellt Stacey Kollektionen zu allen anderen Dateitypen (außer .txt) die es innerhalb des Verzeichnisses der aktuellen Seite findet.<br />Read more about [asset types][].</dd></dl><h2>:Partials</h2><p>Partials dienen dazu, wieder verwendbaren HTML-Code auszulagern. Sie werden im Verzeichnis <code>/templates/partials</code> abgelegt.</p><p>Dieses Verzeichniss kann wiederum Unterverzeichnisse enthalten (z.B. <code>/templates/partials/naviagtion</code> für alle Partials der Navigation) um eine bessere Übersichtlichkeit zu gewährleisten. Das bedeutet aber auch, dass es keine zwei Partials mit gleichem Namen geben darf, auch wenn diese sich in unterschiedlichen Unterverzeichnissen befinden und/oder unterschiedliche Dateierweiterungen haben.</p><p>Partials werden in der Templatedatei angesprochen, in dem ein Doppelpunkt (<em>:</em>) gefolgt vom Dateinamen des Partials in die Templatedatei eingefügt wird. Beispiel: Das Partial <em><code>/templates/partials/assets/images.html</code></em> wird im Template mit <em>:images</em> angesprochen.</p><p>Ebenso wie Templates müssen auch partials nicht zwingend vom Dateityp HTML sein. Stacey erkennt automatisch die Dateierweiterungen <em>.html</em>, <em>.json</em>, <em>.xml</em>, <em>.atom</em>, <em>.rss</em>, <em>.rdf</em> und <em>.txt</em>.</p><h3>Partial Nesting</h3><p>Partials können ineinander verschachtelt werden. So kann beispielsweise ein Partial <em>:media</em> in <code>/templates/partials/assets/media.html</code> beinhalten:</p><pre><code>if $images do  :imagesendifif $video do  :videoendif</code></pre><p>um die entsprechenden Assets aufzurufen, falls sie vorhendne sind.</p><h3>Recursive Partials</h3><p>Partials können Referenzen auf sich selbst enthalten um so eine Rekursion durch verschachtelte zu ermöglichen (z.B. um einen Verzeichnissbaum zu durchlaufen).</p><p>So besteht ist es beispielsweise eleganter, an Stelle einer <code>foreeach</code>-Schleife zwei <strong>verschachtelte Partials</strong> für die Erstellung einer <strong>Navigationsstruktur</strong> zu verwenden. Die sehen dann so aus:</p><p><strong>/templates/partials/navigation/navigation.html</strong></p><pre>&lt;ol id=&quot;navigation&quot;&gt;  <em>&#102;oreach $root do</em>    &lt;li&gt;&lt;a href=&quot;&#64;url&quot;&gt;&#64;page_name&lt;/a&gt; <em>&#58;children</em> &lt;/li&gt;  <em>endforeach</em>&lt;/ol&gt;</pre><p><strong>/templates/partials/navigation/children.html</strong></p><pre><em>i&#102; $children do</em>  &lt;ol&gt;    <em>&#102;oreach $children do</em>      &lt;li&gt;&lt;a href=&quot;&#64;url&quot;&gt;&#64;page_name&lt;/a&gt; <em>&#58;children</em> &lt;/li&gt;    <em>endforeach</em>  &lt;/ol&gt;<em>endif</em></pre>","images":[]},{"title":"","thumb":"","url":"../dokumentation/rss-atom-json/","date":"","updated":"2016-04-07T20:35:07+10:00","title":"","content":"<p>Stacey trifft nicht allzu viele Annahmen hinsichtlich des Formates, in dem Templates geschrieben sind. Es benutzt die Dateierweiterung der Template-Datei, um herauszufinden, welcher Inhaltstyp (content type) ausgeliefert werden soll. Standardmäßig erkennt Stacey die Inhaltstypen <em>.html</em>, <em>.json</em>, <em>.xml</em>, <em>.atom</em>, <em>.rss</em>, <em>.rdf</em> und <em>.txt</em>.</p><p>Auf dieser Grundlage wird auch der RSS-Feed erstellt. Das Verzeichnis <code>/content/feed</code> ist eine ganz normale Stacey-Seite. Der einzige Unterschied besteht darin, dass sie eine .atom-Templatedatei an Stelle einer .html-Templatedatei nutzt.</p><p>Wenn man nun also an Stelle des Atom-Formats das RSS2-Format nutzen will, muss die Datei <code>/templates/feed.atom</code> umbenannt werden in <code>/templates/feed.rss</code> und der INhalt muss so verändert werden:</p><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;rss version=&quot;2.0&quot;&gt;  &lt;channel&gt;    &lt;title&gt;<em>&#64;name</em>&apos;s <em>&#64;feed_name</em>&lt;/title&gt;    &lt;link&gt;http://<em>&#64;base_url</em>/<em>&#64;permalink</em>/&lt;/link&gt;    &lt;description&gt;<em>&#64;description</em>&lt;/description&gt;  <em>&#58;feed_loop</em>  &lt;/channel&gt;&lt;/rss&gt;</pre><h2>Cleaning JSON</h2><p>Stacey komprimiert die JSON-Ausgabe automatisch und entfernt Kommas am Ende. So erzeugt das folgende Template</p><pre><em>get \"/\" do</em>{  \"pages\": [    <em>&#102;oreach $children do</em>      { \"title\": \"<em>&#64;title</em>\" },    <em>endforeach</em>  ]}<em>end</em></pre><p>diesen Code</p><pre>  {\"pages\":[{\"title\":\"Projects\"},{\"title\":\"About\"},{\"title\":\"Contact\"}]}</pre>","images":[]},{"title":"Kontaktformular","thumb":"","url":"../dokumentation/kontaktformulareinbauen/","date":"","updated":"2016-04-07T20:35:08+10:00","title":"Kontaktformular","content":"<p>Ein Kontaktformular gehört nicht zur Standardausstattung bei Stacey Version 2.3.0. Ich habe habe trotzdem eine Lösung gefunden. Vor längere Zeit habe ich die Datei stacey-contact-form_v0_2.zip aus dem Web herunter geladen. Allerdings scheint das jetzt nicht mehr möglich zu sein. Die Lösung stammt von <a href=\"http://moritzjacobs.de\">Moritz Jacobs</a>, der mit <a href=\"https://github.com/moritzjacobs/cindy\">Cindy</a> auch ein Stacey-Fork entwickelt hat. Ich habe bisher nicht geprüft, ob dieses Kontaktformular im Fork enthalten ist. Bei Bedarf kann ich interessierten Nutzern diese kleine zip-Datei zur Verfügung stellen.</p><h2>Einbau</h2><p>Das zip-Archiv enthält gerade einmal drei Dateien:</p><ul><li>mj-form.php</li><li>mj-contact.css</li><li>mj-contact.php</li></ul><p>So geht man vor:</p><ol><li>Die Datei <code>mj-contact.css</code> wird in das Verzeichnis <code>/public/docs/css</code> kopiert</li><li>Aktivierung der CSS-Datei mit Hilfe von <code>@import url(\"mj-contact.css\")</code> in der Standard-CSS-Datei oder in dem in der Templatedatei (bei mir index.html) <code>&lt;link rel=\"stylesheet\" href=\"@root_path/public/docs/css/mj-contact.css\" type=\"text/css\" media=\"screen\"&gt;</code> eingefügt wird.</li><li>Die Datei <code>mj-form.php</code> wird in das Verzeichnis kopiert, das die Inhaltsdatei enthält. Wenn man also diese Datei in <code>/content/index</code> ablegt, dann wird davon ausgegangen, dass das Kontaktformular auf der Startseite der Website abgelegt wird. Ich habe für diese Demonstration das Kontaktformular nach <code>/content/dokumentation/kontaktformulareinbauen</code> kopiert.</li><li>In die Template-Datei (bei mir index.html) wird eingefügt:<code>&lt;script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js\"&gt;&lt;/script&gt;</code>. Wenn aus anderen Gründen bereits jQuery verwendet wird, dann kann man darauf natürlich verzeichten.</li><li>Ebenfalls in der Templatedatei wird eingefügt <code>foreach $php do content endforeach</code> (Achtung, bei content fehlt das @)</li><li>Auf der untersten Verzeichnisebene wird das Verzeichnis <code>/php</code>angelegt, dorthin wird die Datei <code>mj-contact.php</code> kopiert.</li><li>In der Datei <code>mj-contact.php</code> müssen mit einem geeigneten Editor Anpassungen vorgenommen werden.</li><li>In der Datei mj-form.php müssen ebenfalls Anpassungen vorgenommen werden.</li></ol>","images":[]},{"title":"","thumb":"","url":"../dokumentation/suchmaschinenfreundliche-url/","date":"","updated":"2016-04-07T20:35:08+10:00","title":"","content":"<p>Um den Prozess der Einrichtung eines Stacey CMS zu vereinfachen und abzukürzen nutzt Stacey in der Standardeinstellung abfragebasierte URL. Die Adressen der einzelnen Seiten sehen dann so aus:</p><p><code>http://yourdomain.com/?/page-name/</code></p><p>Man beachte das Fragezeichen! Man kann Stacey jedoch so umstellen, dass \"saubere\" URL erzeugt werden. Oft wird auch behauptet, dass derartige URL <strong>suchmaschinenfreundlicher</strong> seien. Bei dem vorherigen Beispiel verändert sich dann die URL so:</p><p><code>http://yourdomain.com/page-name/</code></p><p>Das Fragezeichen verschwindet also. Die Umstellung ist ganz einfach: man muss lediglich die bereits im Downloadpaket enthaltene Datei <code>htaccess</code> umbenennen in <code>*.*htaccess</code>, also einen <b>Punkt</b> vor den Dateinamen setzten und diese Datei dann auf den Webspace hochladen.</p><p>Übrigens bleiben auch nach Aktivierung der .htaccess die URL in der Form</p><p><code>http://yourdomain.com/?/page-name/</code></p><p>weiterhin gültig. wenn man also versäumt hat, die Umstellung frühzeitig vorzunehmen, dann führen zwischenzeitlich gesetzte Links von anderen Webseiten bzw. <strong>Google</strong> nicht ins Leere.</p><h2>Probleme und Problemchen</h2><p>Allerdings ist es sinnvoll, <b>vorher</b> zu prüfen, ob der eigene Webspace solche .htaccess-Dateien unterstützt und ob auf dem Webspace <strong>mod_rewrite</strong> aktiviert ist. Man fragt hierzu am besten bei der Serveradminstration nach oder legt kurzzeitig eine PHP-Datei mit einem phpinfo()-Aufruf an. Wenn man diese Datei im Browser aufruft, kann man nach der Zeichenkette <strong>mod_rewrite</strong> suchen.</p><p>Wenn man Stacey nicht im Wurzelverzeichnis des Webspace installiert hat, dann muss in den meisten Fällen in der <code>.htaccess</code> die Zeile</p><p><code>#RewriteBase /</code></p><p>zu</p><p><code>RewriteBase /staceyverzeichnis/</code></p><p>geändert werden. In einigen Fällen ist auch dann, wenn Stacey im Wurzelverzeichnis installiert wurde, eine Änderung zu</p><p><code>RewriteBase /</code></p><p>erforderlich.</p><h2>Auswirkungen der .htaccess-Aktivierung</h2><p>Ich habe festgestellt, dass bei Stacey einige Dinge nicht richtig funktionieren, wenn die .htaccess deaktivert bleibt.</p><h3>Feed</h3><p>Mit dem Aufruf</p><p><code>http://yourdomain.com/?/feed/</code></p><p>wird eine scheinbar leere Seite angezeigt. Erst ein Blick in den Quellcode zeigt, dass es Inhalt gibt, der aber nicht angezeigt wird. Möglicherweise liegt auch ein problem mit dem Browser (Firefox) vor. Auf jeden Fall ist die Anzeige mit aktivierter .htaccess und</p><p><code>http://yourdomain.com/feed/</code></p><p>korrekt. Hier funktioniert auch</p><p><code>http://yourdomain.com/feed.atom</code></p><p>oder .json, .html und weitere Dateierweiterungen (siehe .htaccess).</p><h3>XML-Sitemap</h3><p>Ohne .htaccess ergibt</p><p><code>http://yourdomain.com/?/sitemap/</code></p><p>die Fehlermeldung</p><p><code>Undefined offset: 1 in &lt;b&gt;...\app\page-data.inc.php&lt;/b&gt; on line &lt;b&gt;221&lt;/b&gt;&lt;br /&gt;</code></p><p>Wenn die .htaccess aktivert ist, dann funktioniert</p><p><code>http://yourdomain.com/sitemap.xml</code></p><p>korrekt. Allerdings sollte keine \"echte\" XML-datei vorhanden sein, sonst wird diese an Stelle der virtuellen angezeigt. Hingegen führt</p><p><code>http://yourdomain.com/sitemap/</code></p><p>zur Fehlermeldung</p><p><code>Undefined offset: 1 in &lt;b&gt;...\app\page-data.inc.php&lt;/b&gt; on line &lt;b&gt;221&lt;/b&gt;&lt;br /&gt;</code></p><h3>JSON</h3><p>In beiden Einstellungsvarianten wird anscheinend vergleichbarer Code erzeugt. Da die URL unterschiedlich sind, ist der Umfang des Codes natürlich auch unterschiedlich.</p><p>Bei einigen Webspaceanbietern kann es vorkommen, dass je nach verwendetem FTP-Programm die hochgeladene .htaccess auf dem Webspace nicht angezeigt wird. Abhilfe schafft oft schon eine Veränderung der Einstellungen des FTP-Programms. Auf jeden Fall ist es aber auch in dieser Situation möglich eine geänderte .htaccess hoch zu laden.</p><h3>robots.txt</h3><p><code>http://yourdomain.com/?/robots/</code></p><p>liefert zwar eine entsprechende Datei, allerdings entspricht diese URL nicht den Konventionen.</p><p><code>http://yourdomain.com/?/robots/</code></p><p>und</p><p><code>http://yourdomain.com/?/robots.txt</code></p><p>führen dagegen zu einem 404-Fehler bzw. zu einer leeren Seite.</p><p>Mit aktivierter .htaccess führt</p><p><code>http://yourdomain.com/robots.txt</code></p><p>zu einem korrekten Ergebnis.</p><h2>Cleaning JSON</h2>","images":[]},{"title":"PHP Markdown Extra","thumb":"","url":"../dokumentation/php-markdown-extra/","date":"","updated":"2016-04-07T20:35:08+10:00","title":"PHP Markdown Extra","content":"<p>PHP <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra ist eine spezielle Erweiterung des PHP <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr>. PHP <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra verfügt über einige nützliche Erweiterungen gegenüber dem \"normalen\" <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr>, der Standardvariante. Um die geht es hier als erstes. Danach rkläre ich die Zusätze.</p><h2><abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Standard</h2><h3>Überschriften</h3><p>Überschriften kann man auf zweierlei Art und Weise erzeugen:</p><ul><li>durch eine beliebe Anzahl von <code><em>---</em></code> bzw. <code><em>====</em></code> <b>nach</b> dem eigentlichen Überschriftentext können h1- bzw. h2-Überschriften erzeugt werden.</li><li>durch <code><em>#</em></code> , <code><em>##</em></code> bis <code><em>######</em></code> am Anfang der Zeile <b>vor</b> dem eigentlichen Überschriftentext können h1, h2 bis h6 Überschriften erzeugt werden.</li></ul><h4>Beispiel Überschrift</h4><pre>##### So wird eine H5-Überschrift erzeugt</pre><p>ergibt</p><h5>So wird eine H5-Überschrift erzeugt</h5><h3>Zitate</h3><p>Die Darstellung für Zitatabschnitte wird erreicht, indem dem Textabschnitt ein <code><em>></em> </code>vorangestellt wird. Doppelt <code><em>>></em></code> ergibt sich ein Zitat des Zitates usw. Im HTML-Code wird dann &lt;blockquote&gt;&lt;/blockquote&gt; erzeugt.</p><h4>Beispiel Zitat</h4><pre>> Hier zitiere ich etwas</pre><blockquote>  <p>Hier zitiere ich etwas</p></blockquote><pre>>> Hier zitiere ich ein Zitat</pre><blockquote>  <blockquote>    <p>Hier zitiere ich ein Zitat</p>  </blockquote></blockquote><h3>Listen</h3><p>Ungeordnete Listen werden mit einem <code>_*_</code> am Anfang der Zeile erzeugt, geordnete Listen, also solche mit numerischer Aufzählung durch <code>_1._</code>, <code>_2._</code> usw. am Anfang der Zeile. Bei ungeordneten Listen sind aber auch andere Zeichen am zeilenbeginn möglich, bspw. +, -</p><h3>Beispiele Listen</h3><pre>* Auf* zäh* lung</pre><p>erzeugt</p><ul><li>Auf</li><li>zähl</li><li>lung</li></ul><p>und</p><pre>1. Auf2. zäh3. lung</pre><p>erzeugt</p><ol><li>Auf</li><li>zähl</li><li>lung</li></ol><h2><abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h2><p>Nach den Ausführungen zur <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Grundvariante stelle ich nun die Erweiterungen von <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra vor.</p><h2>Code mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h2><pre><code>Code oder kein Code</code></pre><h2>Definitionslisten mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h2><dl><dt>Apple</dt><dd>Pomaceous fruit of plants of the genus Malus in the family Rosaceae.</dd><dt>Orange</dt><dd>The fruit of an evergreen tree of the genus Citrus.</dd></dl><h3>Fussnoten  mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h3><p>PHP <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra verfügt über einen speziellen Fussnotenmechanismus. Dazu wird hinter dem mit einer Fussnote zu versehenden Text in eckigen Klammern das Carret-Zeichen gefolgt von einer Ziffer eingegeben. Der eigentliche Fussnotentext wird erzeugt, in dem die gleiche Zeichenfolge, gefolgt von einem Doppelpunkt am Anfang der Zeile stehen, danach folgt der Fussnotentext. <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> extra erzeugt automatisch am Ende des Dokumentes einen speziellen Fussnotenabschnitt, der etwa so aussieht:</p><pre>&lt;div class=&quot;footnotes&quot;&gt;&lt;hr&gt;  &lt;ol&gt;    &lt;li id=&quot;fn:1&quot;&gt;      &lt;p&gt;Erste Fussnote.&amp;nbsp;        &lt;a rev=&quot;footnote&quot; href=&quot;#fnref:1&quot;&gt;&#8617;&lt;/a&gt;      &lt;/p&gt;    &lt;/li&gt;    &lt;li id=&quot;fn:2&quot;&gt;      &lt;p&gt;Zweite Fusnote.&amp;nbsp;        &lt;a rev=&quot;footnote&quot; href=&quot;#fnref:2&quot;&gt;&#8617;&lt;/a&gt;      &lt;/p&gt;    &lt;/li&gt;  &lt;/ol&gt;&lt;/div&gt;</pre><p>Diesen Abschnitt kann man durch entsprechende <strong>CSS</strong>-Anweisungen nach eigenen Wünschen formatieren. Das Backlinkzeichen in der Fussnote (<em>&#8617;</em>) ist allerdings direkt im PHP-Code des <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr>-Parsers festgelegt.</p><h4>Beispiel Fussnoten mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h4><p>Dieser Text hat die 1. Fussnote.<sup id=\"fnref:1\"><a href=\"#fn:1\" class=\"footnote-ref\">1</a></sup>Dieser Text hat die 2. Fussnote.<sup id=\"fnref:2\"><a href=\"#fn:2\" class=\"footnote-ref\">2</a></sup></p><h3>Abkürzungen mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h3><p><abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> kann auch mit sogenannten Abkürzungen umgehen. Diese entsprechen dem <code>&lt;abbr&gt;&lt;/abbr&gt;</code>-Tag. Diese werden erzeugt, in dem man, beginnend direkt am <b>Anfang</b> einer Zeile, Code nach diesem Muster einfügt: <strong><code>*[Abkürzung]: Abkürzungserklärung</code></strong>. Bei diesen Abkürzungen wird zwischen Groß- und Kleinschreibung unterschieden, daher wird <b>markdown</b> wird nicht erklärt.</p><h3>Beispiel Abkürzungen mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h3><p>Auf dieser Seite ist das Wort Markup mit einer Abkürzungserklärung versehen, also <code>*[Markdown]: Markdown ist nicht Markup</code>.</p><h3>Tabellen mit <abbr title=\"Markdown ist nicht Markup\">Markdown</abbr> Extra</h3><table><thead><tr>  <th>Item</th>  <th align=\"right\">Value</th></tr></thead><tbody><tr>  <td>Computer</td>  <td align=\"right\">$1600</td></tr><tr>  <td>Phone</td>  <td align=\"right\">$12</td></tr><tr>  <td>Pipe</td>  <td align=\"right\">$1</td></tr></tbody></table><table><thead><tr>  <th>Item</th>  <th align=\"center\">Value</th></tr></thead><tbody><tr>  <td>Computer</td>  <td align=\"center\">$1600</td></tr><tr>  <td>Phone</td>  <td align=\"center\">$12</td></tr><tr>  <td>Pipe</td>  <td align=\"center\">$1</td></tr></tbody></table><table><thead><tr>  <th>Item</th>  <th align=\"left\">Value</th></tr></thead><tbody><tr>  <td>Computer</td>  <td align=\"left\">$1600</td></tr><tr>  <td>Phone</td>  <td align=\"left\">$12</td></tr><tr>  <td>Pipe</td>  <td align=\"left\">$1</td></tr></tbody></table><div class=\"footnotes\"><hr /><ol><li id=\"fn:1\"><p>Erste Fussnote.&#160;<a href=\"#fnref:1\" rev=\"footnote\" class=\"footnote-backref\">&#8617;</a></p></li><li id=\"fn:2\"><p>Zweite Fusnote.&#160;<a href=\"#fnref:2\" rev=\"footnote\" class=\"footnote-backref\">&#8617;</a></p></li></ol></div>","images":[]}]"pages":[{"title":"Demo Standardvariablen von Stacey","thumb":"","url":"../tests-demos/variablendemo/","date":"","updated":"2016-04-07T20:35:09+10:00","title":"Demo Standardvariablen von Stacey","content":"<p>Das sind die Standardvariablen von Staceyspecialcontent: inhalt</p>","images":[]},{"title":"Stacey Musterseiten","thumb":"","url":"../tests-demos/verwendete-dateien/","date":"","updated":"2016-04-08T08:40:55+10:00","title":"Stacey Musterseiten","content":"<p>In diesem Abschnitt werden einige Musterseiten vorgestellt. Damit insgesamt alles schön übersichtlich bleibt aber auch eine Zusammenstellung der verwendeten Ressourcen.</p><h2>Das Hauptdesign bzw. Haupttemplate</h2><p>Das Haupttemplate ist das Template, das auf dieser Seite sowie auf allen allgemein erklärenden Seiten verwendet wird. Dazu gehören:</p><ul><li>die Inhaltsdateien index.txt in den Verzeichnisse /content/index, /content/50.dokumentation, /content/45.tests-demos, /content/43.editoren </li></ul><h2>Sonderseiten</h2><p>Sonderseiten sind:</p><ul><li>Der Atom-Feed</li><li>die Datei robots.txt</li><li>die Datei sitemap.xml</li><li>der json_feed.json</li></ul><h3>Atom-Feed</h3><p>Der Atom-Feed ist über diesen <a href=\"/feed/\" title=\"Atom-Feed ansehen\">Link</a> erreichbar.Allerdings bleibt die Seite sowohl unter Stacey 2.3.0 und 3.0.0 auf Host4Free als auch auf dem localhost 7.0.4 unter Stacey 3.0 leer. Auf einer früheren Version des localhost hat es noch funktioniert. Möglicherweise ist ein bestimmtes PHP-Modul nicht verfügbar. Dieser Atom Feed wird erzeugt über:</p><ul><li>Die Datei <code>/content/feed/feed.txt</code>, die nur die Angabe zu <code>feed_name</code> enthält.</li><li>Die Datei <code>/templates/feed.atom</code> die die Grundstruktur des Feeds enthält und das Partial <code>/templates/partials/feed/feed_loop.atom</code> aufruft</li><li>Die Datei <code>/templates/partials/feed/feed_loop.atom</code>, die die Dateien <code>feed_children.atom</code> und <code>feed_entry.atom</code> im gleichen Verzeichnis aufruft</li><li>Die Datei <code>/templates/partials/feed/assets/feed_images.atom</code>, die von der bereits erwähnten Datei <code>feed_entry.atom</code> aufgerufen wird.</li></ul><h3>robots.txt</h3><p>Diese Datei ist über <a href=\"/robots.txt\" title=\"robots.txt anzeigen\">robots.txt</a> erreichbar. Sie wird erzeugt von</p><ul><li>Der leeren Platzhalter-Datei <code>/content/robots/robots.txt</code></li><li>Der Template-Datei <code>/templates/robots.txt</code>, die den eigentlichen Inhalt mitbringt.</li></ul><p>Auf Host4Free unter Stacey 2.3.0 funktionierte die Anzeige noch, unter Stacey 3.0.0  gibt es aber ebenso wie auf dem localhost 7.0.4 unter Stacey 3.0 den Fehler <strong>Zugriff verweigert! Error 403</strong></p><h3>sitemap.xml</h3><p>Diese Datei ist über <a href=\"/sitemap.xml\" title=\"sitemap.xml anzeigen\">sitemap.xml</a> erreichbar. Sie wird erzeugt von</p><ul><li>Der leeren Platzhalter-Datei <code>/content/sitemap/sitemap.txt</code></li><li>Der Template-Datei <code>/templates/sitemap.xml</code>, die die beiden Partials <code>sitemap-children.xml</code> und <code>sitemap-url.xml</code> im Verzeichnis <code>/templates/partials/sitemap</code> aufruft.</li></ul><p>Diese Sitemap funktioniert sowohl unter Stacey 2.3.0 und 3.0.0 auf Host4Free wie auch unter Stacey 3.0 auf dem localhost 7.0.4</p><h3>Der JSON-Feed</h3><p>Dieser Feed ist über <a href=\"/json/\" title=\"JSON-Feed ansehen\">JSON</a> erreichbar. Er wird erzeugt über:</p><ul><li>Die Platzhalter-Datei <code>/content/json/json_feed.txt</code></li><li>Die Template-Datei <code>/templates/json_feed.json</code>. Diese Datei bietet ein interessantes Anschauungsmaterial. </li></ul><p>Diese JSON-Feed funktioniert sowohl unter Stacey 2.3.0 und 3.0.0 auf Host4Free wie auch unter Stacey 3.0 auf dem localhost 7.0.4</p>","images":[]},{"title":"Grafiken Bilder1","thumb":"","url":"../tests-demos/grafiken-bilder-1/","date":"","updated":"2016-04-07T20:35:12+10:00","title":"Grafiken Bilder1","content":"<p>Mit Stacey hat man mehrere Möglichkeiten, Grafiken und andere <strong>Multimediainhalte</strong> in die Seiten einzufügen.</p><h2>Markdown- oder HTML-Code</h2><p>Eine sehr einfache Möglichkeit ist das Einfügen direkt mit Hilfe von Markdown- oder HTML-Code in der Inhaltsdatei. Das habe ich zum Beispiel <a href=\"/editoren/Markdownpad/\" title=\"Bilder direkt einfügen\">hier</a> gemacht habe. Dabei habe ich die Grafikdatei aber nicht  wie allgemein in der Stacey-Anleitung empfohlen im Verzeichnis des Inhaltsdatei abgelegt sondern in einem extra Verzeichnis <code>/bilder</code>. Ansonsten kann es geschehen, dass man mit anderen Methoden des Einfügens in Konflikt kommt.</p><h2>Asset-Partials</h2><p>Eine andere Möglichkeit ist das Einfügen mit Hilfe der vordefinierten <strong>Partials</strong>. Wie <a href=\"/dokumentation/variablen-typen/\" title=\"Zu Partials\">bereits beschrieben</a>, gibt es im Verzeichnis /templates/partials/assets die folgenden Asset-Partials</p><ul><li>html.html</li><li>images.html</li><li>media.html</li><li>pdfs.html</li><li>swf.html</li><li>video.html</li></ul><p>die man nutzen kann, in dem man in die Haupttemplatedatei oder in die Inhaltsdatei einen oder mehrere der entsprechenden Platzhalter, also <em>html</em>, <em>images</em>, <em>media</em> usw. jeweils mit einem <strong>Doppelpunkt davor</strong> einfügt. Dann werden alle im Verzeichnis der Textseite enthaltenen Dateien entsprechenden Typs in die generierte HTML-Seite eingefügt. Der Platzhalter <em>media</em> ist ein übergreifendes Element, dass auf alle anderen Inhalte (außer <em>pdf</em>) zurückgreift.</p><h3>Beispiel 1</h3><p>:images{{ % include 'partials/assets/images.html' % }}</p><p>Bei diesem kleinen Beispiel sieht man jedoch, dass ein unangenehmer Nebeneffekt auftritt, weil mit dem Partial auch die Parameter für die Höhe und Breite des Bildes mit übergeben werden.</p><h3>Beispiel 2</h3><p>Ich habe daher das Partial modifiziert::imagesbs01</p><p>Die Modifizierung betrifft nicht nur die Übergabe des Parameters für die Bildhöhe (die weggelassen wurde) sondern auch die Angaben für die Attribute <em>alt</em> und <em>title</em>.</p>","images":[{"url":"../content/20.tests-demos/75.grafiken-bilder-1/4920-pyrenaeen-murmeltier.jpg","name":"4920 pyrenaeen murmeltier"},{"url":"../content/20.tests-demos/75.grafiken-bilder-1/4925-pyrenaeen-maus.jpg","name":"4925 pyrenaeen maus"},{"url":"../content/20.tests-demos/75.grafiken-bilder-1/4956-pyrenaeen-grille.jpg","name":"4956 pyrenaeen grille"}]},{"title":"Slideshow 1","thumb":"","url":"../tests-demos/slideshow-01/","date":"","updated":"2016-04-07T20:35:17+10:00","title":"Slideshow 1","content":"<p>Slideshow 1:galerybs01</p><pre><code>&lt;!-- Anfang: Excel 2 HTML von Karl Fahrtmann //--&gt;&lt;table style=\"table-layout: fixed; background-color: #ffffff; border-collapse: collapse; border: none;\" width=\"249\"&gt;  &lt;colgroup&gt;    &lt;col width=\"83\"&gt;    &lt;col width=\"83\"&gt;    &lt;col width=\"83\"&gt;  &lt;/colgroup&gt;  &lt;tr style=\" border: none; height: 17px;\"&gt;    &lt;td style=\"border: none; margin: 0; padding: 0 2px; overflow: hidden;text-align: left;vertical-align: bottom;background-color: #ffff00;color: #ff0000; font-family: Arial;border: none;\"&gt;Otto&lt;/td&gt;    &lt;td style=\"border: none; margin: 0; padding: 0 2px; overflow: hidden;text-align: left;vertical-align: bottom;background-color: #ffff00; color: #000000; font-family: Arial;border-bottom: none;border-top: none;\"&gt;Paul&lt;/td&gt;    &lt;td style=\"border: none; margin: 0; padding: 0 2px; overflow: hidden;text-align: left;vertical-align: bottom;background-color: #00ccff; color: #000000; font-family: Arial;border: none;\"&gt;Dirk&lt;/td&gt;  &lt;/tr&gt;&lt;/table&gt;&lt;!-- Ende: Excel 2 HTML von Karl Fahrtmann //--&gt;</code></pre>","images":[{"url":"../content/20.tests-demos/85.slideshow-01/4920-pyrenaeen-murmeltier.jpg","name":"4920 pyrenaeen murmeltier"},{"url":"../content/20.tests-demos/85.slideshow-01/4925-pyrenaeen-maus.jpg","name":"4925 pyrenaeen maus"},{"url":"../content/20.tests-demos/85.slideshow-01/4956-pyrenaeen-grille.jpg","name":"4956 pyrenaeen grille"}]},{"title":"Nivo Slider","thumb":"","url":"../tests-demos/slides-nivo/","date":"","updated":"2016-04-07T20:35:20+10:00","title":"Nivo Slider","content":"<p>Der Nivo Slider ist gegenwärtig einer der bekanntesten Slider. Der Einbau Stacey ist unproblematisch, man muss im Grund nur der allgemeinen Einbauanleitung folgen.Ich habe mich, um flexibler sein, entschieden, den Einbau mit Hilfe eines <strong>Asset-Partials</strong> umzusetzen.Der Nivo-Slider in der Version 3.2 erfordert mindestens jQuery Version 1.7. Den <strong>Link zur jQuery-Bibliothek</strong> habe ich direkt in die Haupttemplatedatei <em>index.html</em> eingefügt, da diese Bibliothek auch von anderen Funktionen genutzt wird.In <code>/templates/partials/assets/</code> habe ich das Asset-Partial<em>nivoslider.html</em> angelegt. Dieses enthält die Verlinkungen zur Nivo-CSS-Datei <em>nivo-slider.css</em> und zum Nivo-jQuery-Plugin <em>jquery.nivo.slider.pack.js</em> sowie den jQuery-Initialisierungscode. Schließlich ist noch HTML-Code erforderlich.:nivosliderMan kann Doppelpunkt-nivoslider sowohl in einer Templatedatei einbauen, aber auch direkt in die Inhaltsseite. In letzterem Fall soll man darauf achten, dass vor und nach Doppelpunkt-nivoslider keine Leerzeilen stehen, da ansonsten überflüssige bzw. sogar fehlerhafte <em><code>&lt;p&gt;</code></em> bzw. <em><code>&lt;/p&gt;</code></em>-Tags erzeugt werden.</p>","images":[{"url":"../content/20.tests-demos/90.slides-nivo/4920-pyrenaeen-murmeltier.jpg","name":"4920 pyrenaeen murmeltier"},{"url":"../content/20.tests-demos/90.slides-nivo/4925-pyrenaeen-maus.jpg","name":"4925 pyrenaeen maus"},{"url":"../content/20.tests-demos/90.slides-nivo/4956-pyrenaeen-grille.jpg","name":"4956 pyrenaeen grille"}]}]"pages":[{"title":"MarkdownPad","thumb":"","url":"../editoren/Markdownpad/","date":"","updated":"2016-04-07T20:35:20+10:00","title":"MarkdownPad","content":"<p>Der MarkdownPad ist ein Programm, mit dem man auf einfache Art und weise Markdown-Dateien bearbeiten kann. Obwohl die Stacey-Inhaltsdateien die Dateiendung <strong><code>txt</code></strong> haben, können sie jedoch auch Markdown-Formatierungen enthalten. Somit steht einer Bearbeitung dieser Dateien mit dem <strong>MarkdownPad</strong> nichts mehr im Wege.MarkdownPad 2 gibt es als kostenlose Version und als Pro-Version. Obwohl die Pro-Version lediglich 14,95 Dollar kostet, dürfte in dem meisten Fällen die einfache Version ausreichen. Hier dazu ein Screenshot:</p><p><img src=\"/bilder/screenshot-markdownpad.jpg\" alt=\"Screenshot des Markdown Editors MarkdownPad\" /></p><p>MarkdownPad Free</p><ul><li>zeigt Markdown-Code und formatierten Code gleichzeitig</li><li>kann bis zu 4 Dateien gleichzeitig öffnen</li><li>beherrscht die gängigsten Formatierungsmöglichkeiten sowie das Einfügen von Links und Bildern</li><li>kann die Inhalte als HTML exportieren</li><li>beherrscht Markdown-<strong>Syntaxhighlighting</strong>, allerdings nicht immer korrekt</li><li>unterstützt die Rechtschreibkontrolle in vielen Sprachen (verwendet werden die OpenOffice Wörterbücher)</li></ul>","images":[]},{"title":"Weitere Editoren","thumb":"","url":"../editoren/Weitere-Editoren/","date":"","updated":"2016-04-07T20:35:20+10:00","title":"Weitere Editoren","content":"<p>Es gibt noch eine große Anzahl weiterer Editoren und Tools zur Bearbeitung von MarkDown Dateien. Allein <a href=\"http://mashable.com/2013/06/24/markdown-tools/\" title=\"78 Markdown Tools\">hier</a> werden mehr knapp 80 aufgezählt.</p>","images":[]}]"pages":[{"title":"Subsub1","thumb":"","url":"../subs/subsub1/","date":"","updated":"2016-04-07T20:35:21+10:00","title":"Subsub1","content":"<p>Die Seite Subsub1 hat noch zwei Unterseiten</p>","images":[]},{"title":"Subsub2","thumb":"","url":"../subs/subsub2/","date":"","updated":"2016-04-07T20:35:21+10:00","title":"Subsub2","content":"<p>Subsub2 hat keine weiteren Unterseiten.</p>","images":[]}]"pages":[{"title":"The Test Project 1","thumb":"../content/50.musterseiten/10.project-1/thumb.jpg","url":"../musterseiten/project-1/","date":"2009, Jun","updated":"2016-04-07T20:35:22+10:00","title":"The Test Project 1","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est &amp; laborum.</p>","images":[{"url":"../content/50.musterseiten/10.project-1/01.jpg","name":"01"},{"url":"../content/50.musterseiten/10.project-1/02.jpg","name":"02"},{"url":"../content/50.musterseiten/10.project-1/03.jpg","name":"03"},{"url":"../content/50.musterseiten/10.project-1/04.jpg","name":"04"}]},{"title":"Movie Project 2","thumb":"../content/50.musterseiten/19.movie-project-2/thumb.jpg","url":"../musterseiten/movie-project-2/","date":"2009, Feb","updated":"2016-04-07T20:35:24+10:00","title":"Movie Project 2","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[]},{"title":"The Test Project 3","thumb":"../content/50.musterseiten/28.project-name-3/thumb.jpg","url":"../musterseiten/project-name-3/","date":"2009, Aug","updated":"2016-04-07T20:35:25+10:00","title":"The Test Project 3","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[{"url":"../content/50.musterseiten/28.project-name-3/01.jpg","name":"01"},{"url":"../content/50.musterseiten/28.project-name-3/02.jpg","name":"02"},{"url":"../content/50.musterseiten/28.project-name-3/03.jpg","name":"03"},{"url":"../content/50.musterseiten/28.project-name-3/04.jpg","name":"04"}]},{"title":"Youtube Project 4","thumb":"../content/50.musterseiten/37.youtube-project-4/thumb.jpg","url":"../musterseiten/youtube-project-4/","date":"2009, Dec","updated":"2016-04-07T20:35:26+10:00","title":"Youtube Project 4","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[]},{"title":"The Vimeo Project 5","thumb":"../content/50.musterseiten/46.vimeo-project-5/thumb.jpg","url":"../musterseiten/vimeo-project-5/","date":"2009, Jun","updated":"2016-04-07T20:35:26+10:00","title":"The Vimeo Project 5","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[]},{"title":"The SWF Project 6","thumb":"../content/50.musterseiten/55.swf-project-6/thumb.jpg","url":"../musterseiten/swf-project-6/","date":"2009, Jun","updated":"2016-04-07T20:35:27+10:00","title":"The SWF Project 6","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[]},{"title":"The Mixed Media Project 7","thumb":"../content/50.musterseiten/64.mixed-media-project-7/thumb.jpg","url":"../musterseiten/mixed-media-project-7/","date":"2009, Jun","updated":"2016-04-07T20:35:28+10:00","title":"The Mixed Media Project 7","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[{"url":"../content/50.musterseiten/64.mixed-media-project-7/3.jpg","name":"3"}]},{"title":"The Test Project 8","thumb":"../content/50.musterseiten/73.project-name-8/thumb.jpg","url":"../musterseiten/project-name-8/","date":"2009, Jun","updated":"2016-04-07T20:35:29+10:00","title":"The Test Project 8","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>","images":[{"url":"../content/50.musterseiten/73.project-name-8/01.jpg","name":"01"},{"url":"../content/50.musterseiten/73.project-name-8/02.jpg","name":"02"},{"url":"../content/50.musterseiten/73.project-name-8/03.jpg","name":"03"},{"url":"../content/50.musterseiten/73.project-name-8/04.jpg","name":"04"}]},{"title":"Project 9","thumb":"../content/50.musterseiten/82.project-name-9/thumb.jpg","url":"../musterseiten/project-name-9/","date":"2009, Jun","updated":"2016-04-07T20:35:30+10:00","title":"Project 9","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>","images":[{"url":"../content/50.musterseiten/82.project-name-9/01.jpg","name":"01"},{"url":"../content/50.musterseiten/82.project-name-9/02.jpg","name":"02"},{"url":"../content/50.musterseiten/82.project-name-9/03.jpg","name":"03"},{"url":"../content/50.musterseiten/82.project-name-9/04.jpg","name":"04"}]},{"title":"The Test Project 10","thumb":"../content/50.musterseiten/91.project-name-10/thumb.jpg","url":"../musterseiten/project-name-10/","date":"2009, Jun","updated":"2016-04-07T20:35:31+10:00","title":"The Test Project 10","content":"<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Iñtërnâtiônàlizætiøn</p>","images":[{"url":"../content/50.musterseiten/91.project-name-10/01.jpg","name":"01"},{"url":"../content/50.musterseiten/91.project-name-10/02.jpg","name":"02"},{"url":"../content/50.musterseiten/91.project-name-10/03.jpg","name":"03"},{"url":"../content/50.musterseiten/91.project-name-10/04.jpg","name":"04"}]}]"pages":[{"title":"Stichworte","thumb":"","url":"../stichworte/weitere/","date":"","updated":"2016-04-07T20:35:33+10:00","title":"Stichworte","content":"<p><strong>hermione</strong> granger femslash fanfictionneue erde entdecktlivre embratel 2° via<strong>welchol</strong> 1875 mgembratel a cobrar internacionalcontato livre embratelembratel livre 2 vianeue erde<strong>embratel</strong> livre segunda via contacheap runescape goldinxs best rar chomikujlista telefonica embratelenoxaparinsegunda via conta embratelneverfull gm damierduragesicembratel 2 via de contalivre <strong>embratel</strong> faturanuvaring late periodhermione norris nudetim hecker instrumental tourist rarembratel livre 2a. via de contaembratel internacional a cobrar<strong>creon</strong> 24000dvd zu mkvsegunda via embratel livrewellbutrin amphetaminebrasildireto.net2 via de conta da embratelduragesic patch conversiontime turner necklace ebaylivre <strong>embratel</strong> 2 via</p>","images":[]}]}