1. Web Design
  2. HTML/CSS

Wir stellen vor: Stacey: die leichte CMS-Alternative

Scroll to top
28 min read

German (Deutsch) translation by Federicco Ancie (you can also view the original English article)

Die Welt der Content-Management-Systeme bietet mehr als Wordpress, Squarespace und Joomla. Ich zeige Ihnen eine leichte und datenbankfreie Alternative, die sich perfekt zum einfachen Bloggen eignet. Ihr Name ist Stacey..


Wer ist Stacey?

Stacey ist ein leichtgewichtiges PHP-CMS, das von Anthony Kolber entwickelt wurde. Im Gegensatz zu den meisten CMS gibt es keine Datenbank, keine Admin-Oberfläche, nur eine kleine Sammlung von PHP-Dateien. Werfen Sie den Anwendungsordner auf einen PHP-Server und Sie können loslegen.

Stacey speichert Inhalte in Form von Verzeichnissen und Textdateien. Für jeden Eintrag (sei es Blogbeitrag, Portfolio, Tutorial, was auch immer) fügen Sie einen Ordner hinzu, in dem Sie eine begleitende Textdatei platzieren, sowie alle anderen Extras, die Sie möchten. Stacey durchsucht die Ordner und generiert ein Frontend wie jedes andere CMS.

Sie müssen auch nicht mit PHP vertraut sein, um ein Theme zu erstellen. Stacey verwendet eine Vorlagensprache, die es Ihnen ermöglicht, Daten auszugeben und einige grundlegende Tricks auszuführen, aber nichts, was Ihnen den Kopf verdrehen lässt. Wenn Sie mit HTML und CSS vertraut sind, sind Sie in guten Händen.


Warum auch nur mit der Idee flirten?

Manchmal sind die CMS-Pakete, die wir alle kennen (denken Sie an WordPress, Drupal), einfach zu mächtig. Sie haben sich zu enorm leistungsfähigen und vielseitigen Plattformen entwickelt, sind jedoch oft zu komplex, wenn Sie nur gelegentlich einen Blogbeitrag schreiben möchten.

Stacey ist jedoch sehr konzentriert. Es gibt auch ein zusätzliches Sicherheitselement, da sie keine Datenbank zum Hacken hat (Sicherheit ist ein Faktor, der zu einigen datenbankfreien CMS-Ansätzen geführt hat; wie Jekyll, das lokal ausgeführt wird und statisches HTML für die Bereitstellung auf Ihrem Webserver generiert.)

Sie könnten denken, dass die Arbeit mit und das Organisieren von Textdateien ein Rezept für eine Katastrophe ist, aber es ist tatsächlich ziemlich effektiv. Das Templating von Stacey macht es überschaubar und überraschend skalierbar.

Schließlich macht es immer Spaß, einfach mit verschiedenen Dingen zu spielen.

Genug geredet, stellen wir uns vor, damit Sie sich selbst ein Bild machen können.


Erste Verabredung

Um die Funktionen und das Innenleben von Stacey zu demonstrieren, müssen wir uns zunächst einen einfachen Blog erstellen. Ich werde nicht auf den gesamten HTML/CSS-Build eingehen, aber lassen Sie uns einfach die Dateien aufschlüsseln, mit denen ich arbeite.

Hinweis: Wenn Sie an diesem Teil nicht interessiert sind, können Sie gerne zum Kern des Tutorials springen, in dem wir mit der Erstellung unseres CMS beginnen.

Zunächst muss ich mir also Gedanken machen, welche Seiten (und damit Vorlagen) ich benötige. Standard-Blog-Zeug; eine index.html, auf der ich die letzten Blog-Posts auflisten kann, einen einzelnen Post sowie eine Seite zum Anzeigen von Dingen wie "Über mich", "Kontakt" usw. So allgemein wie möglich!

Beginnen wir mit einer Blanco-HTML-Seite:

1
<!DOCTYPE html>
2
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
3
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
4
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
5
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]-->
6
<head>
7
8
	<!-- Metaaaa -->
9
	<meta charset="utf-8">
10
	<title>Staceyapp demo</title>
11
	<meta name="description" content="Demo for Staceyapp">
12
	<meta name="author" content="Ian Yates">
13
14
	<!-- Viewport -->
15
	<meta name="viewport" content="width=device-width, initial-scale=1">
16
17
	<!-- CSS -->
18
	<link rel="stylesheet" href="css/normalize.css">
19
	<link rel="stylesheet" href="css/styles.css">
20
21
	<!--[if lt IE 9]>

22
		<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

23
	<![endif]-->
24
25
	<!-- Favicons -->
26
	<link rel="shortcut icon" href="img/favicon.ico" />
27
	<link rel="apple-touch-icon" href="img/apple-touch-icon.png" />
28
29
</head>
30
<body>
31
32
33
</body>
34
</html>

Alles klar soweit. Wir benötigen eine style.css (in diesem Fall zusammen mit normalize.css) und ich habe auch ein paar Favicons hinzugefügt.

Sie werden feststellen, dass es außer dem HTML5-Shiv keinen Verweis auf jQuery oder andere JavaScripts gibt. Wir brauchen nicht wirklich welche, warum also die Mühe machen, die Vermögenswerte einzubeziehen? Halte die Dinge schlank und gemein. Unsere Dateistruktur sieht momentan ungefähr so aus:


Zweite Basis

Lassen Sie uns diese statische HTML-Seite schnell zusammenfassen, dann können wir uns darauf konzentrieren, Stacey einzubeziehen. Ich habe eine <header> eingefügt, mit einem Logo und einigen Hauptnavigationslinks:

1
		<header class="clearfix">
2
		
3
			<div class="wrapper">
4
		
5
				<h1 class="logo">
6
					<a href="#">Demo</a>
7
				</h1>
8
			
9
				<nav>
10
					<ul>
11
						<li><a href="#">Nav Item 1</a></li>
12
						<li><a href="#">Nav Item 2</a></li>
13
						<li><a href="#">Nav Item 3</a></li>
14
					</ul>
15
				</nav>
16
			
17
			</div> <!--/ wrapper -->
18
			
19
		</header>

Darunter, zumindest auf der Homepage, gibt es einen Heldenbereich, um Besucher anzuziehen:

1
		<section class="hero">
2
3
			<div class="wrapper">
4
		
5
				<h2>I'd Like to Introduce You to a Friend of Mine</h2>
6
				
7
			</div> <!--/ wrapper -->
