Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 使用液体按字母顺序对帖子排序_Filter_Jekyll_Liquid - Fatal编程技术网

Filter 使用液体按字母顺序对帖子排序

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%} 这是可行的,但帖子乱七八糟。如果按字母顺序排列的话,看起来会更

有没有一种方法可以使用Jekyll按字母顺序对许多帖子进行排序

我现在有这样的东西:

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