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

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

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

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

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

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

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

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

blog.11tydata.js

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

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="">
{× endblock ×}

{×- block extracss ×}
{×- css ×}{× include "public/css/featured.css" ×}{×- endcss ×}
{× endblock ×}


{×- block beforeContent ×}
<article>
{× endblock ×}



{×- block afterContent ×}
</article>
{×- if collections.posts ×}
...
{× endblock ×}

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

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

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

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