8
		
9
		</section>

Sie werden feststellen, dass jeder dieser Abschnitte bisher einen wrapper enthält. Dieser Wrapper bestimmt die Breite unseres Inhalts.

Hier ist ein weiterer Abschnitt, unser Hauptinhaltsbereich, der mit einem <aside> beginnt, in dem wir unsere sekundäre Navigation unterbringen:

1
		<section class="main clearfix">
2
		
3
			<div class="wrapper">	
4
		
5
				<aside class="sidebar">
6
				
7
					<ul>
8
						<li><a href="#">How to Skin a Rattlesnake</a></li>
9
						<li><a href="#">Making Money as a Taxi Driver</a></li>
10
						<li><a href="#">Rolling Cheese: the Correct Way</a></li>
11
						<li><a href="#">Photographing Leather</a></li>
12
					</ul>
13
				
14
				</aside><!--/ sidebar -->

Daneben unsere Schnupperartikel, um die Leute in die Blogbeiträge zu führen. Es gibt einige dieser <article>-Elemente:

1
			<div class="tasters">	
2
		
3
					<article>
4
					
5
						<h2>How to Skin a Rattlesnake</h2>
6
						
7
						<p class="meta">by <a href="#">Billy Tiger</a> on <a href="#">2 November 2012</a> with <a href="#">4 comments</a></p>
8
						
9
						<p>You, a bobsleder!? That I'd like to see! Bender, you risked your life to save me! No! The cat shelter's on to me. All I want is to be a monkey of moderate intelligence who wears a suit. that's why I'm transferring to business school!</p>
10
						
11
						<p><a href="#">Read more..</a></p>
12
						
13
						<hr>
14
					
15
					</article>

Nach all unseren Artikeln schließen wir alle Eltern und fügen eine einfache Fußzeile hinzu, die ein paar Links enthält:

1
				</div><!--/ tasters -->	
2
			
3
			</div> <!--/ wrapper -->
4
		
5
		</section><!--/ main -->
6
		
7
		<footer>
8
	
9
			<div class="wrapper">
10
	
11
				<p>&copy; Copyright Ian Yates 2012 <a class="atom-rss" href="#">RSS</a> CMS by <a href="http://www.staceyapp.com">stacey</a>
12
			
13
			</div> <!--/ wrapper -->
14
	
15
		</footer>

Puh, wir sind fertig mit dem Markup! Jetzt das CSS.


Die Vereinbarung abschließen

Unser CSS ist geradlinig. Es gibt keine einzubettenden Bilder, keine Farbverläufe, Randradiuswerte oder obskure CSS3-Effekte. Wir beginnen mit einigen Grundlagen:

1
/* clearfix */
2
.clearfix:before,
3
.clearfix:after {
4
  content: '\0020';
5
  display: block;
6
  overflow: hidden;
7
  visibility: hidden;
8
  width: 0;
9
  height: 0; }
10
11
.clearfix:after {
12
  clear: both; }
13
14
.clearfix {
15
  zoom: 1; }
16
17
    
18
/* apply a natural box layout model to all elements */
19
* { 
20
	-moz-box-sizing: border-box; 
21
	-webkit-box-sizing: border-box; 
22
	box-sizing: border-box;
23
}

Ich füge diese immer ein - clearfix ist einfach sehr nützlich und * { box-sizing: border-box } ermöglicht eine brillant intuitive Art der Manipulation von Elementen.

Der Rest des CSS ist nur Styling. Es enthält die tolle Tomate namens Farbwert, in die ich derzeit verliebt bin. Das Layout folgt einem Mobile-First-Ansatz mit nur einer Medienabfrage bei 700px, um die Dinge in Spalten zu verschieben und die Basisschriftgröße zu erhöhen.

Also, Endergebnis?

Die anderen Seiten folgen mehr oder weniger dem gleichen Aufbau, was uns eine gute Arbeitsgrundlage bietet. Auf mit dem eigentlichen Tutorial!


Schritt 1: Sammeln von Stacey

Dieses Stück ist einfach; Gehen Sie zum GitHub-Repository von Stacey und laden Sie die neuesten Quelldateien (3.0 zum Zeitpunkt des Schreibens) herunter.

Dies ist mehr oder weniger das, was Sie heruntergeladen haben

Vieles von dem, was Sie heruntergeladen haben, ist Demo-Zeug, sodass wir einen Großteil des Überschusses beseitigen können. Wir müssen behalten:

  • Der Ordner "app" und sein Inhalt.
  • Der Ordner "extension" und sein Inhalt.
  • Die Datei "htaccess".
  • Die Datei "index.php".

Außerdem benötigen wir folgende Ordner, diese können aber vorerst komplett geleert werden:

  • Der Ordner "content".
  • Der Ordner "public".
  • Der Ordner "templates".

Schritt 2: Machen Sie Bekanntschaft

Damit die Dinge tatsächlich laufen, müssen Ihre Dateien auf einem php5+-Server gehostet werden. Ob Sie dies auf Ihrem lokalen Computer oder auf einem Live-Webserver tun, liegt bei Ihnen. Auf jeden Fall, sobald Sie Ihr Projekt an der richtigen Stelle haben, besuchen Sie die Root-URL in einem Browser und..

Dangit

Fairerweise haben wir alle Demo-Inhalte entfernt, also fügen wir jetzt einige erforderliche Dateien hinzu und integrieren unser Blog-Theme, damit die Dinge tatsächlich funktionieren.

Platzieren Sie zunächst die von uns erstellte index.html in den Ordner "templates" unseres Stacey-Projekts. Zweitens müssen wir einige globale Variablen setzen, also legen Sie eine Datei in den Ordner "content", nennen Sie sie "_shared.yml" oder "_shared.txt" und füllen Sie sie mit folgendem:

1
name: Ian Yates
2
profession: Web Designer
3
title: Staceyapp Demo | Webdesigntuts+
4
description: A demonstration of Stacey; a framework for building simple dynamic html websites. 
5
email: |
6
  <webdesign@tutsplus.com>

Alles wird in einem Moment klar.

Um schließlich unsere index.html zu verwenden und eine Seite anzuzeigen, fügen Sie einen Ordner namens "index" zu "content" hinzu. Fügen Sie in diesem Ordner eine Datei namens "index.yml" hinzu.

Wenn Sie nun die Seite aktualisieren, sehen Sie, dass auf unsere index.html verwiesen wird (obwohl es immer noch völlig an Stilen fehlt).


