Изменение документации Discourse для сортировки только по заголовку

Документация Discourse стала главной причиной, по которой я выбрал Discourse вместо другого программного обеспечения для форумов. Однако для меня есть один существенный недостаток: по умолчанию сортировка осуществляется по активности. Я хотел бы полностью убрать возможность сортировки по активности, но не могу понять, как это сделать.

Я нашел этот участок кода, удалил оператор elsif для сортировки по активности, но это не помогло.

      if @filters[:order] == "title"
        if @filters[:ascending].present?
          results = results.reorder('topics.title')
        else
          results = results.reorder('topics.title DESC')
        end
      elsif @filters[:order] == "activity"
        if @filters[:ascending].present?
          results = results.reorder('topics.last_posted_at')
        else
          results = results.reorder('topics.last_posted_at DESC')
        end
      end

Я также сделал то же самое в этом файле, но сортировка по-прежнему работает так же.

   context 'when ordering results' do
      context 'by title' do
        it 'should return the list ordered descending' do
          get "/docs.json?order=title"

          expect(response.status).to eq(200)

          json = response.parsed_body
          topics = json['topics']['topic_list']['topics']

          expect(topics[0]['id']).to eq(topic2.id)
          expect(topics[1]['id']).to eq(topic.id)
        end

        it 'should return the list ordered ascending with an additional parameter' do
          get "/docs.json?order=title&ascending=true"

          expect(response.status).to eq(200)

          json = response.parsed_body
          topics = json['topics']['topic_list']['topics']

          expect(topics[0]['id']).to eq(topic.id)
          expect(topics[1]['id']).to eq(topic2.id)
        end
      end

      context 'by date' do
        before do
          topic2.update(last_posted_at: Time.zone.now + 100)
        end

        it 'should return the list ordered descending' do
          get "/docs.json?order=activity"

          expect(response.status).to eq(200)

          json = response.parsed_body
          topics = json['topics']['topic_list']['topics']

          expect(topics[0]['id']).to eq(topic.id)
          expect(topics[1]['id']).to eq(topic2.id)
        end

        it 'should return the list ordered ascending with an additional parameter' do
          get "/docs.json?order=activity&ascending=true"

          expect(response.status).to eq(200)

          json = response.parsed_body
          topics = json['topics']['topic_list']['topics']

          expect(topics[0]['id']).to eq(topic2.id)
          expect(topics[1]['id']).to eq(topic.id)
        end
      end
    end

Я вносил изменения как напрямую в файл на сервере, так и в форк документации Discourse, который затем установил.

Есть ли у кого-нибудь советы? Я действительно думал, что это займет три минуты, но уже потратил на это много часов…

Спасибо!

1 лайк

Неважно, я разобрался. По какой-то причине в VS Code был включён фильтр, скрывающий файлы JavaScript. Поэтому при поиске таких слов, как Order, Sort, Activity и т. д., результаты для JS-файлов не отображались (а ведь именно они отвечают за интерактивные функции, такие как сортировка…).

Я сделал форк репозитория и внёс изменения. Пользоваться им может кто угодно. Это решение убирает возможность сортировки по активности, по умолчанию сортирует список тем по заголовку по возрастанию, а фильтры категорий — по алфавиту по возрастанию.

Я не знаю, как добавить настройки для пользовательской кастомизации, поэтому пока придётся обойтись этим, пока данная функциональность не будет включена в официальный плагин.

https://github.com/nickchomey/discourse-docs

4 лайка

Было бы здорово, если бы это было включено в официальную версию. Как насчет создания PR? :slight_smile: Тогда порядок будет скорректирован соответствующим образом в Discourse Docs Card Filter, верно?

1 лайк

Я действительно не знаю, как это сделать. Не стесняйтесь! Идеально было бы добавить настройку администратора для выбора между сортировкой по алфавиту, активности и/или количеству.

1 лайк

Спасибо за это. Кто-нибудь знает, как правильно это настроить? Я всё ещё новичок в конфигурировании плагинов.

Насколько я понимаю, это дополнение (алфавитная сортировка) было добавлено @Nick_Chomey как форк оригинального плагина.

Какой будет лучший способ использовать это?

Могу ли я просто изменить часть кода в оригинальном плагине Docs или мне нужно удалить оригинальный плагин и переустановить этот форк?

Спасибо!

1 лайк

Да, удалите Discourse Docs и установите этот плагин так же, как и любой другой. Я не слежу за ним и не обновляю его регулярно, но с радостью сделаю это, если кто-то попросит. Или вы можете сделать форк и отслеживать изменения самостоятельно.

Конечно, лучший вариант — если Discourse добавит это как настройку или функцию в официальный плагин.

1 лайк

Привет! Спасибо за внесение изменений в Документацию (даже локально)!

Я перенёс это в #feature и добавил тег docs, чтобы нам было проще отслеживать это в будущем.

3 лайка

Отлично, спасибо!

Как вы увидите, я просто добавил функционал сортировки по алфавиту и закомментировал сортировку по активности. Так что это решение подходит не всем. Но я уверен, что вы легко сможете интегрировать моё дополнение и добавить настройку, позволяющую выбирать/переключать доступные типы сортировки — я не знал, как это сделать.

3 лайка