Un modo semplice per supportare i tag in un blog jekyll
Domanda
Sto usando l'installazione standard jekyll per mantenere un blog, tutto sta andando bene. Tranne che vorrei davvero taggare i miei post.
Posso posso taggare un post usando la prima pagina di YAML, ma come posso generare pagine per ogni tag che elencherà tutti i post per un tag?
Soluzione
Questa sintesi genererà una pagina per categoria per te: https://gist.github.com/524748
Utilizza un plug-in Jekyll Generator, oltre a una sottoclasse Page.
Altri suggerimenti
Ecco una soluzione con tag ordinati alfabeticamente su una singola pagina .
Utilizza solo Liquid, il che significa che funziona su GitHub Pages:
{% capture tags %}
{% for tag in site.tags %}
{{ tag[0] }}
{% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags %}
<h3 id="{{ tag }}">{{ tag }}</h3>
<ul>
{% for post in site.tags[tag] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
Puoi vederlo in azione qui .
Modifica
C'è anche un modo per generare una pagina separata per ogni tag senza plugin (che funzionerà su GitHub Pages) .
Ho una spiegazione più dettagliata sul mio blog:
Pagine separate per tag / categoria con Jekyll (senza plugin)
Innanzitutto, è necessario un nuovo file di layout:
/ _ layout / tagpage.html
---
layout: default
---
<h1>{{ page.tag }}</h1>
<ul>
{% for post in site.tags[page.tag] %}
<li>
{{ post.date | date: "%B %d, %Y" }}: <a href="{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
</ul>
Con questo file di layout, puoi aggiungere una nuova tag page aggiungendo un nuovo file con solo due righe di YAML.
Ecco un esempio per il tag jekyll
:
/tags/jekyll/index.html
:
---
layout: tagpage
tag: jekyll
---
L'unico svantaggio di questo approccio: ogni volta che usi un nuovo tag per la prima volta, devi ricordarti di creare un nuovo file a due righe per esso.
Per generare il file indice radice (ovvero l'elenco di tag che si collega a /tags/jekyll/index.html
ecc.) , è possibile utilizzare una soluzione simile come quello in cima a questa risposta in cui generi una singola pagina con tag ordinati alfabeticamente:
{% capture tags %}
{% for tag in site.tags %}
{{ tag[0] }}
{% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags %}
<a href="/tags/{{ tag }}/">{{ tag }}</a><br>
{% endfor %}
Questo genererà un elenco di collegamenti come questo:
<ul>
<li><a href="/tags/.net/">.net</a></li>
<li><a href="/tags/authentication/">authentication</a></li>
<li><a href="/tags/backup/">backup</a></li>
</ul>
Nota che questa soluzione utilizza uno spazio vuoto per dividere i tag, quindi non funziona quando i tuoi tag contengono spazi vuoti e Il commento di Yevgeniy Brikman si applica anche qui.
Dai un'occhiata ai siti che usano jekyll . Ci sono alcune forcelle personalizzate che hanno implementato la funzionalità di tagging, si spera anche nel modo desiderato :-)
Ho avuto la stessa domanda e mi sono imbattuto in questo: http://gist.github.com/143571.
È un'attività di rake che genera un elenco di tag. L'ho modificato leggermente e la mia versione è su: http://github.com/mattfoster/mattfoster.github.com/blob / master / Rakefile .
Anche se questo non ti dà una pagina per tag, puoi usare le ancore, che sono a metà strada!
Uso il fantastico Jekyll Tagging che genera automaticamente un cloud di tag e pagine di tag. Facile da installare e utilizzare.
Ecco una pagina per la " foto " tag sul mio blog (in francese) e puoi vedere il cloud dei tag in fondo.
Sulla base della risposta di Christian sopra ho realizzato una sceneggiatura bash che fa quello che ha descritto.
https://github.com/ObjectiveTruth/objectivetruth. github.io/blob/master/rebuild_tags.sh
Assicurati di avere la riga 14 di accompagnamento vim script nella directory / non_website_resources /
AND
Crea il /_layouts/tagpage.html
mostrato nella risposta di Christian sopra ma rinominalo in /_layouts/tag_pages.html
La struttura dei file dovrebbe essere così:
.jekyll_website_root
├── _posts
├── _layout
│ ├── tag_pages.html
├── rebuild_tags.sh
Esegui dalla directory principale ./rebuild_tags.sh
Se ricevi l'autorizzazione negata, assicurati di eseguire chmod 777 rebuild_tags.sh
Se guardi i commenti degli script è abbastanza semplice:
-
Utilizza
sed
per trovare tutti i tag in ogni file.md
nella directory_post
-
Utilizza
sed
per massaggiare i dati nel formato corretto -
Prende tutti i tag univoci e crea una directory e un
index.html
per ciascuno
In questo modo, se hai nuovi tag, esegui semplicemente lo script per ricostruire le pagine prima di passare a github
Un modo semplice e non plug-in per fare tag
Modifica
Dipendenza rimossa da altri file. Ho solo bisogno di un solo script!