Jekyll的多个系列帖子的单个索引博客帖子

问题描述 投票:1回答:2

我有几篇博客文章属于一个伞状博客文章。例如,我有几篇关于SQL Zoo教程的帖子,但我希望能够将它们全部链接到一个“伞形”帖子,这样我在博客的索引页面上只有一个SQL Zoo帖子。我得到了这个想法:https://codeasashu.github.io/implement-series-post-jekyll-part-2/并试图按照说明操作,但现在我的系列文章没有显示在我的索引页面上。我在_ _includes文件夹中名为post-series.html的文件中有以下代码:

{% assign seriesarray = '|' | split : '|' %}
{% assign seriestitle = '' %}
{% assign serieslabel = '' %}
{% assign sortedposts = (site.posts | sort: 'date') %}
{% for post in sortedposts %}
    {% if post.series and page.series_slug != nil and post.series == page.series_slug %}

        {% capture postitem %}    <li> <a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a> </li> {% endcapture %}
        {% assign seriesarray = seriesarray | push: postitem %}
        {% assign seriestitle = 'Posts in this series' %}
        {% assign serieslabel = 'Series Post' %}

    {% elsif post.series != nil and page.series != nil and page.series == post.series %}

        {% assign pageurl = page.url | split:'/' | last %}
        {% assign posturl = post.url | split:'/' | last %}
        {% if pageurl != posturl %}
        {% capture postitem %}    <li> <a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a> </li> {% endcapture %}
        {% else %}
        {% capture postitem %}    <li> {{ post.title }} </li> {% endcapture %}
        {% endif %}
        {% assign seriesarray = seriesarray | push: postitem %}

    {% endif %}

    {% if post.series_slug != nil and page.series != nil and page.series == post.series_slug %}
        {% capture series_title %} <a href="{{ site.url }}{{ post.url }}">{{ post.title }}</a>  {% endcapture %}
        {% assign seriestitle = 'This posts is part of series - ' | append: series_title %}
        {% assign serieslabel = 'This posts is part of series - ' | append: series_title %}
    {% endif %}

{% endfor %}

{% capture serieslayout %}
    {% if seriesarray.size > 0 %}
    <hr />
    <div class="panel">
        <div class="panel-body">
        <h4> {{ seriestitle }} </h4>
        <ul id="post-series-list">
    {% endif %}
    {% for post in seriesarray %} {{ post }} {% endfor %}
    {% if seriesarray.size > 0 %} </ul> </div> </div> {% endif %}
{% endcapture %}

以及我目录的根目录中的index.html文件中的以下代码:

---
layout: index
---

<div id="home">
  <h1>{{ site.title }}</h1>
  <hr />

<ol class="posts">
  {% for post in paginator.posts %}
  {% assign seriesPost = nil %}
  {% if post.series == nil %}
  {% if post.series_slug != nil %} {% assign seriesPost = '(Series)' %} {% endif %}
    <li class="post-listing">
      <img class="post__image" src="/static/img/{{ post.cover_image}}" alt="{{ post.cover_alt }}" />
      <div class="post__text">
        <a class="post__title" href="{{ post.url }}">{{ post.title }}</a><br>
        <span>
          {{ post.date | date_to_string }} &bull;
          {% assign words = post.content | number_of_words %}
          {% if words < 360 %}
            1 min read
          {% else %}
            {{ words | divided_by:180 }} min read
          {% endif %}
        </span>
        {{ post.excerpt }}
      </div>
    </li>
    {% endif %}
    {% endfor %}
  </ol>

  <!-- <div class="sidebar-right sidebar"></div> -->

  <!-- <ul>
    {% for post in paginator.posts %}
      <li>
        <a href="{{ post.url }}">{{ post.title }}</a>
        {{ post.excerpt }}
      </li>
    {% endfor %}
  </ul> -->

  <!-- Pagination links -->
  {% if paginator.total_pages > 1 %}
    <ul class="pagination pagination-sm">
      {% if paginator.previous_page %}
        <li><a href="{{ paginator.previous_page_path | prepend: site.baseurl | replace: '//', '/' }}">&laquo;</a></li>
      {% else %}
        <li class="disabled"><span aria-hidden="true">&laquo;</span></li>
      {% endif %}

      <li><a href="/">First</a></li>

      {% for page in (1..paginator.total_pages) %}
        {% if page == paginator.page %}
          <li class="active"><a>{{ page }}<span class="sr-only">(current)</span></a></li>
        {% elsif page == 1 %}
          <li><a href="/">{{ page }}</a></li>
        {% else %}
          <li><a href="{{ site.paginate_path | prepend: site.baseurl | replace: '//', '/' | replace: ':num', page }}">{{ page }}</a></li>
        {% endif %}
      {% endfor %}

      <li><a href="/page/{{ paginator.total_pages }}/">Last</a></li>

      {% if paginator.next_page %}
        <li><a href="{{ paginator.next_page_path | prepend: site.baseurl | replace: '//', '/' }}">&raquo;</a></li>
      {% else %}
        <li class="disabled"><span>&raquo;</span></li>
      {% endif %}
    </ul>
  {% endif %}
