DiscPage: 정적 페이지를 만들고 텍스트에 토론 풍선을 삽입하는 플러그인

가능하다고 생각합니다. dpg_displaypage 이벤트 핸들러에서 외부 API를 호출하기 위해 $.ajax()를 사용해야 합니다. 또한, 외부 API를 Discourse 설정의 content security policy script src에 추가해야 한다고 생각합니다.

2개의 좋아요

이 플러그인은 아직 유지 관리 중인 것 같지만, 제 서버에서 이 플러그인을 활성화하면 로그인 페이지가 표시되지 않는 문제를 분리해 냈습니다. 이 문제를 해결할 수 있기를 바랍니다.

제 서버에서 이 플러그인을 활성화하면 로그인 페이지가 빈 화면으로 표시되는 것을 확인할 수 있으며, 플러그인을 비활성화하면 로그인 페이지가 정상적으로 다시 표시됩니다. 사용자가 이미 로그인된 상태라면 문제가 발생하지 않으며 서버는 정상적으로 작동합니다.

이 문제를 해결하는 데 도움이 되는 지원이나 조언을 구합니다. 문제 해결을 위해 필요한 추가 정보를 기꺼이 제공하겠습니다.

조던, 감사합니다.
네, 제 여러 Discourse 인스턴스를 확인해 보았지만 문제를 재현할 수 없었기 때문에 더 많은 정보가 필요합니다.
"로그인 페이지를 볼 수 없다"고 하셨을 때, 로그인 팝업을 말씀하시는 거죠?
좀 더 자세한 내용과/또는 스크린샷을 제공해 주십시오. 가능하시다면, 개인 메시지로 제게 연락하시고 Discourse 인스턴스의 URL을 알려 주십시오.

1개의 좋아요

Syl님,

답변 주셔서 감사합니다.

discpage 플러그인을 활성화한 상태로 로그인하지 않은 채 discourse 인스턴스에 접속하면 완전히 빈 화면이 표시됩니다. 아래를 확인해 주세요:

최근 콘솔 로그도 확인해 봤는데, discpage와 관련된 몇 가지 오류가 발견되었습니다. 저에게는 그 오류가 무슨 뜻인지 모르지만, 님에게는 의미 있는 내용일 수도 있겠네요…

이 문제를 보고해 주셔서 감사합니다. 버그는 여기에 등록되었습니다:

버그가 수정될 때까지, “로그인 필요” Discourse 설정을 비활성화하는 것이 임시 해결책입니다.

수정: 버그가 이제 수정되었습니다.

1개의 좋아요

Syl님 안녕하세요,
조금 민망한 부탁을 드려서 죄송합니다. :sweat_smile: 솔직히 말씀드리자면, 코딩에 대해 전혀 알지 못하는데도 호기심에 플러그인의 소스 코드를 살펴보게 되었는데요, lib 파일의 포맷팅 방식이 좀 이해가 안 됩니다. 기술적인 선택은 아닐 것 같고(물론 제가 뭘 안다고 하지만요 :smile: ), 왜 그렇게 된 건지는 충분히 이해할 수 있습니다.
솔직히 말씀드리자면, 지금 진행 중인 작업이 이미 훌륭하다고 느끼고 있어서 감사함을 표현하지 못하고 싶지는 않지만, 혹시라도 작업 내용을 좀 더 이해하기 쉬운 형태로 공유해 주실 의향이 있으신지 궁금합니다.
개인적인 의견으로는 장기적으로 보면, 코어 업그레이드 속도가 플러그인 개발자들에게 따라가기 버거울 수 있습니다. 님의 플러그인 기능을 활용하고 싶지만, 소수의 사람들에 대한 의존도가 높은 프로젝트 위에 무언가를 구축하는 데 주저하는 분들의 부담을 덜어 줄 수 있을 것입니다. 또한 이렇게 하면 긍정적인 반응과 관심도 생길 수 있지 않을까요?
어쨌든 정말 감사합니다. :wink:

벤jamin님, 안녕하세요.
플러그인의 소스 코드는 minified 형태로 공개됩니다. 이유는 부끄러워서입니다. 이 코드는 R&D 실험의 결과물이며 광범위한 리팩터링이 필요합니다. 플러그인에 대한 관심이 높아질 때까지 해당 작업을 미루고 있습니다.

3개의 좋아요

:sweat_smile:
음, 나는 “매우 관심 있는” 쪽에 속한다고 말할 수 있겠네요!
핵심 “quote” 기능에 대한 아주 좋은 변형이라고 생각합니다.
저는 사용자들이 연설 분석에 참여하도록 동기부여를 찾고 있는데(개인적으로 생각하기에 당신의 Castafiore 사용 사례와 꽤 비슷하지만, 아쉽게도 훨씬 덜 재미있을 겁니다!), 이 디자인이 사용자들이 작성 모드로 전환하는 데 도움이 되길 바랍니다.

2개의 좋아요

