工艺 - 按标题排序是一个数字

时间:2014-02-19 13:51:14

标签: php sorting twig

在工艺中,我试图按标题排序条目,每个标题都是一个数字,但排序功能像一个单词一样处理它。因为“100”显示在“2”之前,“31”显示在“4”之前,依此类推。

{% for entry in craft.entries.section('mySection').order('title').find() %}
    <h2>§{{entry.title}}</h2>
{% endfor %}

思想?

2 个答案:

答案 0 :(得分:2)

有一个名为SuperSort的Craft插件可以与natsort一起使用。

{% for entry in craft.entries.section('mySection').order('title').find()|supersort('natsort') %}
    <h2>§{{entry.title}}</h2>
{% endfor %}

答案 1 :(得分:1)

我不是手艺专家,但就我所知,它内部使用twig。所以你可以使用过滤器|sort,但你真正想要的是使用PHP函数natsortnatcasesort

使用此功能似乎并不是非常简单,实际上您需要为shown here (slide 51)之类的树枝添加扩展名:

class NatSortExtension extends Twig_Extension_Core {
    public function getFilters() {
        return array_merge(parent::getFilters(), array(
            "natsort" => new Twig_Filter_Method($this, "sortFilter")
        ));
    }
    public function sortFilter($array) {
        natcasesort($array);
        return $array;
    }
}

现在我不知道工艺是如何运作的。在树枝中你添加一个像这样的扩展名:

$twig = new Twig_Environment();
$twig->addExtension( new NatSortExtension());

然后你就可以做到这一点:

{% for entry in craft.entries.section('mySection').order('title').find|natsort %}
    <h2>§{{entry.title}}</h2>
{% endfor %}

很抱歉,我无法继续帮助。

相关问题