Schritt 3: Wie Staceys Verstand funktioniert

Es ist nur fair, dass ich erkläre, was dort passiert ist. Beim Öffnen einer Seite sucht Stacey nach Inhalten im Inhaltsordner. Sie wird sich immer zuerst die "_shared.yml" ansehen, dort haben wir einige globale Variablen wie den Site-Namen usw. Wenn Sie mit YAML nicht vertraut sind, stellen Sie es sich wie von Menschen lesbares Markup vor. Wir könnten hier auch eine .txt-Datei verwenden, tatsächlich erkennt und analysiert Stacey alle Arten von Dateiformaten.

Sie sucht dann nach einem Ordner, der der URL entspricht. Wir haben das Root im Browser geöffnet, also hat sie den Ordner "index" verwendet, um den Inhalt zu bestimmen. Sobald der Inhaltsordner gefunden wurde, sucht sie in diesem Ordner nach einer .txt- oder .yml-Datei. Der Name dieser bestimmten Datei ist sehr wichtig, da dieser dem Namen der Vorlage entspricht, die sie dann aus dem Ordner "templates" holt. Sie wird alles zusammenmischen und das Ergebnis im Browser anzeigen.

Das Umbenennen unserer .yml-Datei würde bedeuten, eine andere Vorlagendatei zu verwenden:

Nachdem das geklärt ist, lassen Sie uns nun unsere index.html vorzeigbar aussehen lassen.


Schritt 4: Assets verknüpfen

Wir haben unsere CSS-Dateien und unsere Favicons bereits vorbereitet, aber unser Template index.html kann sie im Moment nicht finden. Legen wir sie in den Ordner "public" und stellen Sie sicher, dass die Pfade alle an die richtige Stelle zeigen.

Der Ordner "public" wird uns dank einiger .htaccess-Assistenten direkt im Stammverzeichnis des Projekts zur Verfügung gestellt. Das heißt, wir können auf "/css/styles.css" statt auf "/public/css/styles.css" zeigen. Dazu müssen wir zunächst die "htaccess"-Datei in ".htaccess" umbenennen und sicherstellen, dass unser Server ReWrites zulässt (in den meisten Fällen wird Ihr Server diese Funktion standardmäßig haben).

Stacey stellt uns immer ein paar Variablen zur Verfügung. Zum Beispiel können wir {{ page.root_path }} ausgeben, was uns die Wurzel unseres Projekts gibt. Lassen Sie uns unsere Pfade aktualisieren, um sicherzustellen, dass das CSS und die Favicons verbunden sind:

1
	<!-- CSS -->
2
	<link rel="stylesheet" href="{{ page.root_path }}/css/normalize.css">
3
	<link rel="stylesheet" href="{{ page.root_path }}/css/styles.css">
4
5
	<!--[if lt IE 9]>

6
		<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

7
	<![endif]-->
8
9
	<!-- Favicons -->
10
	<link rel="shortcut icon" href="{{ page.root_path }}/img/favicon.ico" />
11
	<link rel="apple-touch-icon" href="{{ page.root_path }}/img/apple-touch-icon.png" />

Wenn Sie die Seite jetzt neu laden, wird die index.html genau so angezeigt, wie wir sie erstellt haben. Ausgezeichnet.


Schritt 5: Worüber redet sie?

Nun, diese geschweiften Klammern, die ich gerade verwendet habe, um eine Variable auszugeben? Sie sind Teil der Twig-Templatsprache, mit der Stacey kommuniziert. Sie müssen kein Entwickler-Genie sein, um Stacey zu verwenden, aber es gibt einige Möglichkeiten, Dinge auszugeben, die Sie beachten müssen.

Es gibt zwei Arten von Trennzeichen: {% ... %} und {{ ... }}. Ersteres wird verwendet, um Anweisungen wie for-Schleifen auszuführen, letzteres gibt das Ergebnis eines Ausdrucks an die Vorlage aus. - Twig-Dokumentation für Designer

Lassen Sie uns den gleichen Wert noch einmal verwenden, um unser Logo zur Root-URL zu verlinken:

1
	<h1 class="logo">
2
		<a href="{{ page.root_path }}">Demo</a>
3
	</h1>

Sehen wir uns nun einige andere Variablen an; Wir haben ein paar in unserer "_shared.yml" gesetzt und Schlüssel-Wert-Paare verwendet, erinnern Sie sich? Lassen Sie uns diese Werte in unseren Metatags verwenden.

1
	<!-- Metaaaa -->
2
	<meta charset="utf-8">
3
	<title>{{ page.title }}</title>
4
	<meta name="description" content="{{ page.description }}">
5
	<meta name="author" content="{{ page.name }}">

Diese Werte werden aus der Datei "_shared.yml" übernommen, es sei denn, wir überschreiben die Variablen in unseren Inhaltsdateien. Wenn wir "title: Margarine" in "index.yml" definieren, wird dieser Wert ausgegeben.

Auf diese Weise können wir Variablen definieren und in den HTML-Templates ausgeben lassen. Lassen Sie uns beispielsweise ein Schlüssel-Wert-Paar für "page_title" in der "index.yml" platzieren. Wir können diese Ausgabe auch im Titel-Metatag haben:

1
	<!-- Metaaaa -->
2
	<meta charset="utf-8">
3
	<title>{{ page.title }} {{ page.page_title }}</title>
4
	<meta name="description" content="{{ page.description }}">
5
	<meta name="author" content="{{ page.name }}">

Wenn dieser Wert nicht verfügbar ist, wird er einfach nicht ausgegeben. Wir können jetzt für jede Seite in unserem Projekt einen bestimmten Seitentitel definieren (aber dazu kommen wir gleich). Kommt jetzt alles zusammen?


Schritt 6: Aufteilen

Bereits?! Keine Panik, ich rede davon, unsere Vorlagendateien aufzuteilen. Wenn Sie jemals eine dynamische Website erstellt haben, haben Sie gemeinsame Assets in eigene Dateien aufgeteilt. Der Header unserer index.html wird beispielsweise für alle unsere Vorlagendateien auf dieselbe Weise verwendet, sodass es keinen Sinn macht, mehrere Kopien davon zu haben. Teilen wir es in eine eigene Datei auf:

1
<!DOCTYPE html>
2
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
3
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
4
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
5
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]-->
6
<head>
7
8
	<!-- Metaaaa -->
9
	<meta charset="utf-8">
10
	<title>{{ page.title }} | {{ page.page_title }}</title>
