Перейти к содержимому

Это — страница спецпроекта. ☆

Личный сайт — это комму­налка, где по сосед­ству с блогом живут порт­фо­лио, проекты, стра­ница «Обо мне» и другие. Если кто-то из соседей затвор­ни­чает и не прини­мает общие правила, на сайт стано­вится грустно смот­реть: общая нави­гация пришита белыми нитками, стили на одном разделе отли­ча­ются от стилей на других и так далее.

Трирема — сговор­чивый сосед. Захо­тите — импор­ти­руете главную как сырой ХТМЛ-­файл из старой версии сайта. Захо­тите — свер­стаете её с нуля, подключив уникальные прело­ады, стили и скрипты. Захо­тите — у стра­ницы каждого проекта из порт­фолио будет уникальный цветной фон и ссылка в нави­гации по сайту. Захо­тите — и ваш пост про Гутен­берга будет свёр­стан плотным блоком фрак­туры в центре стра­ницы. Или ПТ Сансом на зелёном фоне без авто­ма­ти­чески подстав­лен­ного заго­ловка, полоски с тегами и розо­вого сердечка.

Например, как тут

Захотел. Как это работает?

Для этого нужно разо­браться в nunjucks-­шаблонах стра­ниц, лежащих в папке _in­cludes/lay­out­s/. Они рабо­тают как матрёшка: в base.njk запи­саны ХТМЛ шапки и подвала сайта, post.njk берёт base.njk за основу и добав­ляет код для заго­ловка поста и нави­гации к другим постам, Маркдаун-­заметка берет за основу post.njk и вписы­вают внутри ХТМЛ содер­жимое заметки.

Вы можете не понять, в какой момент во фронтмэт­тере заметки появи­лась строчка lay­out: layouts/post.njk. Всё просто: внутри папки с замет­ками /con­tent/b­log/ лежит файл blog.11tydata.js. Он задаёт дефолтные свой­ства для всех заметок в этой папке, в том числе исполь­зу­емый nunjucks-­шаблон.

blog.11tydata.js

export default {
	tags: ["posts"], // ноги у collections.posts растут отсюда
	lay­out: "layouts/post.njk",
	permalink: "/{ { page.fileSlug } }/",
	eleventy­Computed: {
	media: ... // тут список всех медиа­фай­лов, упомя­нутых в заметке
	descrip­tion: ... // тут гене­ри­ру­ется описа­ние, если его нет
	}

11ty Data Cascade ставит свой­ствам, пропи­санные в доку­менте напря­мую, прио­ритет выше, чем сгене­ри­ро­ванным по дефолту. Поэтому вы запросто можете сменить шаблон на кастом­ный: для этого даже не нужно выхо­дить из заме­точ­ника.

А как сделать свой шаблон?

Откройте _includes/layouts/featured.njk — это кастомный шаблон done right. Он не просто исполь­зует base.njk как внешнюю матрёшку, он расши­ряет её, допи­сывая и пере­пи­сывая её даже в теге <head>

_includes/layouts/featured.njk

{× extends "layouts/base.njk" ×}

{×- block preload ×}
<link rel="preload" href="/fonts/PTSansRegular.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="preload" href="/fonts/PTSansCaptionRegular.woff2" as="font" type="font/woff2" crossorigin="">
{× endb­lock ×}

{×- block extracss ×}
{×- css ×}{× include "public/css/featured.css" ×}{×- endcss ×}
{× endb­lock ×}


{×- block before­Con­tent ×}
<article>
{× endb­lock ×}



{×- block after­Con­tent ×}
</article>
{×- if collections.posts ×}
...
{× endb­lock ×}

Просто исполь­зуйте его как отправную точку: пере­пи­шите вклю­ченный в него CSS-­файл, расширьте скрип­тами через {×- js ×}{× include ... ×}{×- endjs ×} в блоке extrac­ss. Созда­вайте новые шаблоны, в конце-­концов.

Если вы хотите, чтобы кастомный шаблон работал на опре­де­лённом разделе вашего сайта (например, у вас есть проект с подстраницами), просто создайте папку /pro­ject/ внутри папки /con­tent/ и добавьте следу­ющее в project.11tydata.js

export default {
	lay­out: "layouts/project.njk", 
	permalink: "/pro­ject/{ { page.fileSlug } }/", # опци­о­нально
}

Весе­ли­тесь!