Een volledig CMS is zelden nodig. Soms hoeft u alleen maar een lichte, statische website te maken? maar je hebt net genoeg pagina's om het proces van het kopiëren van sjabloonbestanden te maken en het maken van cross-site markup-wijzigingen een hele klus. Vandaag zal ik een eenvoudige oplossing demonstreren, Jekyll, die het maken van kleine websites een koud kunstje zal maken.
Jekyll is een eenvoudige, blog-bewuste, statische site-generator.
Jekyll is een eenvoudige, blog-bewuste, statische site-generator. Dat is wat de site zegt. Maar wat betekent dit precies? Een statische site-generator is een programma dat een set bestanden maakt en uw site ermee genereert. Zoals u ziet, kunnen we een reeks sjablonen gebruiken, de inhoudsbestanden afzonderlijk maken en vervolgens Jekyll gebruiken om onze site te genereren. De? Blog op de hoogte? deel betekent dat we dit kunnen gebruiken om een blog te maken, of elke website die een reeks post-achtige items heeft (zoals een portfolio). Laten we het proberen!
Raadpleeg hier voor meer informatie over Ruby Gems.
We beginnen met het installeren van Jekyll; het is een Ruby-juweeltje, dus dit zou vrij eenvoudig moeten zijn.
gem installeer jekyll # gebruik 'sudo' als je installatie dit vereist
Yep: zo eenvoudig is het. Er zijn nog een paar stukjes die we kunnen installeren als we van plan zijn om een meer complexe set-up uit te voeren, maar omdat we dat niet zijn, zal dit de truc doen.
Elk bestand of elke map die niet begint met een onderstrepingsteken, wordt gekopieerd naar de gegenereerde site.
Laten we vervolgens de mappen voor Jekyll instellen. Maak een map, genaamd voorbeeld-app
voor deze tutorial; we zullen een kleine portfoliosite maken voor, laten we zeggen, een fotograaf. Dit is een goed voorbeeld van waar Jekyll schittert: het is een kleine site die niet te vaak wordt bijgewerkt, maar groot genoeg is om niet elke pagina te openen wanneer u een opmaakwijziging moet aanbrengen.
Binnen voorbeeld-app
, maak een map genaamd _layouts
. Let op het onderstrepingsteken aan het begin van deze map: elke map of elk bestand dat begint met een onderstrepingsteken maakt geen deel uit van de site die Jekyll genereert. Als ze een naam hebben die Jekyll herkent (zoals _config.yml
of _layouts
), wordt de inhoud ervan gebruikt bij het genereren van de site, maar de bestanden zelf worden niet weergegeven op de site. Onthoud dit: elk bestand of elke map die niet begint met een onderstrepingsteken, wordt gekopieerd naar de gegenereerde site (die trouwens standaard de _site
sub-map).
Laten we een lay-out maken. We beginnen met een algemene site-indeling die alle? Chrome bevat? voor onze site. Maak een nieuw bestand, genaamd default.html
binnen in de _layouts
map (de naam doet er niet toe), en voeg de volgende code toe:
% if page.title% page.title | % endif% John Doe, fotograaf John Doe Photograghy
inhoud
Een paar dingen hier om in gedachten te houden?
Ten eerste gebruikt Jekyll het sjabloonsysteem Vloeistof (standaard). Dit betekent dat je alles wat je kunt doen met Liquid, kunt doen in een sjabloon in Jekyll. Bijvoorbeeld in de
tag, we gebruiken beide typen Vloeibare markeringen: uitvoer markup en tag opmaak. Uitvoermarkering kan tekst uitvoeren (als de variabele waarnaar wordt verwezen bestaat), terwijl markeringsmarkering niet. Uitvoeropmaak wordt begrensd door dubbele accolades, terwijl markeringsmarkering wordt gescheiden door een duo met accolades / percentagesymbolen.
Het volgende dat je hierboven opmerkt is wat zich in de Liquid-tags bevindt: dingen zoals pagina titel
en inhoud
. Dit zijn variabelen geleverd door Jekyll; u kunt de lijst met beschikbare sjabloongegevens in de documenten bekijken. We kunnen ook aangepaste sjabloongegevens maken, zoals we binnenkort zullen bespreken.
Let ten slotte op de CSS waarnaar we linken: create a css
map in de hoofdmap van uw project en gooi dit stukje styling in een style.css
het dossier:
lichaam font: 16px / 1.5 verdana, helvetica-neue, helvetica, arial, san-serif; achtergrond: zwart; kleur: #ececec; opvulling: 0; marge: 0; ul margin: 0; opvulling: 0; a color: #ccc; tekstdecoratie: geen; a: hover color: #ececec; tekstdecoratie: onderstrepen; #main width: 960px; marge: 0 auto; achtergrond: rgba (255, 255, 255, 0,4); header padding: 0 10px; overloop verborgen; h1 marge: 0; nav ul, ul.entries list-style-type: none; nav li a float: left; marge: 5px; .content opvulling: 10px; ul.entries li positie: relatief; marge: 20px auto; opvulling: 20px; achtergrond: #ececec; breedte: 600 px; ul.entries img width: 600px; ul.entries li h3 position: absolute; onder: -18px; links: 17px; font-size: 2em; ul.entries a color: #ececec; ul.entries a: hover color: #fff; footer font-size: 0.65em; text-align: center;
Maak ook een img
map en voeg een afbeelding toe, genaamd banner.jpg
; we zullen het binnenkort gebruiken. Elke afbeelding zal doen; snijd het gewoon bij 960px
door 300px;
.
U vraagt zich misschien af waarom we de als
verklaring hierboven als de pagina titel
variabele wordt gewoon niet weergegeven als deze bestaat? Nou, als het bestaat, wil ik de verticale balk erna opnemen; een andere manier om te schrijven zou zo zijn:
page.title % if page.title% | % stop als %
Dus, hoe gebruiken we deze sjabloon? Welnu, we moeten een pagina maken die deze sjabloon gebruikt. Maak in de hoofdmap van ons project een index.html
het dossier. Hier is de inhoud:
--- layout: standaard ---Welkom bij John Doe Photography! Bekijk alstublieft mijn portfolio om mijn werk te zien.
Hier is de inhoud van onze index.html
het dossier. Let op wat zich bovenaan het bestand bevindt: Jekyll noemt deze YAML-kwestie van voren. Elk bestand (dat niet begint met een onderstrepingsteken) met YAML-frontmateriaal wordt door Jekyll gegenereerd voordat het in de _site
map (als er geen onderstrepingsteken of YFM is, wordt deze alleen gekopieerd _site
). In dit geval vertelt de YAML-frontzaak Jekyll precies welke sjabloon we willen gebruiken.
Open nu een terminal, CD
in uw projectdirectory en voer het uit jekyll
. Je zou zoiets als dit moeten zien:
WAARSCHUWING: Kon de configuratie niet lezen. Standaardinstellingen (en opties) gebruiken. Geen bestand of map - /Users/andrew/Desktop/example-app/_config.yml Bouwsite: / Gebruikers / Andrew / Desktop / example-app -> / Gebruikers / Andrew / Desktop / example-app / _site Succesvol gegenereerde website : / Gebruikers / andrew / Desktop / example-app -> / Gebruikers / andrew / Desktop / example-app / _site
Negeer de waarschuwing; daar komen we binnenkort op terug. Voor nu kun je zien dat de site is gebouwd in een nieuw ontwerp _site
directory. Als u de _site / index.html
bestand in uw browser naar keuze, zou u het moeten zien? een mislukking. Het probleem is dat onze paden (urls en stylesheet) beginnen met een schuine streep naar voren. Dit betekent dat we ze niet alleen als bestanden kunnen zien, we moeten ze ook op een server bekijken. Natuurlijk kun je W / MAMP starten, maar waarom de moeite nemen? Jekyll heeft een ingebouwde server. Dus, ren jekyll - server
, en ga naar localhost: 4000 om iets als afbeelding hieronder te zien:
Als de bovenstaande afbeelding niet genoeg is, kijk dan naar de code van _site / index.html
. U ziet dat de sjabloon die we hebben opgegeven, is gemengd met de inhoud die we hebben verstrekt en -voila! -We hebben onze pagina.
Ik wil je eraan herinneren dat het de YAML-frontzaak is die deze magie laat gebeuren; als een bestand niet begint met drie streepjes, een of meer regels met eigenschappen en een andere regel met drie streepjes, wordt het bestand gewoon gekopieerd naar de _site
map, er vindt geen generatie plaats.
Nu we vertrouwd zijn met de basis, laten we een portfolio maken voor onze fictieve fotograaf. Weet je nog hoe ik opmerkte dat Jekyll een blog is? We gaan deze blogbewustmakingsfunctie in ons voordeel gebruiken: in plaats van berichten hebben we portfolio-items.
Posts horen in een map, genaamd _posts
, dus creëer dat nu. Het bestandsnaampatroon voor berichten moet ook specifiek zijn: jaar-maand-dag-title.ext
. Berichten - nou, elk bestand op je Jekyll-site, echt - kan Markdown of HTML zijn.
Dus laten we een paar berichten maken: onthoud, dit zullen eigenlijk vermeldingen in onze portfolio zijn:
_posts / 2010-03-04-bikes.md
--- layout: portfolio_entry image: /img/bikes.jpg title: Bikes, Black and White --- Fietsen worden door bijna iedereen in het centrum van Amsterdam gebruikt. Deze zijn vastgeketend aan een fietsenrek.
_posts / 2010-10-01-wing.md
--- layout: portfolio_entry title: Wing and a Prayer image: /img/wing.jpg --- De vleugel van de AirBus reed ik naar Engeland.
_posts / 2011-06-05-bridge.md
--- layout: portfolio_entry title: Stone Bridge afbeelding: /img/bridge.jpg --- Een oude stenen brug in Londen.
_posts / 2011-07-09-road.md
--- layout: portfolio_entry title: Road and Curb image: /img/road.jpg --- Fietspaden zijn hier verschrikkelijk dun.
Best simpel, toch? Merk op hoe we een aangepast YAML-veld met frontfeiten maken: beeld
. Dit is de URL naar de afbeelding voor dat item. Natuurlijk kunnen we hier de volledige invoer-HTML in dit bestand bouwen, maar wat als we dat willen veranderen? We zouden terug moeten keren en het bij elke invoer moeten veranderen. Op deze manier kunnen we onze portfolio_entry
sjabloon om ze weer te geven. Hoe ziet die sjabloon eruit? Het is ook vrij eenvoudig:
_layouts / portfolio_entry.html
--- layout: standaard ---pagina titel
inhoud
Als u naar de sjabloongegevenspagina hebt gekeken, weet u dat eventuele aangepaste hoofdzaken die we toevoegen beschikbaar zijn onder pagina
; dus hier hebben we toegang page.image
. We gebruiken ook pagina titel
en inhoud
(alles na de laatste regel met drie streepjes).
Ik moet hier vermelden dat, terwijl de post titel
is verondersteld beschikbaar te zijn op de post
object, ik heb het alleen maar kunnen laten werken op de pagina
voorwerp. Wat dan ook werkt!
Merk ook op dat we deze sjabloon gebruiken met onze standaard
lay-out. U kunt dergelijke sjablonen nesten en uw taak nog eenvoudiger maken.
Dit geeft ons onze entry (post) pagina's, maar hoe zit het met de hoofdportfoliopagina? Bij het schrijven van onze navigatie in onze standaardlay-out merkte ik op dat we het willen hebben zoals /portefeuille/
. Dus maak een map, genaamd portefeuille
in de hoofdmap en open een index.html
bestand erin.
--- layout: standaard titel: Portfolio ---Portefeuille
Bekijk mijn afbeeldingen hieronder!
Dit is ons meest gecompliceerde stuk tot nu toe. Vergeet niet dat dit geen sjabloon is: het is een? Normaal? bestand, maar het kan nog steeds vloeibare tags bevatten. We beginnen met instellen lay-out
naar standaard
, en titel
naar? Portfolio.?
Merk op dat we in de HTML een Liquid hebben voor in
lus. We halen alle berichten op met sites.posts
; dan lussen we over die berichten met voor berichten op site.posts
/ endfor
. Als u met WordPress of een ander blogsysteem hebt gewerkt, moet u bekend zijn met het concept van a lus
. Dat is alles wat dit is! Binnenin, zoals u kunt zien, kunnen we de standaardeigenschappen krijgen, evenals alle voorzaken die we hebben gedefinieerd (zoals beeld
).
Nu, als we vluchten jekyll - server
om de site opnieuw te genereren en de server te starten, moet localhost: 4000 / portfolio / dit weergeven:
En hier is een startpagina:
Super goed! U hebt een portfolio gemaakt. Ik weet zeker dat je ook ziet hoe dit werkt voor een blog. Laten we nu kijken naar een aantal configuratie-opties voor Jekyll.
Er is een overvloed aan opties voor Jekyll. Het is geweldig dat ze allemaal echt verstandige standaardinstellingen hebben, maar als je ze wilt wijzigen, is het helemaal niet moeilijk.
Er zijn twee manieren om opties in te stellen.
--server
parameter, die een server start na het genereren van de site._config.yml
; dit is een YAML-bestand, dus elke regel is een sleutel: waarde
paar, net als in de YAML-frontzaak. Jekyll zal naar dit bestand zoeken voordat het een site genereert.Dus, maak een _config.yml
bestand en laten we enkele van de meest voorkomende opties bekijken.
Raadpleeg de configuratiedocumentatie voor een volledige lijst met opties.
auto
: Toevoegen auto: true
naar uw configuratiebestand houdt Jekyll actief, bekijkt uw projectmap op wijzigingen en regenereert de site on the fly.bron
: Als uw bronbestanden zich in een andere directory bevinden dan de map waar u Jekyll vanaf draait, moet u die map instellen met de bron
eigendom.bestemming
: Standaard is de bestemming voor uw gegenereerde site ./ _site
. Als u iets anders wilt, stelt u dit hier in.permalink
: De permalink is het pad naar je berichten. Dat is standaard /year/month/day/title.html
. U kunt dat echter aanpassen als u dat wilt. U kunt onder andere de variabelen gebruiken :jaar
, :maand
, :dag
, :titel
, en :categorieën
. :categorieën
komt van de voorkant; alle anderen komen uit de postbestandsnaam. Vervolgens kunt u instellen permalink
naar dingen zoals /: Jaar /: maand /: titel /
of /:categories/:title.html
. Bonustip: als u een permalink
property in de post-hoofdzaak, overschrijft deze de standaardinstelling voor de hele site.uitsluiten
: Zoals ik hierboven al zei, zal Jekyll geen bestanden genereren in mappen beginnend met een onderstrepingsteken. Maar als u mappen hebt die u wilt negeren, maar dat niet begint met een onderstrepingsteken, kunt u dit doen met uitsluiten
in uw configuratiebestand.Dus laten we zeggen dat je de site hebt gemaakt en deze gratis wilt instellen op het internet. Hoe doe je dat?
Er zijn verschillende manieren om dit te bereiken. Natuurlijk, als het een kleine site is die u niet te vaak zult bijwerken, dan kunt u deze eenvoudig naar uw server FTP -en; dit kan uw enige optie zijn als u shared hosting gebruikt.
Als u een VPS- of dedicated hosting-instelling hebt, kunt u meer automatisch uitvoeren. Bekijk de implementatiedocumentatie voor een lijst met goede ideeën. Als je niet zeker weet wat je moet doen, probeer dan de aanwijzingen voor het gebruik van de git post-receive hook te volgen; Ik heb dat geprobeerd en het is best gaaf.
Dit is slechts het topje van Jekyll.
Nou, dat is uw inleiding tot Jekyll - de eenvoudige, blogs-bewuste, statische site-generator. De volgende keer dat u een brochure-achtige business-card-y, micro-portfolio-site maakt, denkt u dat u Jekyll eens kunt proberen? Laat het me weten in de comments en bedankt voor het lezen!