11
	<meta name="description" content="{{ page.description }}">
12
	<meta name="author" content="{{ page.name }}">
13
14
	<!-- Viewport -->
15
	<meta name="viewport" content="width=device-width, initial-scale=1">
16
17
	<!-- CSS -->
18
	<link rel="stylesheet" href="{{ page.root_path }}/css/normalize.css">
19
	<link rel="stylesheet" href="{{ page.root_path }}/css/styles.css">
20
21
	<!--[if lt IE 9]>

22
		<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

23
	<![endif]-->
24
25
	<!-- Favicons -->
26
	<link rel="shortcut icon" href="{{ page.root_path }}/img/favicon.ico" />
27
	<link rel="apple-touch-icon" href="{{ page.root_path }}/img/apple-touch-icon.png" />
28
29
</head>
30
<body>
31
	
32
		<header class="clearfix">
33
		
34
			<div class="wrapper">
35
		
36
				<h1 class="logo">
37
					<a href="{{ page.root_path }}">Demo</a>
38
				</h1>
39
			
40
				<nav>
41
					<ul>
42
						<li><a href="#">Nav Item 1</a></li>
43
						<li><a href="#">Nav Item 2</a></li>
44
						<li><a href="#">Nav Item 3</a></li>
45
					</ul>
46
				</nav>
47
			
48
			</div> <!--/ wrapper -->
49
			
50
		</header>

Alles bis zum abschließenden </header> wird in allen Vorlagen gleich sein. Schneiden Sie es aus, fügen Sie es in eine neue Datei ein und speichern Sie diese Datei als "head.html" in einem neuen Ordner "partials" im Vorlagenverzeichnis.

Jetzt müssen wir diesen Teil in unsere index.html-Vorlage aufnehmen. Fügen Sie dort, wo Sie es herausgeschnitten haben, diese Codezeile hinzu:

1
{% include 'partials/head.html' %}

Aktualisieren Sie Ihre Homepage und alles sollte genau so aussehen, wie es war, völlig unverändert. Sie können dies natürlich für einige Bereiche der index.html tun; die Fußzeile (einschließlich der schließenden </body>- und </html>-Tags) sollte in einen "footer.html"-Teil eingefügt werden, der Inhalt der Beiseite sowie die sich wiederholenden Artikelproben.

Sobald Sie fertig sind, sollten Sie ein paar Schnipsel in Ihrem "partials"-Ordner und eine etwas leichtere index.html-Vorlage haben, die wie folgt aussieht:

1
 
2
{% include 'partials/head.html' %}
3
	
4
<section class="hero">
5
6
	<div class="wrapper">
7
8
		<h2>I'd Like to Introduce You to a Friend of Mine</h2>
9
		
10
	</div> <!--/ wrapper -->
11
12
</section>
13
14
<section class="main clearfix">
15
16
	<div class="wrapper">	
17
18
		<aside class="sidebar">
19
		
20
			{% include 'partials/nav_articles.html' %}
21
		
22
		</aside><!--/ sidebar -->
23
	
24
		<div class="tasters">	
25
26
			{% include 'partials/list_articles.html' %}
27
			
28
		</div><!--/ tasters -->	
29
	
30
	</div> <!--/ wrapper -->
31
32
</section><!--/ main -->
33
34
{% include 'partials/footer.html' %}

Schritt 7: Ernst werden

Bis jetzt läuft das, was wir produziert haben, auf eine übermäßig komplizierte Version einer statischen HTML-Seite hinaus, nicht viel, worüber man nach Hause schreiben könnte. Fügen wir nun unseren Verzeichnissen einige aktuelle Inhalte hinzu, damit wir sehen können, wie sie dynamisch ausgegeben werden.

Wie ich bereits erwähnt habe, holt sich Stacey Inhalte aus dem Ordner "content". Sie greift auf die Datei "_shared.yml" zu und checkt dann aus, welcher Ordner mit der aktuellen URL übereinstimmt. Wir haben freundliche URLs aktiviert (vorausgesetzt, Sie haben Ihre .htaccess-Datei richtig umbenannt). Wenn wir also "stacey-master/cheese-burger" besuchen würden, würde sie nach einer YAML-Datei in "content/cheese-burger" suchen.

Andernfalls würde sie nach "content/1.cheese-burger" oder "content/2.cheese-burger" suchen, da wir unseren Ordnernamen auch Zahlen voranstellen können. Auf diese Weise können wir sie indizieren, wenn wir die Ordner jemals durchlaufen müssen (was wir uns gleich ansehen werden).

Weitere Erläuterung, wie Stacey Inhalte in den Browser zieht

Wir werden unserem Ordner "content" einige Ordner hinzufügen. Wir haben einen für "Kontakt" und einen für "Über". Sie werden feststellen, dass ihnen eine Zahl vorangestellt ist, was bedeutet, dass wir sie indizieren und zu Navigationszwecken durchlaufen können.

Wir haben dann "articles", die keine eigene .yml-Datei enthalten (um zu verhindern, dass sie zusammen mit den anderen beiden aufgelistet wird) und eine Reihe nummerierter Ordner darin. Dies werden unsere Artikel sein, deren Pfade sein werden:

  • {root}/articles/leather
  • {root}/articles/rolling-cheese
  • {root}/articles/taxi-driver
  • {root}/articles/snake-skin

Schritt 8: Inhalt

Wir haben Ordner, die uns etwas Inhalt geben, also lassen Sie uns diesen Inhalt nun tatsächlich in die Ordner einfügen. Wie bereits erwähnt, benötigen wir in jedem Ordner eine .yml- oder .txt-Datei, damit Stacey weiß, welche Vorlage verwendet und welche Inhalte sie hineinpumpen soll. Ohne eine solche Datei gibt Stacey einen 404-Fehler zurück (was mich daran erinnert, dass wir irgendwann auch eine 404.html zusammenstellen müssen, lass mich das nicht vergessen..)

Legen Sie in jedem unserer "articles"-Unterordner eine leere Datei ab: "post.yml". Dies wird auf eine "post.html"-Vorlage verweisen, also duplizieren Sie die "index.html"-Vorlage und benennen Sie sie entsprechend um. Guter Anfang - wenn Sie eine der Artikel-URLs besuchen, wird jetzt zumindest eine Seite generiert, wenn auch ein Duplikat unserer Homepage.

