Настройки зависимых плагины... ПОТРЯСАЮЩИЕ!

Ох … это действительно :chefs_kiss:

Позвольте мне проиллюстрировать.

Вот селектор в последней версии Chatbot, обратите внимание, что он в состоянии “выключено”:

Теперь давайте изменим этот выбор:

и он, словно по волшебству :sparkles:, раскрывает настройки, которые нужно учитывать только при выборе этого значения.

Это превосходный способ уменьшить ненужный визуальный шум в настройках плагинов и упростить их конфигурацию, снижая когнитивную нагрузку :tada:

Daniel Labelle's Fast Cleaning Challenge

12 лайков

челюсть отвисает Я ждал чего-то подобного очень-оооочень долго. бросается проверять репозиторий Есть ли какая-нибудь документация по этому поводу?

1 лайк

Не стесняйтесь использовать Chatbot в качестве примера его применения:

И я уверен, что сейчас в ядре есть куча других примеров использования…

2 лайка

Документация существует, но, насколько мне известно, она фрагментирована, а не представлена в виде самостоятельного руководства для разработчиков.

Основные авторитетные источники:

  • Документация схемы в config/site_settings.yml:52, охватывающая depends_on, depends_on_values, depends_behavior и dependent_setting_display.

  • Более подробные инструкции и примеры в .skills/discourse-site-settings/SKILL.md:203.

  • Спецификации поведения бэкенда в spec/lib/site_setting_extension_spec.rb:706.

  • Разрешение зависимостей на стороне фронтенда в frontend/discourse/admin/services/admin-site-setting-store.js:41.

  • Примеры интерфейса в frontend/discourse/tests/acceptance/admin-site-settings-test.js:142.

Базовый синтаксис:

child_setting:
  default: ""
  depends_on:
     - parent_setting
  depends_behavior: "hidden"

Для родителей-перечислений или строк:

 child_setting:
    default: ""
    depends_on:
      - parent_setting
    depends_on_values:
      parent_setting:
        - enabled_mode
        - another_mode
    depends_behavior: "hidden"
    dependent_setting_display: "inline"

Одно важное ограничение: зависимости могут содержать несколько прямых родителей, но разрешение зависимостей не является транзитивным. Вложенная цепочка вида A → B → C не приводит к тому, что C автоматически проверяет, скрыт ли B сам по A; C оценивает только сохранённое значение B.

4 лайка