Filter 使用液体按字母顺序对帖子排序
有没有一种方法可以使用Jekyll按字母顺序对许多帖子进行排序 我现在有这样的东西:Filter 使用液体按字母顺序对帖子排序,filter,jekyll,liquid,Filter,Jekyll,Liquid,有没有一种方法可以使用Jekyll按字母顺序对许多帖子进行排序 我现在有这样的东西: {% for post in site.categories.threat %} <li><a href="{{ post.url }}">{{ post.title }}</a></li> {% endfor %} {%用于site.categories.threat%} {%endfor%} 这是可行的,但帖子乱七八糟。如果按字母顺序排列的话,看起来会更
{% for post in site.categories.threat %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
{%用于site.categories.threat%}
{%endfor%}
这是可行的,但帖子乱七八糟。如果按字母顺序排列的话,看起来会更好
谢谢如果没有插件或自定义功能,这是无法完成的。尽管如此,我们仍在努力在下一个版本中实现这一点:然后看起来:
{% for tag in site.tags order:ascending %}
...
{% endfor %}
另请参见:我从中改编了一个Jekyll插件来实现这一点。我无法按原样使用插件,因为它在存在空值时失败。我是一名ruby初级程序员,在 sort\例如,反转排序并执行区分大小写的字符串比较(如果sorted属性不是字符串,则忽略): 已排序的\u键\u例如:
{% sorted_keys_for tag in site.tags %}
<a href="/tags/{{ tag | downcase | replace:" ","-"}}.html">{{ tag }}</a><br />
Num posts: {{ site.tags[tag].size }}
{% endsorted_keys_for %}
{site.tags%}中标记的%sorted\u key\u
Num posts:{{site.tags[tag].size}
{%endsorted\为%}
要在Jekyll中使用,请将此代码放入_plugins/sort_For.rb中
module Jekyll
module SortedForImpl
def render(context)
sorted_collection = collection_to_sort context
return if sorted_collection.empty?
sort_attr = @attributes['sort_by']
case_sensitive = @attributes['case_sensitive'] == 'true'
i = sorted_collection.first
if sort_attr != nil
if i.to_liquid[sort_attr].instance_of? String and not case_sensitive
sorted_collection.sort_by! { |i|
k = i.to_liquid[sort_attr]
k ? k.downcase : ''
}
else
sorted_collection.sort_by! { |i|
k = i.to_liquid[sort_attr]
[k ? 1 : 0,k || 1]
}
end
else
if i.instance_of? String and not case_sensitive
sorted_collection.sort_by! { |i| i.downcase }
else
sorted_collection.sort!
end
end
original_name = @collection_name
result = nil
context.stack do
sorted_collection_name = "#{@collection_name}_sorted".sub('.', '_')
context[sorted_collection_name] = sorted_collection
@collection_name = sorted_collection_name
result = super
@collection_name = original_name
end
result
end
end
class SortedForTag < Liquid::For
include SortedForImpl
def collection_to_sort(context)
return context[@collection_name].dup
end
def end_tag
'endsorted_for'
end
end
class SortedKeysForTag < Liquid::For
include SortedForImpl
def collection_to_sort(context)
return context[@collection_name].keys
end
def end_tag
'endsorted_keys_for'
end
end
end
Liquid::Template.register_tag('sorted_for', Jekyll::SortedForTag)
Liquid::Template.register_tag('sorted_keys_for', Jekyll::SortedKeysForTag)
模块杰基尔
模块分类FORIMPL
def渲染(上下文)
排序的集合=集合到排序上下文
如果已排序的集合为空,是否返回?
sort_attr=@attributes['sort_by']
区分大小写=@attributes['case\u sensitive']='true'
i=已排序的集合
如果排序属性!=无
如果i.to\u liquid[sort\u attr]。实例的?字符串,不区分大小写
分类收集。分类依据!{i|
k=i.to_液体[分拣属性]
k?k.唐卡斯:''
}
其他的
分类收集。分类依据!{i|
k=i.to_液体[分拣属性]
[k?1:0,k | 1]
}
结束
其他的
如果我是的话?字符串,不区分大小写
分类收集。分类依据!{| i | i.downcase}
其他的
排序的集合。排序!
结束
结束
原始名称=@collection\u名称
结果=零
context.stack-do
已排序的_集合_name=“#{@collection_name}_sorted”.sub('.','.'u')
上下文[已排序的\u集合\u名称]=已排序的\u集合
@集合\u名称=已排序的\u集合\u名称
结果=超级
@集合名称=原始名称
结束
结果
结束
结束
分类分拣FORTAG<液体::用于
包括已分类的FORIMPL
def集合到排序(上下文)
返回上下文[@collection\u name].dup
结束
def end_标签
“Endu for”
结束
结束
类别分类Keysfortag<液体::用于
包括已分类的FORIMPL
def集合到排序(上下文)
返回上下文[@collection\u name].keys
结束
def end_标签
“endsorted_keys_for”
结束
结束
结束
Liquid::Template.register_标签('sorted_for',Jekyll::SortedForTag)
Liquid::Template.register_标签('sorted_keys_for',Jekyll::SortedKeysForTag)
它可以在没有插件的情况下完成,这意味着它可以使用
不过,您必须使用一些丑陋的字符串操作技巧。我采用了类似的方法 相同的方法,稍作修改:
{% capture posts %}
{% for post in site.posts %}
|{{ post.title }}#{{ post.url }}
{% endfor %}
{% endcapture %}
{% assign sortedposts = posts | split: '|' | sort %}
{% for post in sortedposts %}
{% assign postitems = post | split: '#' %}
<a href={{ postitems[1] }}">{{ postitems[0] }}</a><br>
{% endfor %}
我在本地网站上测试了Christian的伟大解决方案:在第一行之前,输出中有一个空链接(我不知道为什么),因此第一个链接不起作用,所以我修改了他的代码,在
行之前插入{%if%}
,在{%endif%}/code>行之后插入{%endif%}
。建议。我想添加以下内容以供将来参考
要按标题对文章排序,可以使用sort
filter。
看
因此,这是可行的:
{% assign sorted_threat_posts = site.categories.threat | sort: 'title', 'last' %}
{% for post in sorted_threat_posts %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
{%assign sorted_threat_posts=site.categories.threat | sort:'title','last%}
{已排序的\u威胁\u帖子%}
{%endfor%}
在没有插件的GitHub页面中使用Jekyll进行排序既干净又优雅。使用_data目录中的.yml数据文件。我在这里使用一个名为team members.yml的数据文件:
{% assign sorted_team = site.data.team-members | sort:'title' %}
{% for member in sorted_team %}
<span class="title">{{ member.title }}</span>
{% endfor %}
{%assign sorted_team=site.data.team-members | sort:'title%}
{已排序的团队%中的成员为%0}
{{member.title}
{%endfor%}
此模式将处理您在此处需要执行的操作。根据文档,要按某个字段筛选数组,您可以使用:
{% assign sortedPosts = site.posts | sort: 'title' %}
然后,sortedPosts
变量将包含已排序的数组
文档可以在这里找到:这正是我简单目录所需要的,干杯!嗯,这对我不管用。我正在使用{%assign sorted_team=site.data.team-members | sort:'title','name%}
但是我得到了编译错误:液体异常:参数数目错误(3代表2)
我有一个问题。在|上使用拆分,我在数组中得到了一个空的第一个条目,所以我包装了{%instrument forloop.first%}{%endinstrument%}
绕过输出忽略它。这对我来说非常有效,我用我的帖子标题做到了。
{% assign sorted_team = site.data.team-members | sort:'title' %}
{% for member in sorted_team %}
<span class="title">{{ member.title }}</span>
{% endfor %}
{% assign sortedPosts = site.posts | sort: 'title' %}