In unserer post.yml können wir eine Reihe von Variablen angeben, die wir verwenden können, um unsere post.html-Vorlage zu füllen. Welche Werte Sie auch immer mögen, solange es sich um Schlüssel-Wert-Paare handelt, wie folgt:

1
key1: value1
2
key2: value2
3
key3: value3

Die Werte können HTML-Syntax oder (noch nützlicher) Markdown enthalten. Hinzufügen eines "|" und ein Zeilenumbruch nach dem Schlüssel rendert den Inhalt automatisch als Markdown und umschließt den Inhalt nach dem Parsen in <p>-Tags. Die "post.yml" für unseren Ordner "articles/1.leather" sieht beispielsweise so aus:

1
page_title: Photographing Leather
2
date: 7 Nov 2012
3
author: Stephanie Jiggers
4
intro: |
5
  You can see how I lived before I met you. When I was first asked to make a film about my nephew, Hubert Farnsworth, I thought "Why should I?" Then later, Leela made the film.
6
content: |
7
  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.

Sie erkennen den page_title als die Variable, die wir zuvor in den Meta-Titel der Seite eingefügt haben. Wir haben eine Datumszeichenfolge, einen Autor, einen Einführungsabsatz und den Inhalt angegeben. Sowohl das Intro als auch der Inhalt werden aufgrund des "|" als Markdown geparst. und der Zeilenumbruch.


Schritt 9: Aussetzen

Lassen Sie uns diese Variablen nun tatsächlich in unser post.html-Template ausgeben. Zuerst entfernen wir das gesamte <section class="hero">-Element; wir brauchen es nirgendwo anders als auf der Homepage. Als Nächstes entfernen wir die {% include 'partials/list_articles.html' %}-Anweisung aus unserem Tasters-Element.

In die verbleibende Lücke fügen wir statisches HTML wieder ein, das wir mit dynamischem Inhalt füllen können.

1
<article>
2
3
	<h2>Title</h2>
4
	
5
	<p class="meta">by <a href="#">Author Name</a> on <a href="#">Date</a> with <a href="#">Comments</a></p>
6
	
7
	Content
8
					
9
</article>

Ersetzen Sie nun die Werte durch die Variablen, die wir festgelegt haben:

1
<article>
2
3
	<h2>{{ page.page_title }}</h2>
4
	
5
	<p class="meta">by <a href="#">{{ page.author }}</a> on <a href="#">{{ page.date }}</a> with <a href="#">Comments</a></p>
6
	
7
	{{ page.content }}
8
					
9
</article>

Die Anzahl der Kommentare muss vorerst als statische Daten verbleiben, aber das klären wir später. Mit etwas Glück haben Sie so etwas:

Wiederholen Sie dies nun für alle "post.yml"-Dateien in Ihrem Artikelordner!


Schritt 10: Bedingungen

Okay, wir haben das Setzen und Ausgeben von Variablen behandelt. Schauen wir uns nun die bedingten (if)-Anweisungen von Stacey an.

Wir werden am Ende jedes Beitrags einige Links hinzufügen, um zum nächsten und vorherigen Eintrag zu navigieren. Zunächst müssen wir herausfinden, ob es Einträge (Geschwisterordner) gibt, auf die verlinkt werden kann. Glücklicherweise stellt uns Stacey zu jedem Zeitpunkt eine breite Palette von Variablen zur Verfügung; Wir haben bereits eine Reihe von Variablen innerhalb der "page." gesehen und verwendet. Umfang. Innerhalb einer Seite können wir auch page.siblings verwenden, um diese spezielle Prüfung für uns durchzuführen:

1
{% if page.siblings %}
2
	<!--do something-->
3
{% endif %}

So sieht die if-Anweisung unserer Templating-Engine aus - ähnlich einer if-Anweisung in einer beliebigen Skriptsprache. Was wir hier sagen, ist "Wenn Geschwistereinträge vorhanden sind, tun Sie etwas". Lassen Sie uns einige Teiltöne einfügen, wenn es Einträge gibt, auf die verlinkt werden soll; ein Teil für einen vorherigen Link, ein anderer für einen nächsten:

1
{% if page.siblings %}
2
	{% include 'partials/link_prev.html' %}
3
	{% include 'partials/link_next.html' %}
4
{% endif %}

Wir müssen jetzt die Teiltöne machen, die wir Stacey gerade angewiesen haben (wenn sie nicht da sind, bekommt sie einen Wutanfall). link_prev.html enthält dies:

1
<span class="link_prev">&larr; <a href="#">Article Title</a></span>

und link_next.html dies:

1
<span class="link_next"><a href="#">Article Title</a> &rarr;</span>

Laden Sie Ihre Seite neu, Sie sollten in etwa so aussehen:

Damit diese dynamisch generiert werden, die richtigen Titel anzeigen und auf die richtigen Beiträge verlinken, müssen wir noch einmal in den variablen Umfang von Stacey eintauchen. Wir verwenden eine for/endfor-Schleife, die jeden Wert anzeigt, der in den Variablen page.previous_sibling und page.next_sibling vorhanden ist. Da es jeweils nur einen geben kann, generieren wir einen Link mit den richtigen Angaben:

1
{% for sibling in page.previous_sibling %}
2
  <span class="link_prev">&larr; <a href="{{ sibling.url }}">{{ sibling.page_title }}</a></span>
3
{% endfor %}

und

1
{% for sibling in page.next_sibling %}
2
	<span class="link_next"><a href="{{ sibling.url }}">{{ sibling.page_title }}</a> &rarr;</span>
3
{% endfor %}

Wie Sie sehen, hat Stacey alle Werte, die wir brauchen, vorbereitet und uns alle Seitendetails für die Geschwisterordner unseres aktuellen Eintrags gegeben. Brillant.


Schritt 11: Primäre Navigation

Wir werden ziemlich gut darin, oder? Wie wäre es, wenn wir weitere Werte durchlaufen und einige Links für unsere Top-Level-Seiten ausgeben? Wir platzieren diese in der Kopfzeile oben auf jeder Seite. Hier ist, was wir in partals/head.html haben:

1
	<nav>
2
		<ul>
3
			<li><a href="#">Nav Item 1</a></li>
4
			<li><a href="#">Nav Item 2</a></li>
5
			<li><a href="#">Nav Item 3</a></li>
6
		</ul>
7
	</nav>