</div><!-- end #home -->

我的完整回购可以在这里找到:https://github.com/thedatasleuth/thedatasleuth.github.io

jekyll
2个回答
1
投票

在你的index.html中,{% if post.series == nil %}只是将包含要打印的series: someserie前端变量的帖子包含在内。

对于第二个问题(请注意,在SO上,您应该一次提出一个问题):

  1. 伞柱在前面的物质上总是有series_slug: "My serie slug"
  2. 意甲的职位总是在前面有series: "My serie slug",这必须严格等于伞页series_slug。 (例如:你有一个已发布的帖子:false和系列:“SQL Zoology”如果你发布它将不会出现在SQL Zoo系列中。)

在_layouts / post.html中删除{% include series.html %}

在_includes / post-series.html中,您可以通过以下方式替换所有代码:

{% comment %} #### On an umbrella page {% endcomment %}
{% if page.series_slug != nil %}
  {% assign key = page.series_slug %}
  {% assign title = page.title %}
  {% assign url = page.url %}
  {% assign sentence = "All posts in this serie :" %}
{% endif %}

{% comment %} #### On a serie page {% endcomment %}
{% if page.series != nil %}
  {% assign key = page.series %}
  {% assign umbrella_page = site.posts | where: 'series_slug', key | first %}
  {% assign title = umbrella_page.title %}
  {% assign url = umbrella_page.url %}
  {% assign series_posts = site.posts | where: "series", key %}
  {% for post in series_posts %}
    {% if post.url == page.url %}
      {% assign idx = forloop.index %}
    {% endif %}
  {% endfor %}
  {% capture sentence %}
  This article is <strong>Part {{ idx }}</strong> in a <strong>{{ series_posts.size }}-Part</strong> in <a href="{{ site.baseurl }}{{ url }}">{{ title }} serie</a>
  {% endcapture %}
{% endif %}

{% if page.series_slug != nil or page.series != nil %}
  {% assign series_posts = site.posts | where: "series", key %}
  <hr />
  <div class="panel">
    <div class="panel-body">
      {% if page.series_slug != nil %}
        {% assign key = page.series_slug %}
        {% assign title = page.title %}
        {% assign url = page.url %}
      {% endif %}

      <h4>{{ sentence }}</h4>
      <ul id="post-series-list">
      {% for post in series_posts %}
        <li>
        {% if page.url == post.url %}
          This post : {{ post.title }} - part {{ forloop.index }}
        {% else %}
          <a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }} - part {{ forloop.index }}</a>
        {% endif %}
        </li>
      {% endfor %}
      </ul>
    </div>
  </div>
{% endif %}

0
投票

The problem you are facing

你忘了添加seriesseries_slug YML变量。这就是为什么它不适用于你的情况。您似乎无法完全理解代码的工作原理,可能是由于解决方案的复杂性。因此,我添加了另一个(更简单的)解决方案,可能同样适合您的需求。


A better/simpler solution

只需将一个名为group: groupname的YML变量添加到组中所需的每个帖子中。在分页期间不要跳过任何帖子。接下来,使用下面的代码在每个帖子的页脚(在您的页面/帖子布局中)列出具有相同组的帖子。最后,将“第1部分”,“第2部分”等添加到系列中的帖子名称。

{% if post.group != nil %}
  <ul>
  {% for post in site.posts %}
    {% if post.group == page.group %}
      <li><a href="{{ post.url }}">{{ post.title }}</a></li>
    {% endif %}
  {% endfor %}
  </ul>
{% endif %}

PS。如果你真的想跳过分页中的一些帖子,我会创建一个通用的解决方案。将Qazxswpoi布尔值添加到Front Matter(YML)并查看分页循环中是否为true。这使您可以跳过分页器中的任何帖子。

© www.soinside.com 2019 - 2024. All rights reserved.