2012-06-05 13 views
5

Ben Jekyll ve Ruby için çok yeni (henüz, çok heyecanlı).Filtre site.related_posts in Jekyll

Eklenti kullanmadan, site.related_posts filtrelemenin bir yolunu bulmaya çalışıyorum. Örneğin, Foo ve A, B kategorileriyle yazıyı okuyorum.

Alanı toplam 3 mesajlar içerir:

  1. Foo (Kategoriler: A, B)
  2. Bar (Kategori: A, C, D),
  3. Zoo (Kategori: B, F) varsayılan olarak

, Jekyll biz bunu:

{site.related_posts limit yazı için%:% 5}
{% endfor%}

Bununla birlikte, yukarıda kod Tüm (3) mesajlarını döndürür.

Bir gönderi birçok kategori içerir, bu nedenle kategoriler bir dizi olmalıdır.

Kodu nasıl değiştirebilirim ve yalnızca kategorileri geçerli gönderinin kategorileriyle kesişenleri nasıl değiştirebilirim?

(. Bu örnekte, sadece Foo ve Zoo dönmek için kod istiyorum)

+0

Varsayılan olarak, "ilgili yayınlar" aslında yalnızca en yeni gönderilerdir. _config.yml dosyasında 'lsi: true' öğesini ayarlayın veya daha yüksek kaliteli sonuçlar almak için Jekyll'i' --lsi' ile çalıştırın. –

cevap

5

bunu şimdi test etmek olanağı yoktur, ama böyle bir şey Liquid's sınırlı sözdizimi verilen çalışır olacaktır:

{% for post in site.related_posts limit:5 %} 
    {% assign match = false %} 
    {% for category in post.categories %} 
    {% if page.categories contains category %} 
     {% assign match = true %} 
    {% endif %} 
    {% endfor %} 
    {% if match %} 
    <li><a href="{{ post.url }}">{{ post.title }}</a></li> 
    {% endif %}      
{% endfor %} 
+0

Daha da iyi sonuçlar için, aynı kodu "site.related_posts limit: 5" yerine 'site.posts 'kullanarak deniyorum. Çok teşekkürler! –

+0

Likid'in belgelerine göz gezdiren harika bir bağlantı. – kiewic

1

her yazılan YAML ön konuda bir kategori olduğundan emin olun, o zaman sonrası ilgili CATEGORY_NAME göstermek istiyorum nereye bu ekleyin:

{% for post in site.categories.CATEGORY_NAME %} 
    <li> 
     <a href="{{ post.url }}"> 
      <img src="{{ post.thumbnail }}"> 
      <p>{{ post.excerpt }}</p> 
     </a> 
    </li> 
{% endfor %}