# 플러그인에서 template.hbs를 오버라이드하는 방법

**URL:** https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556
**Category:** Development
**Created:** [6월 22, 2020, 1:02오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556 "2020-06-22T13:02:04Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![oca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/oca/32/156060_2.png) [@oca](https://meta.discourse.org/u/oca)
#### Post date: [6월 22, 2020, 1:02오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/1 "2020-06-22T13:02:04Z")

</div>

안녕하세요,

플러그인의 `hbs` 템플릿을 오버라이드하고 싶은 경우, 예를 들어 훌륭한 Events 플러그인 같은 경우를 말씀드립니다.  
다음 스크립트를 시도해 보았습니다:

```js
<script type="text/x-handlebars" data-template-name="components/events-calendar-day">
   ***카테고리 아이콘이 원 대신 표시되도록 하는 몇 가지 내용***
</script>

```

```js
<script type="text/x-handlebars" data-template-name="/plugins/discourse-events/assets/javascripts/discourse/templates/components/events-calendar-day">
   ***카테고리 아이콘이 원 대신 표시되도록 하는 몇 가지 내용***
</script>

```

하지만 실행되지 않습니다. **그 위치에 템플릿을 찾지 못해서 그런 것 같은데, 어떻게 접근할 수 있을까요?** 플러그인 템플릿은 별도의 디렉토리에 있나요? 그렇다면 어디에 있나요? 이것은 [테마 가이드](https://meta.discourse.org/t/developer-s-guide-to-discourse-themes/93648)에 설명되어 있지 않습니다.

미리 감사드립니다!

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [6월 30, 2020, 4:24오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/2 "2020-06-30T16:24:24Z")

</div>

이 부분에 대한 설명을 메인 가이드에 추가하도록 하겠습니다. 하지만 당분간은 제 답변을 참고해 주세요:

> [@tshenry](#):
>
> 테마의 `</head>` 섹션에 추가할 기본 개념은 다음과 같습니다:
> 
> 루트 디렉터리의 템플릿:
> 
> ```plaintext
> <script type="text/x-handlebars" data-template-name="javascripts/template-name">
>   
> </script>
> 
> ```
> 
> 서브폴더의 템플릿:
> 
> ```plaintext
> <script type="text/x-handlebars" data-template-name="javascripts/subfolder/template-name">
>   
> </script>
> 
> ```

---

<div class="post-metadata">

### Author: ![oca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/oca/32/156060_2.png) [@oca](https://meta.discourse.org/u/oca)
#### Post date: [6월 30, 2020, 7:03오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/3 "2020-06-30T19:03:47Z")

</div>

많이 감사하지만, 제 사용 사례에 대한 답변은 아닙니다:

제가 이해한 바로는, «root» 폴더가 (discourse/ **app** /assets/javascripts/discourse/app/templates/)이므로 이 경로에서 하위 폴더의 컴포넌트에 접근할 수 있습니다.

하지만 제가 접근하려는 템플릿은 다음 위치에 있습니다:  
discourse/ **plugins** /discourse-events/assets/javascripts/discourse/templates/components/  
이는 첫 번째 폴더의 하위 폴더가 아닙니다. 플러그인을 포크하지 않고 이것을 수정하는 방법이 있을까요?

아니면 `/javascripts/discourse/templates/components/template-name`을 사용하라는 말씀인가요?  
(시해봤는데 작동하지 않는 것 같지만, 다른 실수를 했을 수도 있습니다.)

아니면 제가 무언가를 오해한 건가요?

미리 감사드립니다!

---

<div class="post-metadata">

### Author: ![tshenry](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tshenry/32/119495_2.png) [@tshenry](https://meta.discourse.org/u/tshenry)
#### Post date: [6월 30, 2020, 7:10오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/4 "2020-06-30T19:10:13Z")

</div>

용어에 대한 오해가 있는 것 같습니다. 어쨌든, 다음을 사용하세요:

```plaintext
<script type="text/x-handlebars" data-template-name="javascripts/components/template-name">
  
</script>

```

`data-template-name`에 다른 내용을 포함할 필요는 없습니다. 올바르게 매핑됩니다.

---

<div class="post-metadata">

### Author: ![oca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/oca/32/156060_2.png) [@oca](https://meta.discourse.org/u/oca)
#### Post date: [6월 30, 2020, 7:14오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/5 "2020-06-30T19:14:16Z")

</div>

정말 감사합니다!  
제가 필요했던 바로 그거였어요. 🙂

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [7월 23, 2024, 2:45오후 UTC](https://meta.discourse.org/t/how-to-override-a-template-hbs-from-a-plugin/155556/7 "2024-07-23T14:45:09Z")

</div>

> [@(비권장) 테마 또는 플러그인에서 Discourse 템플릿 오버라이드](https://meta.discourse.org/t/deprecated-overriding-discourse-templates-from-a-theme-or-plugin/247487?u=merefield):
>
> 이상적으로는 Discourse를 테마/플러그인으로 커스텀할 때 CSS, [JavaScript 플러그인 API](https://meta.discourse.org/t/a-new-versioned-api-for-client-side-plugins/40051), 또는 [플러그인 아웃렛](https://meta.discourse.org/t/connect-your-theme-to-plugin-outlets-to-inject-templates-with-custom-content/32727)을 사용해야 합니다. 이 중 어느 것도 사용 사례에 맞지 않는다면, Discourse 코어에 PR을 열거나 Meta의 #Development 토픽에서 대화를 시작해 주세요. 커스텀을 더 쉽게 만들기 위해 새로운 아웃렛/API를 추가하는 것에 대해 항상 논의하는 것을 환영합니다. 모든 다른 옵션을 다 시도해 보았음에도 불구하고 템플릿 오버라이드가 필요한 경우가 있습니다. 이 기법은 테마/플러그인에서 어떤 Ember 컴포넌트나 라우트의 전체 템플릿을 오버라이드할 수 있게 해줍니다. rotating_light 이것은 Discourse를 커스텀하는 권장되지 않는 방법입니다. Discourse 코어의 일상적인 변경 사항은 결국 템플릿 오버라이드와 충돌할 것이며, 포럼 렌더링 시 치명적인 오류를 일으킬 수 있습니다. 이 접근 방식을 결정했다면, 회귀를 감지하…
