如何在 Octobercms 中对列表顶部的特色博客文章进行排序

How can I sort the featured blog posts in the top of the list in Octobercms

我的要求很简单。我想让我的博客列表按 created_at DESC 排序,但我还想在顶部显示精选帖子。

假设我有 4 个类别:黄金、白银、青铜和其他...

我想先显示金帖

然后是白银帖子。

紧随其后的是青铜帖。

最后是其他人。

全部按created_at DESC排序。

  1. 是否有开箱即用的功能可以做到这一点?
  2. 或者我应该创建一个新插件来使用此功能扩展博客吗?

你怎么看?

我假设您正在使用 Rainlab 博客插件。有很多方法可以解决这个问题,我认为没有官方的 "way"。以下是您必须适合自己的代码的一些示例。

  1. 使用 Twig 的解决方案。 Twig 有一个排序过滤器,你可以传入一个 箭头函数,检查 这里。然后你 可以做 if 语句来显示金牌到铜牌。

    {% for blog in blogs|sort((a, b) => a.created_at <=> b.created_at) %}
    {% if blog.category == Gold %}{{ blog }}{% endif %}
    {% endfor %}
    
  2. 临时 CMS 第页。反而 使用 rain blag 组件你可以使用 PHP 中的插件 代码为page/layout/partial。这是给你能力的地方 使用模型以您想要的方式组织它。我在这里 使用 OctoberCMS 查询 功能.

    use Rainlab\Blog\Models\Post;
    
    public function onStart() {
        $this['golds'] = Post::whereHas('categories', function ($query) {
            $query->where('name', 'Gold');
        })->get()->sortBy('create_at');
    }
    
  3. 第三种方法也是我推荐的方法是构建你自己的插件 可以像我在 CMS 页面示例。 Read the documentation here.

请注意,如果您单击进入 {% component 'something' %},您可以展开 htm 模板。