모델에 사용자 지정 필드 추가하는 방법

같은 로직을 사용하여 태그에 사용자 정의 필드를 추가할 수 있나요?

2개의 좋아요

누군가 이 기능을 그룹에 적용해 보셨나요? 그렇다면 어떻게 적용하셨는지 공유해 주실 수 있을까요?

이 방법이 효과를 볼 것 같습니다. 여전히 최신 상태인지 모르겠네요.

아니요, 태그에는 커스텀 필드가 없습니다. 무엇을 달성하려고 하시나요?

네, 해당 저장소가 작동할 것입니다. my_field의 모든 인스턴스를 필드 이름으로 변경하기만 하면 됩니다.

1개의 좋아요

저는 다음 플러그인을 생성하려고 합니다: Creating a User - Tag relation plugin

이 그룹 필드를 커스터마이징하는 방법에 대한 추가 문서가 있을까요? 이 보일러플레이트 코드로는 실제로 매우 잘 작동합니다. 하지만 이를 적절히 확장하는 방법은 무엇일까요?

예를 들어, 다음과 같은 몇 가지 입력 필드를 추가하고 싶습니다:

<div class="control-group">
  <label class="control-label" for="map">Chapter coordinates</label>
  <input name="chapter_coordinates" id="chapter_coordinates" class="ember-text-field ember-view input-xlarge" value={{group.custom_fields.group_coordinates}} placeholder="E.g. 52.3727598,4.8936041" type="text">
  <div class="control-instructions">Fetch coordinates from https://nominatim.openstreetmap.org/</div>
</div>

하지만 여기서 무엇을 해야 하는지 추측만 하고 있고, 나머지 디스코urs(Discourse) 관련 코드를 추가해야 하는 상황입니다. 위의 예시는 좌표를 위한 필드를 사용하는 것입니다. 저는 g.json을 사용하여 그룹 메타데이터 기반의 지도를 만드는 것을 의도하고 있습니다.

또한, 해당 그룹에 대한 이메일 설정을 통해 그룹에 이메일을 보내는 체크박스도 추가할 계획입니다.

<div class="control-group">
  <label class="control-label" for="map">Contact chapter by email</label>
  {{input type="checkbox" checked=group.custom_fields.contact_group_by_email}}
  <span>{{i18n 'admin.groups.contact_group_by_email.label'}}</span>
</div>

그러나 이 필드는 상호작용(interaction) 탭에 배치하는 것이 가장 좋습니다. 그곳에 배치하기 위해 무엇을 해야 하는지 어떻게 알 수 있을까요? 이 부분에 대해 더 숙달되고 싶습니다. 하지만 이 정보는 어디에도 문서화되어 있지 않고 코드 안에만 존재한다는 느낌을 받습니다. 아마도 그것이 당연한 일이겠지만, 제가 찾는 것을 발견하는 데 더 많은 시간과 노력이 듭니다. 제가 추가하려는 것은 매우 작은 것일 뿐이며, 그룹에 몇 가지 필드를 추가하는 것뿐입니다. :nerd_face:

네, Discourse 코드베이스를 처음 다룰 때 다소 까다롭고 어려울 수 있습니다. GeoJSON을 다루고 계신 것 같습니다. Locations 플러그인을 사용하거나 확장하는 것을 고려해 보셨나요? 이 플러그인은 Discourse에서 GeoJSON과 함께 작동하도록 이미 설정되어 있습니다.

https://meta.discourse.org/t/locations-plugin/69742

플러그인 개발 과정?

저는 Discourse 플러그인 개발에 대한 무료 과정을 개설하는 것을 고려하고 있습니다. 이는 기본적으로 귀하가 필요로 하는 내용입니다. 저는 이미 테마 개발 과정을 위한 강의 자료를 작성해 두었습니다(아래 참조). 플러그인 개발 과정에 30명이 찬성 투표해 주신다면, 해당 과정(Zoom을 통해)을 작성하고 진행하겠습니다.

  • 플러그인 개발 과정 작성 및 진행
  • 플러그인 개발 과정 작성 및 진행하지 않음
0 voters
테마 개발 입문
  1. https://github.com/pavilionedu/discourse-theme-introduction
  2. https://github.com/pavilionedu/discourse-theme-css
  3. https://github.com/pavilionedu/discourse-theme-colors
  4. https://github.com/pavilionedu/discourse-theme-html-one
  5. https://github.com/pavilionedu/discourse-theme-html-two
  6. https://github.com/pavilionedu/discourse-theme-javascript-one
  7. https://github.com/pavilionedu/discourse-theme-javascript-two

*ps: 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. 여기에서 설명한 대로 플러그인 아웃렛을 사용합니다

이 코드를 작성했는데도 여전히 작동하지 않습니다. 문제가 무엇인지 알려 주실 수 있나요?

<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개의 좋아요