Eğer yazılarımıza etiket ekleyip arşivimizi de etiketlere göre filtrelemek istiyorsak, ihtiyacımız olanlar;
- tüm postları listelediğimiz genel bir arşiv sayfası,
- her post için etiketleri tanımlamak,
- ve tanımladığımız her etiket için o etiketi kullanan tüm postları listeleyeceğimiz birer sayfa oluşturmak.
Arşiv Sayfası Oluştur
Oldukça kolaydır, aşağıdaki gibi oluşturulabilir:
{% assign posts = site.posts | sort: "date" | reverse %}
{% for post in posts %}
<li><a href="{{post.url}}">{{post.title}}</a></li>
{% endfor %}
Burada basitçe, tüm postları sırasıyla listeledik. Tabii ki, yalnızca başlıkları yazdırmak güzel olmayacaktır, nasıl düzenlemek istediğiniz size kalmış. Benim çözümüm _include/post_header.html
adında bir include dosyası oluşturup sırasıyla post.title, post.date, post.tags, post.description
gibi paremetleri orada düzenleyip istediğim yerde istediğim şekilde çağırmak olmuştu. Ancak, konu ile doğrudan ilgisi olmadığı için ve aşağıdaki kodlarda gereksiz karmaşa yaratacağı için burayı tek satır ile geçiyorum. (bknz: Include.html)
Bu sayfanın permalinkini “/tag/” şeklinde belirledim. Bu sayfa doğrudan ilgili olmasa da neden önemli olduğunu aşağıda açıklayacağım. [1]
Post Etiketlerini Tanımla
Beklediğiniz gibi, etiketlemek istenilen postun front-matterına aşağıdaki satıra benzer bir satır eklemeliyiz.
tags: tag1 tag2 tag3
Ayrıca, ilgili layoutlara (örneğin _layouts/post.html) bu etiketleri, üçüncü adımda oluşturacağımız ilgili etiket sayfalarına yönlendirecek linkler şeklinde eklemeliyiz.
Ben, tagleri birazdan fazla yerde, farklı parametreler ile çağırdığım için, burada bir include dosyası (_include/get_tags.html
) oluşturdum. Basitleştirilmiş içeriği aşağıdadır:
{% for tag in page.tags %}
{% capture tag_name %}{{ tag }}{% endcapture %}
<a href="/tag/{{ tag_name }}">#{{ tag_name }}</a>
{% endfor %}
page.tags
içindeki herbir tag
‘i yakalayıp “/tag/tag_name” referansı ile link şeklinde yazdırıyoruz.
[1] /tag/
permalinki ile oluşturduğumuz arşiv sayfasının önemi burada ortaya çıkıyor. /tag/
sayfası olmadan da /tag/tag_name/
sorunsuz şekilde çalışacaktır. Teknik anlamda bağlantılı değil; ancak hiyerarşik anlamda hoş olmayacaktır. Herhangi bir etiket için sondaki /tag_name/
kısmını sildiğimizde /tag/
tek başına 404 verecektir.
Örnek kullanım:
_layouts/post.html’de {% include get_tags.html %}
şekinde kullanıldığında, tags: tagx tagy
etiketlerine sahip sayfa için, #tagx #tagy
çıktısını verecektir. Bunlar sırasıyla /tag/tagx/ ve /tag/tagy/ sayfalarına gidecek bağlantılardır.
Etiket Sayfalarını Oluştur
Sıra geldi, yukarıda bahsettiğim /tag/tag_name
sayfalarını oluşturmaya. Sitede kullandığınız herbir etiket için ayrı sayfaya (ayrı dosyaya) ihtiyacınız var. Herhangi bir özel içeriği olmayacak sadece aynı layoutu kullanarak ilgili yazıları listeleyecek bu sayfaları bir çeşit script kullanarak otomatik oluşturabilirsiniz ya da elle ekleyebilirsiniz. Windows kullanılıyorsanız, C# ile yazdığım konsol uygulamasını kullanabilirsiniz. Tag Page Generator
Bu sayfalar şu dizinde your_jekyll_directory/tag/tag_name.md
aşağıdaki örnek front-matter ile oluşturulmalıdır:
---
layout: tag
title: "Tag: tag_name"
tag: tag_name
---
layout: tag
Arşiv sayfasındaki koda basit bir if koşulu eklememiz yeterli olacaktır:
{% assign posts = site.posts | sort: "date" | reverse %}
{% for post in posts %}
{% if post.tags contains page.tag %}
<li><a href="{{post.url}}">{{post.title}}</a></li>
{% endif %}
{% endfor %}