Как просмотреть категории и раздел «Последнее» на мобильном устройстве?

Как просмотреть категории и «Последние» на мобильном устройстве?

Так?

Я посмотрел, и они использовали некоторый пользовательский JS-код, чтобы принудительно включить представление «Категории и последние темы».

Я не проверял, есть ли более лучший способ; вот что они делают (я модернизировал код и добавил некоторые комментарии):

import { apiInitializer } from "discourse/lib/api";
import CategoriesAndLatestTopics from "discourse/components/categories-and-latest-topics";
import CategoryList from "discourse/models/category-list";
import { MAX_UNOPTIMIZED_CATEGORIES } from "discourse/lib/constants";

export default apiInitializer((api) => {
  // Принудительно включает представление «Категории и последние темы».
  api.modifyClass(
    "component:discovery/categories-display",
    (Superclass) =>
      class extends Superclass {
        get categoriesComponent() {
          if (this.args.parentCategory) {
            return super.categoriesComponent;
          } else {
            return CategoriesAndLatestTopics;
          }
        }
      }
  );

  // То же, что и в оригинале, но с изменением проверки "this.site.desktopView",
  // чтобы последние темы находились также и для мобильных устройств.
  api.modifyClass(
    "route:discovery-categories",
    (Superclass) =>
      class extends Superclass {
        async findCategories(parentCategory) {
          let model;

          let style = this.siteSettings.desktop_category_page_style;
          if (this.site.categories.length > MAX_UNOPTIMIZED_CATEGORIES) {
            style = "categories_only";
          }

          if (
            style === "categories_and_latest_topics" ||
            style === "categories_and_latest_topics_created_date"
          ) {
            model = await this._findCategoriesAndTopics(
              "latest",
              parentCategory
            );
          } else if (style === "categories_and_top_topics") {
            model = await this._findCategoriesAndTopics(
              "top",
              parentCategory
            );
          } else {
            PreloadStore.remove("topic_list");
            model = await CategoryList.list(this.store, parentCategory);
          }

          return model;
        }
      }
  );
})

Вы можете попробовать вставить этот код в новый компонент → Редактировать код → вкладка JS.
Дайте знать, если это поможет.

Очень вам благодарен. Я попробовал, но ничего не изменилось. :thinking:

Я бы проверил следующее, убедитесь, что:

  • Код находится во вкладке JS (а не в других местах)
  • Ваш код включен (если вы создали TC, убедитесь, что он прикреплен к теме)
  • У вас есть настройка сайта desktop_category_page_style со значением categories_and_latest_topics
  • Нет ошибок в консоли браузера

Давайте посмотрим, сможем ли мы выяснить, почему ничего не происходит.

Кажется, я всё сделал именно так. Правильно скопировано?

Вы можете удалить дубликат. Скорее всего, именно это является причиной неработоспособности (эти 5 строк):

Теперь что-то происходит! Но не тогда, когда я использую «современную категорию и группу». :sweat_smile: