Как я могу отсортировать избранные посты в верхней части списка в Octobercms - PullRequest
0 голосов
/ 06 октября 2019

Мой запрос прост. Я хочу, чтобы мой список блогов был упорядочен по created_at DESC, но я также хочу показать избранные сообщения в топе.

Допустим, у меня есть 4 категории: золото, серебро, бронза и другие ...

Сначала я хочу отобразить золотые сообщения.

Затем серебряные сообщения.

Далее следуют бронзовые сообщения.

И, наконец, остальные.

Все они должны быть заказаны по created_at DESC.

  1. Есть ли какая-либо функция из коробки для этого?
  2. Или я должен создать новый плагин для расширенияБлог с этой функцией?

Как вы думаете?

1 Ответ

1 голос
/ 06 октября 2019

Я предполагаю, что вы используете плагин Rainlab Blog. Есть множество способов решить эту проблему, и я не думаю, что существует официальный «путь». Вот несколько примеров, которые вам нужно будет подогнать под ваш собственный код.

  1. Решение с помощью Twig. Twig имеет фильтр сортировки, который вы можете передать в функции стрелки, отметьте здесь . Тогда вы можете сделать, если заявления для отображения золота в бронзе.

    {% for blog in blogs|sort((a, b) => a.created_at <=> b.created_at) %}
    {% if blog.category == Gold %}{{ blog }}{% endif %}
    {% endfor %}
    
  2. Adhoc CMS Page . Вместо использования компонента «дождь», вы можете использовать плагин в коде PHP для страницы / макета / частичного. Здесь вы можете работать с моделью, чтобы организовать ее так, как вы хотите. Здесь я использую 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. Прочитайте документацию здесь .

Обратите внимание: если вы нажмете на {% component 'something' %}, вы сможете развернуть шаблон htm.

enter image description here

...