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
相关产品推荐
相关产品推荐

