어떤 HTML을 커스터마이징할 수 있나요?

디스코urs에 처음 온 사람으로서, 어떤 부분을 커스터마이징할 수 있는지, 그리고 어떻게 해야 하는지 이해하려고 노력하고 있습니다. 다양한 테마와 테마 컴포넌트가 사용 가능하다는 것을 알고 있으며, admin -> customize -> Themes -> [선택한 테마 클릭] -> edit CSS/HTML 경로로 들어가면 이론상 html, css, javascript를 편집할 수 있다는 것도 이해하고 있습니다.

"edit CSS/HTML"을 시도할 때 나타나는 대시보드를 어떻게 사용해야 하는지 파악하려고 하고 있습니다. 거기에는 </head> Header After Header <body> Footer Embedded CSS가 표시됩니다.

html을 실제로 편집하는 방법에 대한 예제가 포함된 가이드가 있을까요? 메타 포럼에 제안 사항들이 있다는 것은 알지만, 제 관점으로는 그 내용들이 포럼 전체의 다양한 주제에 걸쳐 흩어져 있는 것 같습니다.

제게 혼란을 주는 예시를 하나 들자면, 이 글에서는 열 순서를 변경할 수 있는지 묻고 있는데, 이는 상당히 기본적인 html 변경 사항입니다. 그러나 답변은 기본적으로 깊은 오버라이드(deep overrides)를 하지 않는 한 불가능하다는 것입니다.

그래서 저는 이 "edit CSS/HTML"을 통해 내 포럼을 커스터마이징할 수 있는 범위가 무엇인지 정리해 보려고 합니다.

네, Discourse 테마 개발자 가이드를 참고해 보세요.

감사합니다. 이 내용을 이미 봤지만, 단일 포럼을 단순히 편집하는 것이 아니라 테마를 만드는 데 초점이 맞춰져 있는 것 같아서 망설였습니다.

다만, “CSS/HTML 편집” 대시보드를 사용하는 방법에 대한 안내가 일부 있는 것은 확인했습니다. 하지만 확인하고 싶은 것은, 새 테마를 만들지 않고도 HTML/CSS/JS를 수정할 수 있는 것이 맞는지입니다.

그리고 컴포넌트를 추가/삭제하는 것뿐만 아니라, 위치를 이동하는 방법(예: 사용자 그룹이 페이지에서 가장 왼쪽 열에 표시되도록 열 순서를 변경하는 것)도 어디에서 어떻게 해야 하는지 명확하지 않습니다.

맞습니다!

해당 가이드도 꼭 읽어보시길 권해드립니다. 테마라는 부분이 부담스러워 보일 수 있지만, 커스터마이징의 여러 측면을 다루고 있어 유용한 정보를 얻을 수 있습니다.

Simon이 제공한 링크가 모든 것을 설명하지만, 읽을 내용이 꽤 깁니다.

기본적으로 Discourse의 HTML을 편집하려면 다음과 같은 여러 가지 방법이 있습니다:

  1. 테마 또는 컴포넌트에 미리 정의된 HTML 탭을 통해: Header, After Header, </body>, Footer.
  2. 원하는 HTML로 채울 수 있는 “자유” HTML 공간(아웃렛)을 대상으로 하는 것입니다. </head> 탭에 추가할 수 있는 <script> 태그를 통해 이 작업을 수행할 수 있습니다.
    다음은 토픽 보기에서 사용할 수 있는 아웃렛의 예시입니다:
  3. 기존 HTML 템플릿을 오버라이드하는 것입니다. 템플릿에는 때때로 많은 양의 HTML 코드가 포함되어 있으며, 수정을 수행하려면 이를 모두 복사하여 붙여넣어야 합니다. 이 작업도 </head>에 추가된 <script> 태그를 통해 수행할 수 있습니다.

테마를 만들든, 테마 컴포넌트를 만들든, 또는 "단순히 제 단일 포럼을 편집"하든, 실제로 여기서는 꽤 비슷한 방식입니다. 세 가지 모두 더하거나 뺀 동일한 방식으로 수행됩니다.

네, 정확히 무엇을 하려는지에 따라 다르지만, 일반적으로 올바른 방법은 새로운 테마 컴포넌트를 만들고 여기에 HTML/CSS를 작성하는 것입니다.

좋은 정보를 주셔서 감사합니다. 오픈 스페이스에 HTML을 추가하는 것, 그리고 CSS를 사용하여 기존 HTML을 숨기는 것(예: 관련 div 클래스에 display: none을 적용하는 것. 이는 인스펙터로 해당 요소를 찾아 적용하면 되는 것으로 이해하고 있습니다)은 이해할 수 있습니다.

