Εδώ είναι μια λύση για το πώς να δημιουργήσετε σελίδες για κάθε ετικέτα που θα περιλαμβάνει όλες τις αναρτήσεις για μια ετικέτα. Για να αντιστοιχίσετε ετικέτες σε μια ανάρτηση, απλώς βάλτε τα ονόματά τους, διαχωρισμένο διάστημα (ή ως πίνακα YAML, αν προτιμάτε με αυτόν τον τρόπο), στο μπροστινό θέμα:
---
layout: post
title: Tags in Jekyll
description: Adding tags to a Jekyll powered website
summary: Adding tags to a Jekyll powered website.
comments: true
tags: [tags, jekyll]
published: true
---
Αυτό ρυθμίζει την ανάρτηση να έχει ετικέτες. Για να τραβήξετε τις ετικέτες σε μια σελίδα, δημιουργήστε δύο αρχεία: _layouts/tag.html
και _plugins/tags.rb
. Το αρχείο _layouts/tag.html
είναι απαραίτητο για να εκτελεστεί πραγματικά το σενάριο _plugins/tags.rb
. Βάλτε την ακόλουθη προσθήκη στο _plugins/tags.rb
:
module Jekyll
class TagPageGenerator < Generator
safe true
def generate(site)
tags = site.posts.docs.flat_map { |post| post.data['tags'] || [] }.to_set
tags.each do |tag|
site.pages << TagPage.new(site, site.source, tag)
end
end
end
class TagPage < Page
def initialize(site, base, tag)
@site = site
@base = base
@dir = File.join('tag', tag)
@name = 'index.html'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), 'tag.html')
self.data['tag'] = tag
self.data['title'] = "Tag: #{tag}"
end
end
end
Αυτό το σενάριο δημιουργεί έναν κατάλογο (φάκελο) για κάθε ετικέτα στο ιστολόγιό σας και δημιουργεί ένα αρχείο index.html
σε αυτόν και σε αυτό το πρότυπο ετικέτας index.html file
.
Στο αρχείο _layouts/tag.html
, βάλτε αυτό:
---
layout: default
---
<h1>{{page.tag}}</h1>
<ul>
{% for post in site.posts %}
{% if post.tags contains page.tag %}
<li><a class="post" href="{{ post.url }}">{{ post.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
Στο τέλος κάθε ανάρτησης προσθέστε τα εξής:
<p>
Tagged
{% for tag in page.tags %}
<a class="post" href="/tag/{{tag}}">#{{tag}}</a>{% unless forloop.last %}, {% endunless %}
{% endfor %}
</p>
Αυτό είναι!