Wie durchlaufen wir die Ordner in unserem Stammverzeichnis? Welche Ordner sind das? Wir konzentrieren uns auf 1.about und 2.contact - dies sind die beiden, die aufgelistet werden. Um durchgeschleift zu werden, müssen sie nummeriert werden - wir werden es auch notwendig machen, dass eine .yml-Datei vorhanden ist. Wir schauen also auf Kinder in der Wurzel, und so hat Stacey sie auch für uns vorbereitet. Ersetzen Sie die Listenelemente durch diese Schleife:

1
	<nav>
2
		<ul>
3
			{% for child in page.root %}
4
				{% if child.page_title %}							
5
					<li><a href="{{ child.url }}">{{ child.page_title }}</a></li>
6
				{% endif %}	
7
			{% endfor %}
8
		</ul>
9
	</nav>

Sie können aus dem, was wir zuvor mit for/endfor-Schleifen gemacht haben, herausfinden, was vor sich geht. Wir haben gesagt, dass für jedes Kind, das im Stammordner ("content"-Ordner) vorhanden ist, die Details ausgegeben werden, wenn eine page_title-Variable für dieses Kind vorhanden ist. Unser Ordner "3.articles" wird in diesem Fall ignoriert.

Was Sie vielleicht überraschen wird, ist, dass Ordner in umgekehrter numerischer Reihenfolge wiederholt werden. Dies ist logisch, wenn man bedenkt, dass neuere Blogeinträge die höheren Nummern haben, die frühesten natürlich 1,2,3 usw. Die zuletzt geöffneten Ordner werden zuerst ausgegeben. Ich denke, ich werde die Nummern in meinen Ordnern "Über" und "Kontakt" umdrehen, damit sie günstiger angezeigt werden.

Damit dies tatsächlich etwas ausgibt, müssen die erforderlichen .yml-Dateien in den Ordnern 1.about und 2.contact vorhanden sein - stellen Sie also sicher, dass Sie sie haben. Auch hier müssen Sie sie "page.yml" oder etwas Ähnliches nennen und sicherstellen, dass im Vorlagenordner eine Vorlage mit diesem Namen vorhanden ist. Das alles kommt jetzt von selbst!


Schritt 12: Sekundärnavigation

Wir machen gute Fortschritte, jetzt müssen wir einen ähnlichen Satz von Links für unser Subnav ausgeben, also geben wir die vorhandenen Unterordner aus. Platzieren Sie dies im Teil "nav_articles.html":

1
{% for child in page.root %}
2
  {% if child.children %}
3
    <ul>
4
    {% for child in child.children %}
5
    	<li><a href="{{ child.url }}">{{ child.page_title }}</a></li>
6
    {% endfor %}
7
    </ul>
8
  {% endif %}
9
{% endfor %}

Wir sagen, dass für jedes indexierbare Kind ("1.about, 2.contact, 3.articles"), wenn dieses Kind eigene Kinder hat, ein <ul>-Element ausgegeben wird. Geben Sie für jedes dieser untergeordneten Elemente ein Listenelement mit Titel und URL aus.

Wir haben nur einen Ordner mit Kindern, unseren Ordner "articles", aber wenn wir mehr hätten, vielleicht zum Beispiel eine Mappe, dann würde auch dieser ausgegeben. In solchen Situationen kann es ratsam sein, die Untermenüs klar zu trennen, aber das ist in diesem Fall nicht zu befürchten.

Sie sollten nun ein dynamisch ausgegebenes Untermenü haben, das Sie zu jedem einzelnen Artikel verlinkt. Noch wichtiger ist, dass Sie fast eine voll funktionsfähige Website haben! Ich werde nur die Vorlage "page.html" bereinigen, indem ich die vorherigen und nächsten Links sowie alle nicht benötigten Metadaten entferne. Der Body der Vorlage sieht jetzt so aus:

1
			<article>
2
		
3
				<h2>{{ page.page_title }}</h2>
4
						
5
				{{ page.content }}
6
								
7
			</article>

Ziemlich einfach.


Schritt 13: Startseiteninhalt

Die Beiträge auf der Homepage entsprechen mehr oder weniger der Sekundärnavigation. Lassen Sie uns diese auf die gleiche Weise ausgeben und nach Bedarf zusätzliche Variablen und Markup-Bits hinzufügen. In partials/list_articles.html verwenden wir dasselbe für/if/for-Arrangement:

1
{% for child in page.root %}
2
  {% if child.children %}
3
4
    {% for child in child.children %}
5
    
6
    
7
    	
8
    	
9
    	
10
    {% endfor %}
11
12
  {% endif %}
13
{% endfor %}

Fügen wir nun das Markup zusammen mit den richtigen Variablen zur Schleife hinzu:

1
{% for child in page.root %}
2
  {% if child.children %}
3
4
    {% for child in child.children %}
5
    
6
		<article>
7
		
8
			<h2><a href="{{ child.url }}">{{ child.page_title }}</a></h2>
9
			
10
			<p class="meta">by <a href="#">{{ child.author }}</a> on <a href="#">{{ child.date }}</a> with <a href="{{ child.url }}">4 comments</a></p>
11
			
12
			{{ child.intro }}
13
			
14
			<p><a href="{{ child.url }}">Read more..</a></p>
15
			
16
			<hr>
17
		
18
		</article>
19
					   	
20
    {% endfor %}
21
22
  {% endif %}
23
{% endfor %}

Getan! Schauen wir uns nun einige Extras an, um die Site ein wenig aufzupeppen.


Schritt 14: Kein Kommentar

Diskussionen und Community sind oft in Blogs vorhanden, aber da wir keine Datenbank betreiben, ist es für uns schwierig, unser eigenes Kommentarsystem zu verwalten. Stattdessen stützen wir uns auf einen Drittanbieterdienst und lassen ihn die harte Arbeit für uns erledigen. Hier stehen viele Optionen zur Auswahl. Facebook ermöglicht es Ihnen, die Kommentar-API zu verwenden, die es Ihnen ermöglicht, die gesamte Leistung des weltweit größten sozialen Netzwerks zu nutzen. Eine Einschränkung bei der Entscheidung für ihren Dienst besteht jedoch darin, dass Sie die mit dieser Methode erstellten Inhalte technisch nicht besitzen. Ihre Kommentare sind nicht Ihre eigenen. Wer kann sagen, was in Zukunft passieren wird und welche Rechte Sie an den Inhalten haben oder haben möchten?

Stattdessen setzen wir heute auf Disqus, das wir kürzlich auch auf Tuts+ implementiert haben.

Gehen Sie weiter, melden Sie sich für ein kostenloses Konto an und Sie können die Details Ihrer Domains eingeben.