하지만 HTML을 오버라이드하여 컴포넌트를 이동하는 등의 작업은 어떻게 해야 할까요? 간단한 예시가 있을까요?

simon이 붙여넣은 링크를 부분적으로 인용합니다:

큰 빨간색 사각형으로 아웃렛을 채우는 간단한 예시입니다. 여기서 아웃렛은 토픽 보기에서 게시물 목록 위에 위치합니다:

<script type="text/x-handlebars" data-template-name="/connectors/topic-above-post-stream/a-unique-name">
  <div style="height: 200px; width: 200px;background: red"></div>
</script>

data-template-name 속성을 주목해 주세요.

내비게이션 바 템플릿을 오버라이드하는 간단한 예시:

<script type="text/x-handlebars" data-template-name="components/navigation-bar">
    {{#each navItems as |navItem|}}
      {{navigation-item content=navItem filterMode=filterMode category=category}}
    {{/each}}
    <div style="background: red; padding: 10px; float: left;">I added this block in the navigation bar template</div>
    {{custom-html name="extraNavItem" tagName="li"}}
    {{!- this is done to avoid DIV in the UL, originally {{plugin-outlet name="extra-nav-item"}}
    {{#each connectors as |c|}}
      {{plugin-connector connector=c class=c.classNames tagName="li" args=(hash category=category filterMode=filterMode)}}
    {{/each}}
</script>

다시 한번, data-template-name 속성을 주목해 주세요.

템플릿 목록은 여기 있습니다: https://github.com/discourse/discourse/tree/master/app/assets/javascripts/discourse/app/templates

그리고 모든 아웃렛 위치를 강조하는 유용한 테마 컴포넌트입니다: (deprecated) Plugin outlet locations theme component

알겠습니다. 이제 조금씩 이해가 가고 있습니다. 정말 도움이 되네요.

1. type="text/x-handlebars" data-template-name="/connectators/topic-above-post-stream/a-unique-name 부분은 어디서 온 건가요? (즉, 여기에 무엇을 채워 넣어야 하는지 어떻게 알 수 있나요?)

템플릿을 오버라이드하기 위해 주신 코드 예시를 보면, 템플릿 코드를 가져와서 이동하거나, 삭제하거나, 추가할 수 있다는 점을 이해할 수 있게 됩니다.

2. 그렇다면 템플릿 코드는 깃허브 링크에서 가져오면 되는 건가요? 그렇다면 이해가 가는데, 올바른 코드를 찾는 것이 쉽지 않아 보입니다. 예를 들어, 홈 페이지를 위한 템플릿은 어디에 있나요?

3. 그런 다음 해당 관련 코드를 “edit css/html” 대시보드에 붙여넣으면 되나요. 하지만 어디에, 첫 번째 옵션(</head>) 아래에 붙여넣는 건가요? 이전 답변을 통해 그렇게 짐작은 하지만, 확인이 필요할 것 같습니다.

이 정보가 다른 분들에게도 도움이 되길 바랍니다.

아웃렛의 이름과 위치를 찾으려면, 위에서 링크한 플러그인이 가장 좋은 방법이라고 생각합니다.

수정하려는 페이지의 특정 부분에 해당하는 템플릿을 찾는 것은… 좀 더 까다롭습니다.
쉬운 방법을 잘 모르겠네요. 비슷한 플러그인이 있다면 좋겠습니다.
때로는 페이지 HTML을 살펴보고 CSS 클래스처럼 고유할 것 같은 코드를 찾아서 모든 템플릿 파일에서 검색합니다. 제 개인 컴퓨터에 Discourse 저장소를 클론해 두고 Sublime Text를 사용해 이 모든 파일에서 검색하지만, 더 나은 방법이 분명히 있을 거라고 생각합니다.
때로는 제가 커스터마이즈하고 싶은 페이지 위치를 수정하는 기존 테마 컴포넌트의 코드를 살펴보기도 합니다.

네, 어렵긴 합니다. 하지만 저는 전문가가 아니라고 생각하며, 이 작업을 수행하는 더 효율적인 방법이 더 있을 거라고 추측합니다!

네.

Wordpress나 phpBB에서 온 경우, 해당 디렉터리에서 템플릿 파일을 직접 편집하는 데 익숙하다면, Discourse는 다소 난해하게 느껴질 수 있습니다… :sweat_smile:

감사합니다. 다만 워드프레스와 비교할 때, 제 생각에 큰 장점은 Discourse가 PHP 대신 Ruby와 JavaScript를 사용한다는 점입니다.