Skip to content

Diff of PageTemplate

Changes between revision 0 - and revision 1 - Add PageTemplate page
--- PageTemplate
+++ PageTemplate
@@ -1,1 +1,50 @@
+= PageTemplate
 
+새 페이지를 빈 `= 이름` 대신 미리 만들어 둔 틀에서 시작하게 합니다. 옵시디언의 Templates, 노션의 데이터베이스 템플릿과 같은 쓰임입니다.
+
+== 템플릿은 그냥 페이지입니다
+
+이름이 `Template:` 로 시작하는 페이지가 템플릿입니다(`Template:Person`, `Template:Restaurant Review`). 위키에서 따로 다루는 것이 없습니다 — 일반 페이지처럼 AhaMark 로 쓰고, 같은 권한·이력·링크를 가집니다. 템플릿을 페이지로 둔 까닭이 그것입니다: 고치고 검토하고 링크하는 방법이 따로 없습니다. 템플릿을 안 쓰는 위키는 그런 페이지가 없을 뿐입니다.
+
+[[[#!Vim text
+= {{PageName}}
+작성일 {{Date}}
+
+== 메모
+]]]
+
+속성을 미리 적어 두려면 `#!Schema` 블록을 그 안에 그대로 쓰면 됩니다(`name	{{PageName}}` 처럼 이름 칸에도 토큰을 쓸 수 있습니다).
+
+== 쓰는 법
+ * '''없는 페이지 화면'''에 «create from template: 이름» 이 템플릿마다 한 줄씩 나옵니다. 누르면 그 이름의 편집 화면이 템플릿 내용으로 채워진 채 열립니다. 읽을 권한이 없는 템플릿은 목록에 나오지 않습니다.
+ * 주소로 바로 열려면 `/w/새 페이지?action=edit&template=Template:Person`. 이 주소를 문서 안에 링크로 걸어 두면 «새 사람 추가» 같은 버튼이 됩니다.
+ * 저장하기 전까지는 아무것도 만들어지지 않습니다. 템플릿으로 연 편집 화면도 새 페이지의 편집 화면과 같습니다.
+
+== 채워지는 것 두 가지
+템플릿을 연 순간 이 둘이 바뀝니다.
+
+[[[#!Table tsv 1
+토큰	바뀌는 것
+`{{PageName}}`	만드는 페이지의 이름
+`{{Date}}`	오늘 날짜(`2026-10-25` 꼴)
+]]]
+
+'''이 둘뿐이고, 다른 `{{이름}}` 은 그대로 둡니다.''' 새 페이지가 쓰려는 변수([Variable])일 수 있어서, `{{...}}` 를 전부 채우는 템플릿은 그런 변수를 아무 말 없이 깨뜨립니다. 채우는 것은 만들 때 한 번이고, 그 뒤 템플릿을 고쳐도 이미 만든 페이지는 바뀌지 않습니다 — 복사이지 포함이 아닙니다(포함은 [MacroInclude]).
+
+== 정한 것과 그 이유
+ * '''자동으로 고르지 않습니다.''' «`Person` 이름이면 `Template:Person`» 같은 짐작을 하지 않고, 사람이 고릅니다. 이름과 틀이 맞는다는 보장이 없고, 틀린 짐작은 눈에 안 띄게 엉뚱한 내용으로 시작합니다.
+ * '''`?template=` 이 없으면 종전대로입니다.''' 날짜 페이지(`2026-10-24`)와 `--MM-DD` 페이지는 기본 내용, 나머지는 `= 이름` 한 줄. 템플릿은 사람이 명시했을 때만 그것들을 이깁니다.
+ * '''`Template:` 이 아닌 이름은 `?template=` 로 줘도 무시합니다.''' 아무 페이지나 새 페이지의 틀로 복사하는 길을 열지 않으려는 것입니다.
+ * 자리 표시자 문법을 더 늘리지 않았습니다(`{{Title}}` 별칭, 날짜 형식 지정 등). 필요가 생기면 그때 더합니다.
+
+== 아직 없는 것
+ * 편집 화면 안의 «템플릿 고르기» 상자. 지금은 없는 페이지 화면과 주소로만 시작합니다. CodeMirror 의 내용을 바꾸는 쪽이라 따로 다듬어야 해서 미뤘습니다.
+ * 이미 있는 페이지에 템플릿을 넣는 것.
+
+== 구현
+`PageTemplate`(순수 함수: 이름 판별, 토큰 채우기)이 규칙을 갖고, `Wiki.view` 의 새 페이지 편집 분기가 `?template=` 을 읽으며, `WikiSnippet.notFound` 가 목록을 그립니다. `PageTemplateSpec`·`WikiSnippetSpec` 이 확인합니다 — 특히 템플릿이 없을 때 목록 중간에 빈 줄이 끼어 목록이 끊기지 않는 것과, 템플릿 이름에 든 `)`·태그가 매크로를 끝내거나 태그를 여는 것을 막는 것.
+
+== 관련
+ * [MacroInclude]
+ * [Variable]
+ * [InterpreterSchema]