Nachdem Sie alle erforderlichen Angaben gemacht haben, finden Sie Optionen zum Implementieren von Disqus auf Ihrer Site. Es gibt Plugins für alle Arten von bekannten Plattformen, aber wir brauchen das universelle Einbettungs-Snippet:

1
<div id="disqus_thread"></div>
2
<script type="text/javascript">
3
    /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
4
    var disqus_shortname = 'snaptin'; // required: replace example with your forum shortname

5
6
    /* * * DON'T EDIT BELOW THIS LINE * * */
7
    (function() {
8
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
9
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
10
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
11
    })();
12
</script>
13
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
14
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

Wir müssen dies in unsere Seiten einbetten, auf denen Kommentare erforderlich sind. Es liegt ganz bei Ihnen, wie Sie das machen - Sie können dies einfach kopieren und dort einfügen, wo die Kommentare erscheinen (in "post.html"), oder Sie können die Dinge in eine separate js-Datei aufteilen, wodurch die Dinge etwas sauberer bleiben .

Sie müssen das Element, in das Kommentare eingefügt werden, in die Vorlage "post.html" einfügen:

1
			<div id="disqus_thread"></div>
2
	        <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
3
	        <a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

Ich habe es einfach unter den nächsten und vorherigen Link gesteckt. Trennen Sie nun das Javascript und legen Sie es in einer Datei in einem neuen js-Ordner innerhalb des öffentlichen Verzeichnisses ab:

1
//disqus snippet
2
var disqus_shortname = 'snaptin'; 
3
(function() {
4
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
5
    dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
6
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
7
})();

Ich habe diese Datei disqus.js genannt und werde sie teilweise in die Fußzeile ziehen.

Hinweis: Auf einigen Seiten gibt das Skript eine kleine Warnung aus (prüfen Sie den Web-Inspektor), wenn es nach dem #disqus_thread-Div sucht und es nicht finden kann. Kein massives Problem, aber wenn Sie ein js-Genie sind und es lösen möchten, fühlen Sie sich frei!

1
<!--required js-->
2
<script src="{{ page.root_path }}/js/disqus.js"></script>

Cool! Wir haben jetzt Kommentare zu jedem Beitrag! Disqus kümmert sich für uns um alles und zeichnet Kommentare für die URL jedes Beitrags auf (wenn Sie also die URL aus irgendeinem Grund ändern, erwarten Sie, dass Ihre Kommentare verschwinden). Es ist auch schön, dass das eingefügte Markup vollständig flüssig ist (also gut in unser fluis-Layout passt) und einige der einfachen Stile übernimmt, die wir festgelegt haben, wie Linkfarben usw.

Hinterlasse ein paar Kommentare, wir brauchen sie, um das nächste Stück zu testen.


Schritt 15: Kommentare zählen

Nachdem wir Platz für den Kommentar jedes Beitrags in den Metadaten gemacht haben, wollen wir ihn nun mit einigen echten Daten füllen. Disqus ermöglicht uns dies mit einem anderen js-Snippet (das Sie in Ihrem disqus.com-Dashboard finden). Auch hier können Sie es so einfügen, wie es ist, oder einfach nehmen, was wir brauchen und es der Datei disqus.js hinzufügen:

1
(function () {
2
    var s = document.createElement('script'); s.async = true;
3
    s.type = 'text/javascript';
4
    s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
5
    (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
6
}());

Dadurch wird die Datei count.js abgerufen. Jetzt müssen wir mit #disqus_thread alle Links anhängen, an denen die Kommentaranzahl angezeigt werden soll. Zum Beispiel in unserer post.html:

1
<p class="meta">by <a href="#">{{ page.author }}</a> on <a href="#">{{ page.date }}</a> with <a href="{{ page.url }}#disqus_thread">Comments</a></p>

und in partials/list_article.html:

1
<p class="meta">by <a href="#">{{ child.author }}</a> on <a href="#">{{ child.date }}</a> with <a href="{{ child.url }}#disqus_thread">Comments</a></p>

Die "Comments" werden, sobald alles geladen ist, durch die mit der URL verknüpfte Kommentaranzahl ersetzt:


Schritt 16: 404

Dank der .htaccess-Datei sind wir alle eingerichtet, 404-Weiterleitungen zu verwenden, wenn jemand eine defekte URL eingibt. Jetzt müssen wir nur noch eine 404.html-Datei in den öffentlichen Ordner legen. Da diese Datei in keiner Weise von Stacey geparst wird, können wir keine Variablen oder Inhalte, die wir woanders haben, verwenden (Schade). Aus diesem Grund ist es am besten, eine eigenständige Datei zu haben, die vollständig in sich geschlossen ist und alle Stile und Inhalte direkt im HTML-Format enthält.

Folgendes ist mir (schnell) eingefallen, beachten Sie die eingebetteten Stile im Kopf des Dokuments:

1
<!DOCTYPE html>
2
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
3
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
4
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
5
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]-->
6
<head>
7
8
	<!-- Metaaaa -->
9
	<meta charset="utf-8">
10
	<title>404</title>
11
	<meta name="description" content="You might want to try that again.">
12
	<meta name="author" content="Ian Yates">
13
14
	<!-- Viewport -->
15
	<meta name="viewport" content="width=device-width, initial-scale=1">
16
17
	<!-- CSS -->
18
	<style>
19
	* {margin: 0; padding 0;}
20
	body, html {background: tomato; font: 100%/1.5em Helvetica, Arial, sans-serif; color:white; text-align: center}
21
	h2 {font-size: 20em; line-height: 1em; letter-spacing: -0.05em;}
22
	p {font-size: 1.5em; padding: 0 0 1.5em;}
23
	a, a:visited {color: white; text-decoration: underline;}
24
	a:hover {text-decoration: none;}	
25
	</style>
26
	
27
	<!--[if lt IE 9]>

28
		<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>

29
	<![endif]-->
30
31
</head>
32
<body>
33
		
34
	<h2>404</h2>
35
	
36
	<p><strong>You might want to try that again.</strong></p>
37
		
38
39
	<footer>
40
41
		<p>&copy; Copyright Ian Yates 2012 CMS by <a href="http://www.staceyapp.com">stacey</a>
42
				
43
	</footer>	
44
				
45
</body>
46
</html>

Fahren Sie fort und erstellen Sie diese Datei. Werfen Sie es in den öffentlichen Ordner und besuchen Sie dann eine unsinnige URL in Ihrem Projekt.


