sqzass
English

콘텐츠 작성

페이지와 섹션, front matter, 그리고 거기서 나오는 URL

content/ 아래의 모든 파일이 페이지입니다. _index.md가 들어 있는 디렉터리는 섹션이 되고, 섹션은 그 옆의 페이지들을 묶습니다.

페이지와 섹션

content/
├── _index.md            →  /
├── about.md             →  /about/
└── guide/
    ├── _index.md        →  /guide/
    ├── install.md       →  /guide/install/
    └── deep/
        ├── _index.md    →  /guide/deep/
        └── dive.md      →  /guide/deep/dive/

_index.md없는 디렉터리도 섹션이 됩니다. 제목은 디렉터리 이름이 되고, 그 안의 페이지들이 묶이고, 내비게이션에도 나타납니다 — 파일 하나 깜빡했다고 페이지가 사이드바에서 사라지면 안 되니까요. 다만 인덱스 페이지는 생기지 않아서 /guide/ 자체는 하나 만들기 전까지 404입니다. 섹션에 고유한 제목이나 설명, 본문을 주고 싶을 때 _index.md를 둡니다.

모든 URL이 디렉터리인 이유

페이지는 <경로>.html이 아니라 <경로>/index.html로 쓰입니다. rewrite 규칙이 있는 호스트라면 about.html/about으로 내줄 수 있지만, 규칙이 없는 호스트는 못 합니다. sqzass는 아무것도 해 주지 않는 호스트에서 옳게 도는 것을 기준으로 만들었습니다. 디렉터리 형태는 서버에게 아무 재주도 요구하지 않기 때문에 GitHub Pages든 Cloudflare Pages든 S3든 python3 -m http.server든 똑같이 동작합니다.

대가는 있습니다. 슬래시 없는 /about 링크는 대부분의 서버가 리다이렉트를 한 번 거친 뒤에야 도착합니다. /about/으로 쓰거나, 더 나은 방법으로는 @/ 링크를 써서 URL을 sqzass가 쓰게 하세요.

슬러그는 제목이 아니라 파일명에서 나옵니다

install.md/guide/install/이 됩니다. 제목은 여기에 관여하지 않습니다.

이 규칙이 가장 중요해지는 곳이 한국어입니다. 흔한 방법은 제목을 로마자로 옮기는 것인데, slug 계열 크레이트는 한글을 문맥 없이 한 음절씩 ASCII로 매핑하기 때문에 서로 다른 한국어 제목이 같은 경로로 겹칠 수 있습니다. 직접 정한 파일명은 모호하지 않고, 같은 디렉터리 안에서 이미 유일합니다. 한국어 파일명은 퍼센트 인코딩된 UTF-8 그대로 둡니다.

페이지마다 바꾸고 싶으면 front matter의 slug로 덮어쓰면 됩니다. 두 페이지가 같은 URL을 주장하면 빌드 에러입니다. 나중에 쓴 쪽이 이긴다는 식으로 처리하지 않습니다.

정렬

섹션은 자식 페이지를 weight 오름차순으로 정렬하고, weight가 없으면 제목으로 넘어갑니다. 섹션의 _index.mdsort_by를 주거나, sqzass.toml[nav] sort_by로 사이트 전체 기본값을 바꿀 수 있습니다.

weight 오름차순. 기본값.
title 오름차순.
date 내림차순 — 최신이 먼저, 날짜 없는 페이지는 뒤. 피드 참고.

드래프트

draft = true인 페이지는 빌드에서 빠집니다. 명령줄의 --drafts나 설정의 [build] drafts = true로 다시 넣을 수 있습니다.