지금까지는 잘 되고 있습니다!
제 의견 두 가지:

  • 헤더에 대한 개인적인 의견이지만, 가운데 정렬을 유지하는 것이 더 나을 것 같습니다. 그래야 플러그인의 정적 페이지가 전역적으로 “일반적인” 디스커스에 더 자연스럽게 통합된다고 느껴집니다.
  • 예외적인 경우: 여러 정적 카테고리가 서로 다른 읽기/쓰기 권한을 가진 경우를 대비해, 정적 카테고리별로 풍선 카테고리를 지정할 수 있는 기능이 있으면 흥미로울 것 같습니다.
  • 제가 뭔가 놓치고 있는 건가요, 아니면 [dpgb id=titre] [/dpgb] 태그(풍선으로 변환된다고 이해하고 있습니다)를 수동으로 설정해야 하는 건가요? 솔직히(성공하지 못했지만!) 작성기의 인용 버튼을 시도해 보았지만, 실패했습니다 :sweat_smile: . 태그 슬러그를 설정해야 하기 때문에 그렇게 되어야 할 것 같습니다 :thinking:
  • discpage hide tags 설정을 hide discpage tags로 변경할 수 있을까요? dpg-**** 태그만 숨기는 것이 그렇게 어렵지는 않을 것 같은데, 주제 생성 시 제안 목록을 조금씩 지저분하게 만들 수 있다고 생각합니다.

다음 단계는 사용자 참여 테스트입니다!

Benjamin_D님, 피드백 감사드립니다.

헤더 정렬은 다음과 같은 조건에 부합해야 합니다:

  1. 일반 Discourse 페이지 (max-width = 1110px)
  2. DiscPage 정적 페이지 (max-width = 782px, 사이드바/위젯/사진을 넣을 수 없는 정적 페이지에는 1110px이 너무 넓기 때문)
  3. 왼쪽에 정적 페이지, 오른쪽에 토픽이 배치된 DiscPage 분할 레이아웃 (max-width = 100%)

고정된 헤더 정렬과 레이아웃에 따른 헤더 정렬 모두로 많은 테스트를 해본 결과, 항상 왼쪽 정렬이 최선의 방법이라고 결론을 내렸습니다.

하지만 Benjamin_D님이 생각하실 수 있는 아이디어가 있다면 기꺼이 검토하겠습니다. 위 세 가지 경우를 반드시 고려해 주세요.

이미 지원되고 있습니다. 문서의 이 단락을 참고해 주세요:

In fact, you can set multiple categories in here. Let's call PageCat the category of the static page the balloon belongs to. If there are more than one balloon category in this field, DiscPage will take the first one which is either a sibling of PageCat (same immediate parent) or the immediate parent of PageCat. If no such category is found, DiscPage will take the first category of the list. This feature allows to pair [static page category, balloon category], which is useful, for example, for multilingual forums or to set up static pages with different group permissions.

이 내용이 이해하기 어렵다는 점에 동의합니다. 표현을 개선할 수 있는 아이디어가 있다면 환영합니다.

네, 발룬은 텍스트 구문을 사용하여 수동으로 삽입해야 합니다.
플러그인을 처음 시도했을 때, 왜 인용 버튼이 도움이 될 것이라고 생각하셨나요? (그때의 마음가짐이 궁금합니다)

hide discpage tags 기능은 이미 구현되어 있습니다: DiscPage 태그는 모든 Discourse 페이지와 위젯에서 기본적으로 숨겨집니다. 다시 말해, DiscPage가 활성화된 상태에서 어디에서든 DiscPage 태그를 볼 수 있다면 그것은 버그입니다.

discpage hide tags 설정은 매우 다릅니다: 이 설정은 Discourse 인스턴스에서 태그를 활성화하고 싶지 않지만, DiscPage를 사용하기 위해 어쩔 수 없이 태그를 활성화해야 했던 사용자들이 태그가 없는 인스턴스를 시뮬레이션할 수 있게 해줍니다.

1개의 좋아요

:thinking: 사실, 분할 화면에서 헤더 아래 정적 페이지가 100%를 차지하더라도 max-width = 1110px을 유지하는 쪽이 더 나은 것 같습니다. html.dpg header.d-header .wrap 블록을 주석 처리해 봤는데, 분할 정적 페이지 위 헤더 주위에 약간의 여백이 있는 것이 그렇게 나쁘지 않게 느껴집니다 (비분할 레이아웃에서는 편집 제목과 페이지 버튼들이 다소 고립되어 보이는 것 같지만요).

아, 내 실수였네요. RTFM(Read The F***ing Manual) :sweat_smile: (변명하자면, 아마 작년에는 읽었을 텐데 잊어버린 것 같습니다 :smile: )

DiscPage가 풍선 카테고리를 숨긴다는 사실을 기억하지 못했습니다 (방금 관리자 권한으로 테스트해 봤는데), 하지만 정말 멋진 기능입니다.

정리하자면, {정적 페이지 카테고리, 사용자 권한}이 여러 개인 경우, 연관된 풍선 카테고리를 정적 카테고리의 하위 카테고리로 만들어야 하는 것(권한 관점에서 보면 합리적입니다)인지, 아니면 두 카테고리를 모두 동일한 상위 카테고리의 하위 카테고리로 만들어야 하는지 궁금합니다. 중요하지는 않지만, 정적 카테고리를 풍선 카테고리의 하위 카테고리로 만들면 작동할까요?

