Отключенная категория «Без категории» отображается в выпадающих списках категорий

Вернулся ли он в свою последнюю форму? Он отключен и всё:

Но отображается в различных выпадающих списках категорий. Вероятно, это не проблема на бэкенде, но он также предлагается в поиске:

1 лайк

У меня нет возможности воспроизвести это на основной ветке.

@j.jaffeux Я могу воспроизвести это на try.discourse.org. Я вижу, что настройка «Разрешить темы без категории» отключена на этом форуме, поскольку в меню «Категория…» композитора темы отсутствует пункт «Без категории».

Меню расширенного поиска

Пункт «Без категории» присутствует в меню «Категории» на странице расширенного поиска.

  1. Перейдите по следующей ссылке, чтобы открыть страницу расширенного поиска демонстрационного форума Discourse в вашем браузере:
    https://try.discourse.org/search
  2. Нажмите «Дополнительные фильтры».
    Раздел «Дополнительные фильтры» на странице раскроется.
  3. Нажмите на меню «Все категории».
    Меню откроется.

:bug: В меню присутствует пункт «Без категории».

Автодополнение при поиске

  1. Перейдите по следующей ссылке, чтобы открыть демонстрационный форум Discourse в вашем браузере:
    https://try.discourse.org/
  2. Нажмите на значок лупы («Поиск») в правом верхнем углу страницы.
    Откроется интерфейс поиска.
  3. Введите #u в поле «Поиск».
    Появится меню автодополнения фильтра по категориям.

:bug: В меню автодополнения фильтра по категориям присутствует пункт «Без категории».

Автодополнение в композиторе сообщений

  1. Если у вас ещё нет аккаунта, создайте его на try.discourse.org.
  2. Войдите в свой аккаунт на try.discourse.org.
  3. Перейдите по следующей ссылке, чтобы открыть демонстрационный форум Discourse в вашем браузере:
    https://try.discourse.org/
  4. Нажмите кнопку «Новая тема» в правом верхнем углу страницы.
    Откроется композитор темы.
  5. Кликните в поле тела сообщения в композиторе темы.
  6. Введите #u в поле «Поиск».
    Появится меню автодополнения фильтра по категориям.

:bug: В меню автодополнения фильтра по категориям присутствует пункт «без категории».

Изменение порядка категорий

Я также могу воспроизвести наличие категории «Без категории» в диалоге «Изменение порядка категорий». Это происходит на форуме, где я являюсь администратором и где настройка «Разрешить темы без категории» отключена (очевидно, я не могу протестировать это на try.discourse.org). Этот форум использует версию Discourse d8c855e55978d00fc63021b31ecd00a4bee9d922.

  1. Войдите в аккаунт администратора на форуме, где настройка «Разрешить темы без категории» отключена.
  2. Откройте страницу «Категории» (/categories).
  3. Нажмите на значок гаечного ключа («Управление категориями») в правом верхнем углу страницы.
    Откроется диалог «Изменение порядка категорий».

:bug: В диалоге присутствует пункт «Без категории».

Я согласен с @manuel, что наличие этого пункта в диалоге менее критично, чем его присутствие в интерфейсах, с которыми работают пользователи, но я решил упомянуть об этом, так как вы, по-видимому, даже не можете воспроизвести эту ошибку.

4 лайка

@hugh Я даже не уверен, что нам стоит и дальше поддерживать эту «некатегоризированную» ловушку.

За эти годы я старался избавиться от как можно большего её объёма, но постоянно появляются новые пограничные случаи.

На мой взгляд, нам следует убрать настройки и просто разрешить пользователям выбирать категорию по умолчанию. Компонент темы может скрыть значок конкретной категории в редких случаях, когда люди не хотят показывать его на «Общем» или аналогичном.

2 лайка

Смогли ли мейнтейнеры воспроизвести ошибку, следуя процедурам, которые я описал в своем предыдущем ответе? Я спрашиваю, потому что вижу, что тема всё ещё помечена тегом needs-repro.

Если вы сможете воспроизвести ошибку, пожалуйста, удалите этот тег из темы, чтобы было ясно, что отчёт теперь готов к обработке в текущем виде.

2 лайка

Держитесь, Пер, это выпало из нашего поля зрения. Приоритизируем это для подтверждения воспроизводимости и назначаем на Member XP.

1 лайк

Пер, мне не хочется отвечать на это словами «попробуй что-то другое», но я задаюсь вопросом: что мешает вам просто отключить использование «suppress uncategorized» на Arduino?

Мне кажется, что вся эта функция — запутанный поворот. В параллельной вселенной я бы просто удалил настройку сайта: темам нужна категория, поэтому существование вселенной, где у тем есть категория (но на самом деле её нет), запутывает и практически ничего не добавляет для конечных пользователей, учитывая, что можно просто кидать всё в «Общее», если люди не могут классифицировать.

Хотите, чтобы мы помогли перенести «сбор тем, у которых нет категории» в категорию «Общее»?

2 лайка

Вы имеете в виду снятие галочки с настройки сайта «Разрешить некатегоризированные темы»?

Если да, то именно так настроен Форум Arduino (и всегда был).

Обратите внимание, что за исключением функции «Изменить порядок категорий» (которую мы уже отметили как не очень важную), я подтвердил, что ошибку можно воспроизвести по инструкциям, которые я предоставил на try.discourse.org. Таким образом, Форум Arduino не имеет прямого отношения к этому обсуждению. Насколько я могу судить как обычный пользователь, настройка сайта «Разрешить некатегоризированные темы» отключена на try.discourse.org.

Проблема, о которой сообщается здесь, заключается в том, что категория Uncategorized отображается в пользовательском интерфейсе на форумах, где эта категория отключена через настройку сайта «Разрешить некатегоризированные темы».

