Написать первый гайд
Гайд в этой теме — папка, в которой лежит всё его хозяйство. Пройдём путь от команды, создающей каркас, до живого виджета в тексте — виджет в этой статье настоящий и создан ровно тем способом, который описан.
#Каркас одной командой
создать каркас гайдаhugo new content guides/my-first --kind guidesАрхетип guides создаёт папку-бандл: index.md с заполненным каркасом front matter и заготовку widgets.js рядом. Файлы, которые лежат в папке гайда, тема подхватывает сама — подключать ничего не нужно.
Путь в команде — без /index.md. Напишешь guides/my-first/index.md — Hugo переключится в режим одиночного файла и молча не скопирует соседние файлы архетипа. Папка без widgets.js — первый признак этой ошибки.
#Front matter: что заполнять
index.md — front mattertitle: "Мой первый гайд"
description: "Одно предложение — для ленты, поиска и meta."
lead: "Лид-абзац под заголовком; может быть длиннее description."
tags: [example, setup]
mins: 4
version: "v0.0.1"Подсвечены два поля с неочевидными правилами. mins — рукописная честная оценка времени чтения: она попадает в чипы статьи и в арифметику серии, поэтому автоподсчёту не доверяется (опустишь поле — тема посчитает сама). version — произвольная строка чипа версии: версия языка, СУБД, твоего продукта — тема рендерит её как есть. Поля date и slug архетип тоже проставит; дата живёт только в ленте и RSS — в тексте статьи она не появляется нигде.
Частью серии гайд становится по расположению: его папка лежит внутри папки серии (guides/track/my-part/), а порядок среди частей задаёт weight; короткое имя для панели — rail_title. Как из этого получается «часть N из M», разобрано в «Серия знает о себе всё».
Заголовки размечай с явными якорями: ## Секция {#section-id}, латиницей — тогда ссылки и оглавление не зависят от транслитерации кириллицы.
#Шорткоды
Четыре, которых хватает на большинство гайдов:
callout— врезка; типыkey,trap,internals,note;widget— точка монтирования живой иллюстрации (ниже);raw— многострочный HTML-фрагмент как есть, для диаграмм;bigcard— крупная ссылка-карточка на соседний материал.
{{< callout type="trap" label="Ловушка" >}}
Внутри — обычный markdown.
{{< /callout >}}У код-блоков есть атрибуты прямо в фенсе: ```toml {label="config.toml (фрагмент)", hl_lines=[2]} — label рисует подпись над блоком, hl_lines подсвечивает строки. Оба уже встречались в этой статье: подпись у каждого блока и подсветка в примере front matter сделаны именно так.
#Виджет за два касания
Живая иллюстрация добавляется без правки темы. Касание первое — шорткод в тексте; внутрь кладётся статичный фолбэк, который останется у читателей без JS:
касание 1 — шорткод в тексте{{< widget id="w-demo" note="— задание читателю" >}}
<p>Статичный фолбэк для читателей без JS.</p>
{{< /widget >}}Касание второе — инициализатор с тем же id в widgets.js рядом с index.md:
Taiga.widget("w-demo", function (root) {
root.innerHTML = "";
// строишь виджет из строительных классов темы:
// .w-row, .w-btn, .w-num, .w-cap — свои стили не нужны
});Рантайм темы дождётся DOM, найдёт точку монтирования и вызовет колбэк в try/catch: упавший виджет напишет в консоль и не уронит страницу. Следи только за тем, чтобы id в шорткоде и в Taiga.widget(…) совпадали буква в букву.
Вот работающее доказательство — прикидка честного mins для будущего гайда:
Он собран ровно как в примерах выше: шорткод — здесь, Taiga.widget("w-mins", …) — в widgets.js в папке этой статьи.
Теперь ты можешь написать гайд с живой иллюстрацией, не открыв ни одного файла темы.
#Что дальше
Гайд есть, сайт собирается — но выглядит он пока как это демо, а не как твой проект. Третья часть — про палитру одним файлом, custom.css, собственные разделы и второй язык.