2016-05-12 14 views
2

Gibt es eine Entsprechung zu Laravel @section('') Blöcke in Jekyll? Was ich versuche zu tun, ist eine Vorlage zu erstellen, die das HTML zwischen mehreren jekyll-Seiten zusammenfassen kann. Zum Beispiel:Sub-Vorlagen innerhalb von Jekyll

default_layout

<html> 
    <div class="page-content"> 
     <div class="wrapper"> 
     {{ content }} 
     </div> 
    </div> 
</html> 

PAGE_1

--- 
layout: default 
permalink: xxx 
--- 
<head> 
    <title>My title</title> 
{% include header.html %} 
... 
<div> <!-- A shared block between pages with different content --> </div> 
.... 
<div> <!-- Another shared block between pages with different content --> </div> 
{% include footer.html %} 
</html> 

Es ist wie das aktuelle Angebot von jekyll aussieht können Sie Sub-Templates verwenden, aber begrenzt den {{content}} Block eine separate Datei sein, dass Erbt auch die untergeordnete Vorlage. Ich müsste eine Reihe von Dateien erstellen, die einander inhärent sind, um die endgültige HTML-Seite zu erstellen (oder zumindest denke ich).

Was für mich in Laravel gearbeitet wurde mit mehrere@yield und @section Aussagen leicht dynamische Daten in eine gemeinsame Vorlage einfügen. Ich glaube nicht, dass Jekyll das tun kann, ohne einen Haufen verschachtelter Sub-Templates zu erstellen, aber ich hoffe, dass ich falsch liege.

Antwort

0

Lösung 1:

Sie Jekyll's include files dafür verwenden könnte.

Wahrscheinlich kennen Sie bereits die Includes, weil Sie sie in der Layoutdatei Ihrer Frage verwenden.

Wenn Ihre geteilten Blöcke nur aus HTML bestehen, benötigen Sie nur ein Include.

Aber vielleicht (ich bin mir nicht sicher) die freigegebenen Blöcke sind Text, was bedeutet, dass Sie Markdown für die Formatierung verwenden möchten?

Standardmäßig gibt Jekyll Markdown nicht in Include-Dateien wieder, aber mit einem kleinen Trick ist es immer noch möglich, Markdown-Dateien einzuschließen.

Ich habe eine Seite, wo ich den gleichen Textblock (mit Formatierung und Links) auf mehreren Seiten benötigt, also tat ich dies:

  1. den Text in einer Markdown-Datei in die _includes Ordner ablegen, z.B _includes/info.md

  2. Fügen Sie diese Datei und der Abschlag machen, indem sie die Erfassung und dann diemarkdownify Flüssigkeitsfilter mit:

    {% capture tmp %}{% include info.md %}{% endcapture %} 
    {{ tmp | markdownify }} 
    

Lösung 2:

Wenn die gemeinsamen Blöcke sind für bestimmte Seitengruppen gleich, vielleicht möchten Sie mehrere Layout-Dateien verwenden.

Das beste Beispiel hierfür wäre ein Blog mit Jekyll gebaut sein:

Sie haben einen "basic" Layout (Navigation, Sidebar, Footer ...) dass alle Seiten teilen, und das ist direkt von "normalen" Seiten verwendet.

Dann haben Sie ein zweites Layout "erben" von der wichtigsten, die Dinge wie Post-Datum, Tags und so weiter - das wird von allen Blog-Posts verwendet.

Here's a simple Jekyll example for this.