published on 16.06.2018

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 %}
You are reading the 6th of 19 episodes in Jekyll.
Published on 16.06.2018 by Mert Bakır with commit de81d3f.
jekyll
#jekyll #static-site
Next episode:
Liquid: String İşlemleri
published on 31.05.2018

Daha önce Liquid: Sayfalandırma ve Dizi Filtreleme konusunda birkaç dizi operasyonundan ve döngülerden bahsetmiştim. Şimdi stringler ile oynayacağız. Öncelikle belirteyim, liquid syntax’ı kesinlikle matematikte iyi değil, zaten amacı da o değil. Buna bağlı olarak jekyll ile dinamik yapılar …

published on 03.07.2018

Bu yazıda liquid syntaxında forloop’dan bahsedeceğiz. Yeni başlayanların da ilk karşılaştıkları klasik yapı, for döngüsü. {% for post in site.posts%} // Do something here {% endfor %} Hemen karşınıza çıkmayan bazı incelikleri var. Onları paylaşalım: {% for i in (0..10) %} {{i}} {% endfor %} …

published on 03.07.2018

Bu yazıda, liquid syntax’ı ile diziler üzerinde yapılabilecek bazı işlemler üzerinde duracağım. Etiketlere Göre İlgili Yazılar Devam konusundaki inadım üzerine liquid’in array yapısı ile epey içli dışlı oldum. Öğrendiklerimi burada not alacağım. […] Doğru cevap: …

published on 10.07.2022

Previously, I’ve published a blog post about deploying static content on heroku with basic authentication. You can find the link here. In that post, we hosted the source code on GitLab and configured a CI/CD pipeline to render the static content a.k.a html files and push these files to Heroku. …

published on 28.05.2022

Each git commit has a field called Author which consists ‘user.name’ and ‘user.email’. We usually set these variables once, after installing git, with git config --global so that each repo gets the variables from the global definition. We can also set them locally for a …

published on 25.05.2022

In this post, I’ll first walk through hosting static content with basic authentication. Then, we’ll look into deploying to Heroku using GitLab Pipelines, more specifically deploying a certain sub-directory within the project instead of pushing the whole project. Also, I’ll share …

published on 17.04.2022
edited on 15.07.2022

Önceki bölümde, markdown formatını LaTeX formatına dönüştürmek için kullanılan Pandoc yazılımından bahsetmiştik. Şimdi konuyu bir adım daha ileri taşıyıp ve bookdown’a geçiyoruz. Bookdown; Rmarkdown kullanarak teknik dökümanlar, kitaplar yazabilmemizi sağlayan, Yihui Xie tarafından yazılmış …

published on 10.04.2022

I’ve been using WSL-2 on Windows for over a year. It’s very useful because some Python packages are just a headache to install on Windows. Also, docker. It’s just better on Linux. Yet, WSL-2 can also be problematic. I remember trying a dual-boot setup when things just went way too …

published on 03.03.2022

In this post, I’ll share how to install geopandas and some other gis related packages on Windows. If you are on Mac or Linux you can probably just pip install those without any issue. I usually had to do a google search every time I wanted to install these packages on Windows environment. Of …