자기 날짜를 못 보여 주는 목록
날짜순으로 세워 놓고 그 날짜를 숨기는 생성기. 고치는 데 든 값과, 일부러 빼놓은 것.
sqzass 는 처음부터 섹션을 날짜순으로 정렬할 수 있었다.
섹션 인덱스에 sort_by = "date" 를 적으면 최신 글이 먼저 나오고 날짜 없는
페이지가 뒤로 간다. 거기까지는 됐다.
못 하던 것은 그 날짜를 보여 주는 일이었다.
템플릿은 목록을 page.children 으로 보는데, 그 안의 항목은 정확히 네 개였다.
title, description, url, weight. 그래서 블로그 인덱스가 완벽한 시간순으로
정렬돼 있으면서도 그렇다고 말할 방법이 없었다. 순서는 진짜인데 보이지 않았다.
둘 중 나쁜 쪽만 남은 셈이다. 읽는 사람은 이 목록이 정렬된 것인지 그냥 늘어놓은
것인지 알 수가 없다.
택하지 않은 우회로
뻔한 탈출구는 [extra] 다. 템플릿까지 손대지 않고 전달되는 자유 형식 테이블이니,
거기에 날짜를 적고 URL 로 짝을 지어 템플릿에서 맞추면 된다.
[[]]
= "2026"
= [{ = "/posts/some-post/", = "08.03" }]
동작한다. 그리고 글 하나를 새로 쓸 때마다 파일 두 개를 고쳐야 하는데, 잊는 쪽은 언제나 두 번째다. 설명하려는 대상 옆에 손으로 유지하는 대응표는 결국 어긋나고, 파일 이름을 처음 바꾸는 순간 조용히 깨진다. 항목이 그냥 안 맞게 되고 날짜가 사라진다.
실제로 든 값
구조체 하나에 필드 하나, 그리고 그걸 만드는 자리 여섯 곳.
값은 헬퍼 하나를 거치므로, 목록과 그 목록이 가리키는 페이지가 발행일에 대해
서로 다른 말을 할 수 없다. 섹션의 날짜는 그 섹션 _index.md 에서 오고, 인덱스가
없는 섹션에는 날짜도 없다.
이게 전부다. 대신하려던 우회로보다 작다.
일부러 빼놓은 것
같은 구조체는 필드 하나만 더하면 프로젝트 목록에도 제대로 쓸모가 생긴다.
extra 를 얹으면 모든 목록이 임의의 메타데이터를 실어 올 수 있다. 언어 배지,
링크, 상태 같은 것들.
넣지 않았고, 이유는 PageRefCtx 가 쓰이는 자리에 있다. page.children 만이
아니다. 사이트 전체의 site.sections 내비게이션 트리도 이 구조체로 만들어지고,
그 트리는 언어당 한 번 직렬화해서 모든 페이지가 나눠 쓴다. 여기에 페이지마다의
[extra] 를 넣으면 모든 기능 목록과 모든 코드 예제가 내비게이션 스냅샷에
실린다. 그걸 들여다보지도 않는 페이지들이 페이지마다 그 값을 치르게 된다.
날짜는 작은 필드 다섯 개다. 열린 테이블은 오늘 얼마나 썼느냐만큼이다.
그래서 이 사이트의 프로젝트 인덱스는 여전히 카탈로그를 한곳에 손으로 두고, 모든
항목이 실재하는 페이지를 가리키는지 CI 가 검사한다. 방금 날짜에 대해 거부한 것보다
나쁜 답인데, 여기서는 그게 맞다. 날짜 쪽 수정을 싸게 만든 바로 그 성질이 extra
쪽을 비싸게 만들기 때문이다.