Skip to content

Templates

Sangwoo Jeong edited this page Nov 28, 2024 · 2 revisions

티도리 ν”„λ ˆμž„μ›Œν¬μ—μ„œ ν…œν”Œλ¦Ώμ€ 퍼그(Pug)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. νΌκ·ΈλŠ” λ§ˆν¬μ—…μ„ 관심사에 따라 λΆ„λ¦¬ν•˜κ³  μ½”λ“œμ˜ 길이λ₯Ό μ€„μ—¬μ£ΌλŠ” 효과적인 ν…œν”Œλ¦Ώ μ—”μ§„μž…λ‹ˆλ‹€. 티도리 ν”„λ‘œμ νŠΈ ν…œν”Œλ¦Ώμ—μ„œλŠ” 크게 app.pug, index.pug, views/*.pug 둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

관심사 뢄리

μš°λ¦¬κ°€ ν…œν”Œλ¦Ώμ„ λΆ„λ¦¬ν•΄μ•Όν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ μ΄μœ λŠ” 관심사 λΆ„λ¦¬μž…λ‹ˆλ‹€. ν…œν”Œλ¦Ώ ν•˜λ‚˜μ—λŠ” μŠ€νƒ€μΌ, λ§ˆν¬μ—…, μŠ€ν¬λ¦½νŠΈκ°€ ν†΅μ§Έλ‘œ 듀어가도둝 κ΅¬μ„±ν–ˆκΈ° λ•Œλ¬Έμ— νŠΉμ • 주제 λ˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ μ½”λ“œλ§Œμ„ λ¬Άμ–΄μ„œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΆ€λͺ¨

λ‹€μŒκ³Ό 같은 ꡬ쑰둜 ν…œν”Œλ¦Ώμ„ 뢄리해 λ†“μ•˜λ‹€κ³  μƒκ°ν•΄λ΄…μ‹œλ‹€. μ΄λ ‡κ²Œ 1차적으둜 크게 λΆ„λ¦¬λœ 것이 λΆ€λͺ¨ ν…œν”Œλ¦Ώμž…λ‹ˆλ‹€.

β”œβ”€β”€ views/
β”‚     β”œβ”€β”€ Header.pug
β”‚     β”œβ”€β”€ Content.pug
β”‚     β”œβ”€β”€ Sidebar.pug
β”‚     └── Footer.pug

μžμ‹

이제 각 μ˜μ—­μ— 속할 μžμ‹ ν…œν”Œλ¦Ώμ„ λ§Œλ“€μ–΄λ΄…μ‹œλ‹€. μžμ‹ ν…œν”Œλ¦Ώμ˜ μœ„μΉ˜λŠ” μ ˆλŒ€μ μΈ 것은 μ•„λ‹ˆλ‚˜, λΆ€λͺ¨ ν…œν”Œλ¦Ώμ˜ 이름과 λ˜‘κ°™μ€ 디렉토리 μ•„λž˜μ— λ†“λŠ” 것을 κΈ°λ³Έ μ „μ œλ‘œ ν•©λ‹ˆλ‹€.

β”œβ”€β”€ views/
β”‚     β”œβ”€β”€ Header.pug
β”‚     └── Header
β”‚           β”œβ”€β”€ BlogTitle.pug
β”‚           └── BlogMenu.pug
β”‚     β”œβ”€β”€ Content.pug
β”‚     └── Content
β”‚           └── Entry.pug
β”‚     β”œβ”€β”€ Sidebar.pug
β”‚     └── Footer.pug

μ˜ˆμ‹œ

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ‘œ ν…œν”Œλ¦Ώ μž‘μ„±μ˜ 기초λ₯Ό μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•˜κ²Œ λΈ”λ‘œκ·Έμ˜ 제λͺ©κ³Ό 메뉴λ₯Ό 좜λ ₯ν•˜λŠ” 것을 해보죠. μš°λ¦¬κ°€ μž‘μ„±ν•  예제의 ν΄λ”κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

β”œβ”€β”€ views/
β”‚     β”œβ”€β”€ Header.pug
β”‚     └── Header
β”‚           β”œβ”€β”€ Navigation.pug
β”‚           └── Title.pug
β”œβ”€β”€ app.pug    
└── index.pug

app.pug

app.pug λŠ” μŠ€ν‚¨μ΄ μ•„λ‹Œ λ¬Έμ„œ λ ˆμ΄μ–΄μž…λ‹ˆλ‹€. 닀크λͺ¨λ“œμ™€ 같이 λ¬Έμ„œ μ „λ°˜μ— 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ” 섀정을 μΆ”κ°€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

doctype html

html(lang="ko")
  head
    title [##_page_title_##]

  body(id="[##_body_id_##]")
    block TIDORY

    script.
      document.addEventListener('DOMContentLoaded', () => {
        const dark = window.matchMedia('(prefers-color-scheme: dark)').matches

        dark && document.documentElement.classList.add('dark')
      })

index.pug

index.pug λŠ” extends app 을 톡해 app.pug λ₯Ό μƒμ†ν•˜λŠ” ν•œνŽΈ, λ¬Έμ„œκ°€ μ•„λ‹Œ μŠ€ν‚¨μ˜ 인덱슀 λ ˆμ΄μ–΄μž…λ‹ˆλ‹€. μ•„λž˜μ˜ μ˜ˆμ œμ—μ„œλŠ” views/Header.pug κ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” λΆ€λͺ¨ ν…œν”Œλ¦Ώμ΄ λ©λ‹ˆλ‹€.

extends app

block TIDORY
  s_t3
    #container
      include views/Header

  style.
    #container {
      height: 100vh;
      align-items: center;
      display: flex;
      justify-content: center;
      text-align: center;
    }

views/Header.pug

μžμ‹ ν…œν”Œλ¦ΏμœΌλ‘œ Header/Title.pug, Header/Navigation.pug λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 각각 λΈ”λ‘œκ·Έ 제λͺ© κ³Ό λΈ”λ‘œκ·Έ λ©”λ‰΄μž…λ‹ˆλ‹€.

header
  include Header/Title
  include Header/Navigation

views/Header/Title.pug

h1 [##_title_##]

views/Header/Navigation.pug

nav [##_blog_menu_##]

λΉŒλ“œ

μš°λ¦¬κ°€ λ§Œλ“  μŠ€ν‚¨μ„ 이제 μ‚¬μš©μžμ—κ²Œ λ°°ν¬ν•˜κ±°λ‚˜ μžμ‹ μ˜ λΈ”λ‘œκ·Έμ— μ μš©ν•˜κΈ° μœ„ν•΄ λΉŒλ“œ 및 배포λ₯Ό ν•˜κ²Œ 되면 λ‹€μŒκ³Ό 같이 λΆ„λ¦¬λ©λ‹ˆλ‹€.

μŠ€ν‚¨ μ˜΅μ…˜ λ“±μ˜ κ΅¬ν˜„μ„ μœ„ν•΄ μ½”λ“œκ°€ λΆ„λ¦¬λ˜μ§€ μ•ŠκΈΈ μ›ν•œλ‹€λ©΄ fixed 속성을 λΆ€μ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

skin.html

<!DOCTYPE html>

<html lang="ko">
  <head>
    <title>[##_page_title_##]</title>
    <script defer src="./images/app.537a5184a206c1de4585.js"></script>
    <link rel="stylesheet" href="./style.css">
    <script defer src="./images/script.8tvFrJsnbm1XBB4PblAH.js"></script>
  </head>
  <body id="[##_body_id_##]">
    <s_t3>
      <div id="container">
        <header>
          <h1>[##_title_##]</h1>
          <nav>[##_blog_menu_##]</nav>
        </header>
      </div>
    </s_t3>
  </body>
</html>

style.css

#container {
  height: 100vh;
  align-items: center;
  display: flex;
  justify-content: center;
  text-align: center;
}

images/script.js

document.addEventListener('DOMContentLoaded', function() {
  var dark = window.matchMedia('(prefers-color-scheme: dark)').matches;
  dark && document.documentElement.classList.add('dark');
});