Schritt 17: Freunde mit Vorteilen

Stacey bietet viel mehr, direkt nach dem Auspacken, daher ist es eine gute Idee, zu den ursprünglichen Quelldateien zurückzukehren und sich anzusehen, was angeboten wird. Zum Beispiel gibt es eine RSS-Vorlage, auf die wir verlinken können und die aus dem gesamten Inhalt einen Feed generiert. Es sieht aus wie das:

1
<?xml version="1.0" encoding="utf-8"?>
2
  <feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
3
4
  <title>{{ page.name }}'s {{ page.feed_name }}</title>
5
  <subtitle>{{ page.profession }}</subtitle>
6
  <link href="http://{{ page.base_url }}/{{ page.permalink }}" hreflang="en" rel="self" type="application/atom+xml"/>
7
  <link href="http://{{ page.base_url }}/" hreflang="en" rel="alternate" type="text/html"/>
8
  
9
  <updated>{{ page.site_updated }}</updated>
10
  <generator uri="http://staceyapp.com/" version="{{ page.stacey_version }}">Stacey</generator>
11
12
  <author>
13
    <name>{{ page.name }}</name>
14
    <uri>http://{{ page.base_url }}</uri>
15
  </author>
16
17
  <id>tag:{{ page.domain_name }},{{ page.current_year }}:/{{ page.permalink }}</id>
18
  <rights>©{{ page.current_year }} {{ page.name }}</rights>
19
  {% include 'partials/feed/feed-loop.atom' %}
20
21
</feed>

Wir fügen dieses "feed.atom" unserem Vorlagenordner hinzu. Wir brauchen dann auch noch ein paar Partials, die Sie im Quellcode finden, also werfen Sie auch diesen ganzen "feed"-Ordner in das Partials-Verzeichnis:

Sie können diese Atom-Dateien in jedem Text- oder Code-Editor bearbeiten. Sie können also die Art und Weise ändern, wie Ihr Feed generiert wird. In "feed-entry.atom" möchten Sie beispielsweise den Seitentitel ändern:

1
   <title>{{ page.page_title }}</title>

Das setzt voraus, dass Sie die Variable zu Beginn des Tutorials geändert haben. Jetzt müssen wir den Feed verlinken, damit die Leute ihn abrufen können. Wir brauchen eine .yml-Datei im Ordner "content", dann können wir darauf verweisen. Erstellen Sie eine Datei content/feed/feed.yml und platzieren Sie diese darin:

1
feed_name: I'd like to Introduce you to Someone

und jetzt müssen wir den Link in unserer partials/footer.html aktualisieren:

1
<a class="atom-rss" href="{{ page.root_path }}/feed">RSS</a>

Getan! Auch hier können Sie die Anzeige Ihres Atom-Feeds ändern. Spielen Sie also mit Variablen in diesen Dateien.

Hinweis: Vielleicht möchten Sie auch den Json-Feed und die sitemap.xml ausprobieren, die auf die gleiche Weise funktionieren.


Schritt 18: Zusätzliche Medien

Der Inhalt unseres Blogs ist im Moment ziemlich einfallslos, nur ein paar Schnipsel Blindtext. Wir können natürlich Markdown verwenden, aber wir können noch mehr anzeigen. Stacey stellt uns einige zusätzliche Vorlagen und Funktionen zur Verfügung, die uns helfen, Bilder, Dateien und andere Medien auszugeben. Zunächst müssen wir die Teiltöne einfügen, die Sie in der Quelle finden:

Diese gehören in templates/partials/assets. Jeder verarbeitet einen anderen Dateityp (Sie können genau ändern, wie das Markup ausgegeben wird), also wie verwendet Stacey sie tatsächlich? Stacey durchsucht erneut den Inhalt der Post-Ordner und fügt alle zusätzlichen Dateien, die sie findet, zu ihrer Bank mit Seiteninformationen hinzu.

Platzieren wir zum Beispiel ein paar Bilder in unserem Post-Ordner content/3.articles/1.leather.

Danach findet Stacey die zusätzlichen Assets und indiziert sie. Fügen Sie den media.html-Teil in die post.html-Vorlage ein und Sie können loslegen!

1
{% include 'partials/assets/media.html' %}

Was Sie jetzt mit den Bildern machen, liegt bei Ihnen; Sie könnten ganz einfach ein js-Diashow-Skript (in den öffentlichen Ordner) einfügen und diese Bilder drehen lassen. Oder zeigen Sie sie mit CSS anders an. Wie du willst.

Was ist mit anderen Medientypen? Wir können Videos einbetten, aber wie wäre es mit einer YouTube-Einbettung? Das würde mit einem zusätzlichen Stück HTML geschehen. Holen Sie sich Ihren Einbettungscode:

1
<figure class="embed">
2
<iframe width="420" height="315" src="http://www.youtube.com/embed/zd7c5tQCs1I" frameborder="0" allowfullscreen></iframe>
3
</figure>

Fügen Sie es in eine neue HTML-Datei in dem Ordner ein, in dem Sie es haben möchten, und lassen Sie dann Stacey den Inhalt analysieren und die Seite generieren!

Hinweis: Die zusätzliche Figur, die ich dort um den iframe gewickelt habe, soll uns ein flüssiges Video geben. Mit diesem zusätzlichen CSS:

1
.embed {
2
	position: relative;
3
	padding: 0px;
4
	padding-bottom: 56.25%;
5
	height: 0;
6
	overflow: hidden;
7
}
8
.embed iframe, .embed object, .embed embed {
9
	position: absolute;
10
	top: 0;
11
	left: 0;
12
	width: 100%;
13
	height: 100%;
14
}

wir bekommen (fast) bombensichere Fließfähigkeit.


Kaffee?

Nun, ein schöner gemeinsamer Abend ist zu Ende und ich hoffe, Ihnen zumindest die Augen für die Welt der CMS-Alternativen geöffnet zu haben. Es gibt noch viel mehr, was Sie mit einem solchen System erreichen können - ich bin gespannt, was Sie sich einfallen lassen.

Stacey ist einfach, aber leistungsstark genug, um grundlegende Blogging-Anforderungen zu erfüllen. Sie ist flexibel und offen für Vorschläge. Vielleicht gibt es hier eine Romanze, die darauf wartet, aufzublühen? Bei Fragen oder Gedanken, beschäftigt euch in den Kommentaren. Danke fürs Lesen!


Zusätzliche Ressourcen