Это меня вполне устраивает.

Как человек, который годами боролся за то, чтобы пользователи выбирали подходящую категорию для своих тем, я понимаю, почему некоторые операторы форумов считают полезной функцию, позволяющую пользователям пропускать выбор категории. Однако я не заинтересован в использовании функции «Разрешить некатегоризированные темы» на своём форуме, поэтому удаление этой функции меня лично не затронет.

Поскольку у меня нет опыта использования функции «Разрешить некатегоризированные темы», я не могу комментировать её относительные преимущества по сравнению с использованием обычной категории, как вы предлагаете.

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

Не совсем уверен, что вы имеете в виду. Однако я хотел бы это понять.

Вы предлагаете какую-то помощь в категоризации Форума Arduino?

Если вы смотрите на Форум Arduino, то может возникнуть путаница из-за того, что у нас действительно есть категория с названием «Uncategorized». Однако это обычная категория, которая просто случайно имеет такое название, а не специальная категория, предоставляемая настройкой сайта «Разрешить некатегоризированные темы». Наша категория «Uncategorized» на самом деле имеет совершенно противоположную цель по сравнению с функцией «Разрешить некатегоризированные темы». Она никоим образом не связана с предметом этого отчёта об ошибке, но, если вам интересно, почему мы так сделали, это объясняется здесь.

2 лайка

Ага, понял. Только что провёл небольшую локальную отладку и подтверждаю: проблема воспроизводится на 100% в стандартных установках Discourse.

Давайте кратко резюмирую:

Когда речь заходит о категории «Без категории» (Uncategorized), есть два параметра:

allow_uncategorized_topics — по умолчанию выключено
suppress_uncategorized_badge — по умолчанию включено

Если параметр allow_uncategorized_topics отключён (стандартная настройка), его наличие ошибочно проявляется в некоторых местах.

Если попытаться обойти проблему, включив категорию «Без категории», чтобы затем её удалить, вы столкнётесь с следующим:

В Discourse эта категория ведёт себя очень странно:

  1. Она обязательно должна присутствовать.
  2. Её невозможно удалить.
  3. Мы внедряем её в огромное количество логики в самых разных местах:

Мы можем исправить утечку, добавляя всё больше и больше условных операторов; сейчас их, вероятно, уже не менее 10 как на стороне клиента, так и на сервере.

Или же мы можем исправить это в корне: просто разрешить администраторам удалять эту категорию. Тогда она исчезнет, и нам больше никогда не придётся её проверять.

Моя рекомендация следующая:

  1. Удалить оба параметра, а также скрытый параметр uncategorized_category_id.
  2. Ввести понятие категории по умолчанию (что у нас уже есть) — у нас уже есть default_composer_category.
  3. Тогда «Без категории» (uncategorized) перестанет быть особым концептом, и нам не придётся разбираться с лишними сложностями.
  4. Предоставить компонент темы для тех, кому обязательно нужна «категория без значка».

Текущую ошибку в поиске можно исправить примерно так:

diff --git a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
index a678919d16..83a9ed27db 100644
--- a/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
+++ b/app/assets/javascripts/select-kit/addon/components/search-advanced-category-chooser.js
@@ -1,4 +1,5 @@
 import { classNames } from "@ember-decorators/component";
+import { setting } from "discourse/lib/computed";
 import CategoryChooserComponent from "select-kit/components/category-chooser";
 import {
   pluginApiIdentifiers,
@@ -7,11 +8,13 @@ import {
 
 @classNames("search-advanced-category-chooser")
 @selectKitOptions({
-  allowUncategorized: true,
+  allowUncategorized: "allowUncategorized",
   clearable: true,
   none: "category.all",
   displayCategoryDescription: false,
   permissionType: null,
 })
 @pluginApiIdentifiers("search-advanced-category-chooser")
-export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {}
+export default class SearchAdvancedCategoryChooser extends CategoryChooserComponent {
+  @setting("allow_uncategorized_topics") allowUncategorized;
+}
import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import SearchAdvancedCategoryChooser from "select-kit/components/search-advanced-category-chooser";

module(
  "Integration | Component | select-kit/search-advanced-category-chooser",
  function (hooks) {
    setupRenderingTest(hooks);

    hooks.beforeEach(function () {
      this.set("subject", selectKit());
    });

    test("respects allow_uncategorized_topics setting when false", async function (assert) {
      this.siteSettings.allow_uncategorized_topics = false;

      await render(<template><SearchAdvancedCategoryChooser /></template>);

      await this.subject.expand();

      // Uncategorized category (ID 17 in test data) should not be present when setting is false
      assert.false(
        this.subject.rowByValue(17).exists(),
        "uncategorized category is not available when allow_uncategorized_topics is false"
      );
    });

    test("shows uncategorized category when allow_uncategorized_topics is true", async function (assert) {
      this.siteSettings.allow_uncategorized_topics = true;

      await render(<template><SearchAdvancedCategoryChooser /></template>);

      await this.subject.expand();

      // Uncategorized category (ID 17 in test data) should be present when setting is true
      assert.true(
        this.subject.rowByValue(17).exists(),
        "uncategorized category is available when allow_uncategorized_topics is true"
      );
    });

    test("has correct default options", async function (assert) {
      await render(<template><SearchAdvancedCategoryChooser /></template>);

      assert.strictEqual(
        this.subject.header().label(),
        "All categories",
        "has correct default none label"
      );
    });
  }
);

Но это лишь исправление ошибки в расширенном поиске — мы просто играем в «ладошки» (ловим баги по одному), не решая проблему системно…

3 лайка