You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll如何按优先取title-override的展示标题对页面字母排序

你可以先为所有页面生成最终展示的标题作为排序基准,再按这个基准排序即可,以下是兼容所有Jekyll版本的实现方案:

<table>
  <tbody>
    {% assign page_sort_list = "" | split: "" %}
    {% for page in site.pages %}
      {% assign display_title = page.title %}
      {% if page.title-override %}
        {% assign display_title = page.title-override %}
      {% endif %}
      <!-- 拼接排序标识,加入循环索引避免标题重复时出现排序异常 -->
      {% assign sort_item = display_title | append: "|" | append: forloop.index0 %}
      {% assign page_sort_item = sort_item | split: "|" | push: page %}
      {% assign page_sort_list = page_sort_list | push: page_sort_item %}
    {% endfor %}

    <!-- 按展示标题排序 -->
    {% assign sorted_pages = page_sort_list | sort: 0 %}

    {% for item in sorted_pages %}
      {% assign page = item[2] %}
      <tr>
        <td>
          <a href="{{ site.url }}{{ page.url }}">
            {% if page.title-override %}
              {{ page.title-override }}
            {% else %}
              {{ page.title }}
            {% endif %}
          </a>
        </td>
      </tr>
    {% endfor %}
  </tbody>
</table>

如果你的运行环境使用Jekyll 4.0及以上版本,可以用sort_by_exp过滤器实现更简洁的写法:

<table>
  <tbody>
    {% assign sorted_pages = site.pages | sort_by_exp: "page.title-override | default: page.title" %}
    {% for page in sorted_pages %}
      <tr>
        <td>
          <a href="{{ site.url }}{{ page.url }}">
            {{ page.title-override | default: page.title }}
          </a>
        </td>
      </tr>
    {% endfor %}
  </tbody>
</table>

另外注意你原代码中的{% else page.title %}属于语法错误,正确写法是{% else %}后单独输出{{ page.title }},上述代码已经修正了这个问题。

内容的提问来源于stack exchange,提问作者Mitchell Andrew Abbott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:57:02