Как добавить пользовательские поля к моделям

Возможно ли добавить пользовательское поле к тегам, используя ту же логику?

2 лайка

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

Думаю, это должно сработать. Надеюсь, информация ещё актуальна.

Нет, у тегов нет пользовательских полей. Что вы пытаетесь сделать?

Да, этот репозиторий должен работать. Просто замените все вхождения my_field на имя вашего поля.

1 лайк

Я пытаюсь создать следующий плагин: Creating a User - Tag relation plugin

Есть ли какая-то дополнительная документация о том, как настраивать эти поля групп? С этим шаблонным кодом всё работает отлично. Но как правильно его расширить?

Например, я хочу добавить несколько полей ввода, таких как:

<div class="control-group">
  <label class="control-label" for="map">Координаты главы</label>
  <input name="chapter_coordinates" id="chapter_coordinates" class="ember-text-field ember-view input-xlarge" value={{group.custom_fields.group_coordinates}} placeholder="Например, 52.3727598,4.8936041" type="text">
  <div class="control-instructions">Получить координаты с https://nominatim.openstreetmap.org/</div>
</div>

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

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

<div class="control-group">
  <label class="control-label" for="map">Связаться с главой по электронной почте</label>
  {{input type="checkbox" checked=group.custom_fields.contact_group_by_email}}
  <span>{{i18n 'admin.groups.contact_group_by_email.label'}}</span>
</div>

Однако это поле лучше разместить во вкладке взаимодействия. Как узнать, что нужно сделать, чтобы добавить его туда? Я хотел бы стать более опытным в этом. Но у меня складывается впечатление, что эта информация содержится только в коде и нигде не задокументирована. Это, вероятно, нормально, но требует больше времени и усилий для поиска того, что я ищу. Хотя то, что я хочу добавить, довольно невелико — всего несколько полей для групп :nerd_face:

Да, это может быть непросто и немного ошеломляюще при начале работы с кодовой базой Discourse. Похоже, вы пытаетесь работать с GeoJSON. Рассматривали ли вы возможность использования или расширения плагина Locations? Он уже настроен для работы с GeoJSON в Discourse.

Курс по разработке плагинов?

Я задумывался о проведении бесплатного курса по разработке плагинов для Discourse, что, по сути, и нужно вам. Я уже подготовил материалы для курса по разработке тем (см. ниже). Если за курс по разработке плагинов проголосуют 30 человек, я проведу его (через Zoom).

  • Написать и провести курс по разработке плагинов
  • Не писать и не проводить курс по разработке плагинов
0 voters
Введение в разработку тем
  1. GitHub - pavilionedu/discourse-theme-introduction · GitHub
  2. GitHub - pavilionedu/discourse-theme-css · GitHub
  3. GitHub - pavilionedu/discourse-theme-colors · GitHub
  4. GitHub - pavilionedu/discourse-theme-html-one · GitHub
  5. GitHub - pavilionedu/discourse-theme-html-two · GitHub
  6. GitHub - pavilionedu/discourse-theme-javascript-one · GitHub
  7. GitHub - pavilionedu/discourse-theme-javascript-two · GitHub

*P.S. Если наберётся 30 голосов, пожалуйста, дайте мне знать.

5 лайков

Отлично! Я на самом деле буду использовать форк этой карты сообщества Fairphone. Они используют сырой YAML-вывод темы. Я модифицировал свой форк, чтобы использовать данные из g.json для отрисовки маркеров на карте. Мне не хватает всего нескольких полей, таких как координаты и булево значение для использования адреса электронной почты на карте. Возможно, ещё кое-что, но сначала мне нужно понять, как всё устроено. Спасибо за ссылки! Посмотрю на них на этой неделе и посмотрю, насколько далеко я смогу продвинуться. Курс тоже был бы отличным! Мои навыки в JS/Ruby сейчас на нуле. В основном Python/Bash и немного крошек из других языков.

Возможно ли добавить пользовательские поля к постам? В идеале — прямо из редактора создания поста.

Какова минимальная версия Discourse, необходимая для использования этого плагина?
(discourse-topic-custom-fields)

Актуален ли этот репозиторий: GitHub - pavilionedu/discourse-group-custom-fields · GitHub?

Я спрашиваю, потому что попытался реализовать новое пользовательское поле для группы, но, похоже, значение, которое я ввожу в поле ввода, не сохраняется после нажатия кнопки «Сохранить».

Вот коммит со всеми внесенными мной изменениями, которые, как мне кажется, правильно следуют структуре репозитория edu: add discord_role_id field to groups · aloha-pk/discourse-discord-sync@fd3eef1 · GitHub

Да, я только что протестировал его, и он работает как положено.

{{input type="text" checked=group.custom_fields.discord_role_id}}

Ваша проблема в том, что вы изменили тип ввода на text, но оставили значение как checked. Вам нужно изменить checked на value.

3 лайка

Ну вот, теперь всё ясно :man_facepalming: Спасибо за помощь! :smile:

1 лайк

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

Есть ли у кого-то ещё какие-то предложения, @angus?

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

Привет @angus, я добавил пользовательское поле с помощью этого плагина, и теперь оно работает корректно. Как мне отобразить это поле на странице категории под названием категории?

Вот как вы можете это выяснить:

  1. Найдите в репозитории discourse/discourse шаблоны, которые отображают страницу категории (ищите HTML-элемент на странице).

  2. Найдите в одном из этих шаблонов plugin-outlet.

  3. Используйте plugin-outlet следующим образом:

Я написал этот код, но он всё ещё не работает. Не могли бы вы подсказать, в чём проблема?

<script type="text/discourse-plugin" version="0.8">
  const { getOwner } = require("discourse-common/lib/get-owner");
  const { htmlSafe } = require("@ember/string");

  api.decorateWidget("category-heading:after", (helper) => {
    const category = helper.attrs.category;

    if (category.custom_fields?.location) {
      const customLocation = htmlSafe(category.custom_fields.location);
      const template = getOwner(helper).lookup("template:components/category-header");

      return template.fragment.build("custom-location", { customLocation });
    }
  });
</script>

<script type="text/x-handlebars" data-template-name="components/category-header/custom-location">
  <div class="category-custom-location">{{customLocation}}</div>
</script>

Какая именно часть не работает? Например, что вы увидите, если вставите туда console.log(category.custom_fields)?

Сегодня я установил этот плагин с этим кодом, и он, похоже, не работает: GitHub - pavilionedu/discourse-category-custom-fields: Discourse plugin showing how to add custom fields to Discourse categories · GitHub

Он устанавливается как «Education Category Custom Field», но информация об авторе отсутствует:

Что вы ожидаете, что произойдет? Без изменений оно не должно ничего делать.

2 лайка