Переопределение значения по умолчанию для опроса, чтобы «public=true»

Мне интересно, сколько ещё сайтов сталкиваются с этой проблемой. Я тоже хотел бы, чтобы опция «Публичный» была стандартной.

Я тоже считаю, что интерфейс можно улучшить.

  • Из многовариантных опросов можно создать опросы с одним голосом, поэтому, на мой взгляд, отдельный пункт «один выбор» не нужен.
  • Расширенный интерфейс должен отображаться всегда.
  • Я хотел бы иметь возможность установить значение Public=True по умолчанию или, если это проще реализовать, Anonymous=False.
  • Галочку для публичности лучше переместить наверх или сделать отдельные элементы интерфейса для публичных и анонимных опросов, так как её слишком легко не заметить.

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

Я новичок, но заинтересован в решении проблемы, поэтому спросил Chat-GPT:

Вот ответ:

Найденный вами скрипт — хорошее начало. Он модифицирует контроллер poll-ui-builder, устанавливая свойство publicPoll в true, когда вызывается функция onShow() контроллера. Это действительно должно быть добавлено как компонент темы.

Однако код может не работать из-за порядка выполнения. Исходный метод onShow() устанавливает publicPoll в false, а затем модификация устанавливает publicPoll в true.

Правильный способ — сначала вызвать родительский метод onShow, а затем установить publicPoll в true:

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
  }
});
</script>

Вы можете добавить этот скрипт в свою тему, выполнив следующие шаги:

  1. Перейдите на панель администратора Discourse.
  2. В разделе «Настройка» нажмите «Темы».
  3. Выберите тему, которую хотите изменить.
  4. На экране редактирования темы нажмите «Изменить CSS/HTML».
  5. В боковой панели слева нажмите «</> Общие».
  6. Вставьте приведенный выше скрипт в раздел «</> Общие».
  7. Нажмите кнопку «Сохранить».

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

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

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

Еще одна вещь, которую я хотел бы изменить, — это поведение интерфейса: я хочу пропустить простой экран. Поэтому я снова спросил Chat-GPT:

В вашем текущем коде расширенный вид контролируется свойством showAdvanced. Если оно установлено в true, будет показан расширенный вид.

Чтобы всегда показывать расширенный вид, вы можете модифицировать метод onShow() в контроллере poll-ui-builder, установив showAdvanced в true. Вы можете добавить эту модификацию в компонент темы, который вы создали ранее. Вот обновленный скрипт:

<script type="text/discourse-plugin" version="0.8">
api.modifyClass("controller:poll-ui-builder", {
  onShow() {
    this._super(...arguments);
    this.set('publicPoll', true);
    this.set('showAdvanced', true);
  }
});
</script>

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

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

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

Отлично, что вы разобрались. :+1:

Кстати, когда нужно изменить несколько свойств, можно использовать такой синтаксис:

    this.setProperties({
        'publicPoll': true,
        'showAdvanced': true
    });

На самом деле это не я — я просто загрузил код по этой ссылке в Chat-GPT:

а затем показал ему первую попытку от @JammyDodger и попросил решить мои две задачи :smiley:

Будет здорово, если это сработает. Это ещё одна крутая вещь в Discourse, которую я узнал.

Я протестировал, и это работает! :partying_face:

Это fantastic. :slight_smile: Большое спасибо. :pray:

И вот он как компонент темы:

Больше не работает для нашего экземпляра.
Я не смог проверить, остался ли фрагмент кода, так как у меня нет на это прав.

Работает ли это всё ещё в ваших форумах, @JammyDodger и @nathank?

Кажется, на моём тестовом сайте это тоже сейчас не работает. Возможно, нужно обновить его с учётом некоторых недавних изменений?

Я вынесу это в отдельную тему Development :+1:

Я выяснил, что модальное окно, которое вызывалось ранее, было рефакторировано в соответствии с этим:

Однако я не могу понять, как взаимодействовать с ним через API. Новый файл модального окна находится здесь:

https://github.com/discourse/discourse/blob/main/plugins/poll/assets/javascripts/discourse/components/modal/poll-ui-builder.js

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

Хорошие новости. :slight_smile: Думаю, у нас есть решение для этого…