2012-06-05 11 views
5

Jestem bardzo nowy dla Jekyll i Ruby (jeszcze, bardzo podniecony).Filtr site.related_posts w Jekyll

Bez użycia wtyczki, próbuję znaleźć sposób filtrowania site.related_posts.

Na przykład czytam wpis o tytule Foo i kategoriach A, B.

Strona zawiera łącznie 3 stanowisk:

  1. Foo (kategorie: A, B)
  2. Bar (kategorie: A, C, D)
  3. Zoo (kategorie: B, F)

przez domyślnie w Jekylla możemy to zrobić:

{% do stanowiska w granicach site.related_posts 5%}
{% endfor%}

Jednakże, powyższy kod zwraca wszystkie (3) stanowiska.

Post zawiera wiele kategorii, więc kategorie powinny być tablicą.

Jak mogę zmodyfikować kod i zwrócić tylko tych, których kategorie przecinają się z kategoriami bieżących wpisów?

(w tym przykładzie chciałbym kod powrotu tylko Foo i Zoo.)

+0

Pamiętaj, że domyślnie "powiązane wpisy" to w rzeczywistości najnowsze wpisy. Ustaw 'lsi: true' w _config.yml lub uruchom Jekyll za pomocą' --lsi', aby uzyskać wyniki wyższej jakości. –

Odpowiedz

5

nie mam możliwości przetestowania tego teraz, ale coś jak to będzie działać dany Liquid's ograniczoną składnię:

{% 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

Dla jeszcze lepszych rezultatów próbuję tego samego kodu używając 'site.posts' zamiast' site.related_posts limit: 5'. Wielkie dzięki! –

+0

Świetne połączenie z dokumentacją Liquid, która otworzyła mi oczy. – kiewic

1

Upewnij każdy post ma kategorię w przedniej materii YAML, a następnie dodać do tego, gdzie chcesz pokazać pocztowego odnoszące CATEGORY_NAME:

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