11ty(eleventy)의 collections와 front-matter로 유기적인 내비게이션을 자동 생성
11ty에서는
collections.all
로 사이트 전체의 정보를 객체로 얻을 수 있습니다.또한 각 페이지의 시작 부분에 다음과 같이 front-matter를 작성하여 페이지별 변수를 전달할 수 있습니다.
---
sample: "これはページ内のテンプレートエンジンや、11tyのcollectionsで変数sampleとして取得できます"
---
이것을 이용해, 아래의 화상과 같이 의사적인 계층을 가지면서, 차례로 읽을 수 있는 링크도 표시하는 네비게이션을, 페이지를 늘릴 때마다 자동 갱신할 수 없는가라고 생각했습니다.
이하, 구현할 수 있었으므로 코드를 기재합니다.
front-matter의 내용
각 페이지에
order
변수를 정의합니다. 소카테고리내에서 연속번호로 해, 카테고리가 바뀌었을 경우는 10의 위치를 1증가한 1번째의 페이지로부터 다시 카운트합니다.즉, 앞의 그림의 경우는 「코딩 룰」의 페이지는
order: 16
로, 「칼라 테이블」의 페이지는 order:21
가 됩니다.---
order: 16
pageTitle: "コーディングルール"
---
mixin 만들기
다음 페이지의 정보를 표시하는 mixin은 다음과 같습니다. Pug로 작성하고 있지만 다른 템플릿 엔진도 비슷한 생각이됩니다.
mixin nextNav(order)
-
let nextID = Number.parseInt(order)+1;
let next = collections.all.filter((a) => Number.parseInt(a.data.order) === nextID);
if next.length === 0
-
nextID = (Math.trunc(order/10)*10)+11;
next = collections.all.filter((a) => Number.parseInt(a.data.order) === nextID);
each item in next
p
a(href=item.url) Next: #{item.data.pageTitle}
처리 흐름
먼저 order 변수가
order+1
인 페이지를 요청합니다. 이 mixin에서는 collections.all에 JavaScript filter를 적용하지만 더 똑똑한 방법이있을 수 있습니다. -
let nextID = Number.parseInt(order)+1;
let next = collections.all.filter((a) => Number.parseInt(a.data.order) === nextID);
결과가 비어 있으면 10위를 올리고 한 번 더 늘려 다시 시도합니다.
10으로 나눈 다음 Math.trunc로 정수 부분을 취하고 다시 10 배하면 10 자리에 딱 맞는 숫자가됩니다 (3이면 0, 16이면 10입니다). 이것에 11을 더하여 자리를 올리고 있습니다.
if next.length === 0
-
nextID = (Math.trunc(order/10)*10)+11;
next = collections.all.filter((a) => Number.parseInt(a.data.order) === nextID);
마지막으로 페이지 정보를 확장합니다. 1건이나 0건이어야 합니다. 링크의 라벨 텍스트는 front-matter로 정의하고 있는 페이지 타이틀을 내고 싶기 때문에
data.pageTitle
가 됩니다. each item in next
p
a(href=item.url) Next: #{item.data.pageTitle}
템플릿으로 호출
템플릿 측에서는
order
변수를 건네주어 호출합니다. Pug는 상속을 사용할 수 있으므로 레이아웃 템플릿에 써 두면 좋다고 생각합니다.+nextNav(order)
Sitemap의 생성은 JSON에서 데이터를 쓰고 전개하는 방법이 잘 소개되고 있습니다만, 이것이라면 실제 HTML을 변경·삭제했을 때에 누설이 나올 것 같기 때문에, 제너레이터다운 수단을 생각해 보았습니다.
11ty는 사이트 내의 페이지 정보를 항상 정리해주는 것 같습니다. 잘 이용하면 정적인 사이트도 파탄이나 링크 끊김을 일으키지 않고 작성할 수 있을까라고 느끼고 있습니다.
Reference
이 문제에 관하여(11ty(eleventy)의 collections와 front-matter로 유기적인 내비게이션을 자동 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/webbingstudio@github/items/33f135665219b23a9849텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)