아마도 아이콘의 풍선 모양과, 제가 작성기(composer)의 인용 버튼을 사용해 본 적이 거의 없다는 사실이 결합된 때문이겠죠. 그리고 "아, 이건 원래 여기 있었나?"라고 생각했을 수도 있습니다. 그래서 시도해 본 거죠 :crazy_face:

몇 줄의 "코드"를 작성해야 하는 것은 신경 쓰이지 않지만, 여기서도 사용자들의 신음이 들리는 것 같습니다. 아마 그들은 당분간 정적 페이지를 설정하지 않을 수도 있겠네요. 때로는 키보드에 내려치는 모든 타격이 마지막 방울이 될 수 있다는 느낌이 듭니다… :roll_eyes:

물론이죠, 죄송합니다… 이건 제 가벼운 열을 탓해야 할 것 같습니다. 왜 숨겨지지 않는다고 생각했는지 모르겠는데, 아마도 분할 화면의 풍선 부분에서 태그 드롭다운 박스에 태그 하나가 잠깐 보였기 때문일까요? 제가 모든 것을 시도해 보느라(풍선 토픽에도 태그를 붙여 보기도 하고) 보았던 마지막 쉼표(trailing comma)가 이제 이해가 됩니다.

사용자가 정적 게시물을 생성하고 수정할 수 있도록 하는 것이 가능할까요? 그렇게 되면 관리자 제한은 카테고리 보안 설정만으로 구현할 수 있을 것 같습니다.

수정:
아니면, tag_groups를 수정하는 것은 StaffConstraint에 걸리는 것 같습니다. :disappointed_relieved:

TL4 사용자에게 a = User.current()) && a.admin을 User.current()) && a.trust_level >= 4로 변경하여 풍선을 설정할 수 있게 할 수는 있지만, 관리자가 정적 페이지를 수정할 때까지 태그가 생성되지 않습니다… :thinking:
아래와 같은 기능이 있으면 좋겠습니다: 자신의 카테고리의 태그 그룹을 변경할 수 있는 카테고리 모더레이터 :smile:

참고로, 플러그인 체크리스트가 discpage와 충돌하는 것 같습니다(getmodel() 관련 문제).

저는 현재 레이아웃을 더 선호합니다. 하지만 이를 사용자 정의할 수 있는 간단한 방법이 있어야 합니다. 한번 생각해 보겠습니다.

아니요, 이 조합은 지원되지 않습니다.

이미 파악하신 대로, 정적 페이지 생성은 관리자로 제한되지 않지만 풍선 삽입은 제한됩니다. 그 이유는 Discourse에서 태그를 생성하는 직관적인 방법이 없기 때문입니다(이 스레드 참고). 이를 위해 tag group API를 사용했는데, 이 API는 관리자로 제한되어 있습니다. 대안적인 해결책들이 있었지만 각각 자체적인 단점이 있었습니다.

이 플러그인을 말씀하시는 건가요? 어떤 문제가 있나요?

실제로 두 플러그인을 모두 활성화한 상태에서 정적 페이지를 새로고침하면, discpage가 꺼지는 것(정상 레이아웃으로 반환)과 유사한 현상이 발생하고 콘솔에 다음과 같은 오류가 표시됩니다:

Uncaught (in promise) TypeError: postModel is undefined
checklistSyntax javascripts/discourse/initializers/checklist:29

각 플러그인은 단독으로 사용할 때 정상적으로 작동합니다.

감사합니다 @Benjamin_D. 해당 문제는 여기에서 접수되었습니다:

수정: 최신 버전(1.0.38)에서 수정되었습니다.

2개의 좋아요

안녕하세요 @syl, 불운한 소식을 전하게 되어 죄송합니다 :sweat_smile: discpage가 활성화된 상태에서 초대 링크가 등록 페이지 대신 빈 페이지로 연결되는, 조금 더 문제적인 호환성 이슈를 발견했습니다.
브라우저 콘솔에는 다음과 같은 메시지가 표시됩니다:

  r.site.categories is undefined

플러그인을 비활성화하면 초대 링크가 평소처럼 정상적으로 작동합니다.

1개의 좋아요

이 문제를 보고해 주셔서 감사합니다, @Benjamin_D. 이 문제는 “로그인 필요” 모드와 관련된 또 다른 버그입니다. 그래서 이전 GitHub 이슈를 다시 열었습니다. 이 문제가 해결될 때까지는 “로그인 필요” 모드를 비활성화하는 것이 우회 방법입니다.

수정: 이 문제는 최신 버전(1.0.38)에서 수정되었습니다.

2개의 좋아요

안녕하세요 @syl !
최근 태그 라우트 변경 사항인

이 무언가를 깨뜨린 것 같습니다 :thinking:
최소한 버블에 있는 링크는 이제 /tags/dpg-xxx가 아니라 /tag/dpg-xxx를 가리켜야 합니다.

2개의 좋아요

감사합니다 @Benjamin_D, v1.0.38에서 수정되었습니다.

2개의 좋아요