taiga
руководство · основы · часть 3 из 3

Сделать своей

проверено на v0.0.1 ~5 мин 504 слова

Всё в этой части — файлы твоего сайта: палитра, стили, партиалы, строки интерфейса, второй язык. В тему при этом не попадает ни одна правка, и её обновление остаётся обычным git pull.

#Палитра — один файл

Фирменный цвет сайта — это toml-файл в data/themes/ на стороне сайта:

data/themes/mine.toml (фрагмент)
name = "Моя"      # имя в пикере
weight = 80       # позиция в списке пикера

"bg-deep" = "#101418"
"bg-surface" = "#1a2027"
"text-primary" = "#d8dee6"

Hugo мержит данные темы и сайта (при совпадении имён побеждает сайт), поэтому файл сам попадает и в CSS, и в пикер палитр в шапке. Не нужна палитра из комплекта темы — переопредели её файл с disabled = true, и она исчезнет отовсюду. Как из toml получаются CSS-блоки и свотчи — разобрано в «Палитра — это один файл».

#custom.css и хуки

Точечные правки поверх палитры — assets/css/custom.css сайта: если файл существует, тема подключает его последним в CSS-бандл, так что твои правила побеждают без !important. Дизайн-токены — публичный API: имена CSS-переменных стабильны и перечислены в docs/customizing.md темы.

Для аналитики, своих meta-тегов и сторонних скриптов есть hooks-партиалы: hooks/head-extra.html и hooks/foot-extra.html в теме пустые, сайт кладёт одноимённые файлы в свой layouts/_partials/ — и их содержимое попадает в head и в конец body. А если нужно поменять сам рендер — любой партиал темы переопределяется одноимённым файлом сайта: lookup order Hugo всегда предпочитает файлы сайта. Мелкие именованные партиалы — логотип, футер, карточка ленты — существуют ровно для такого точечного переопределения.

#Свой раздел

Понадобился раздел, которого в теме нет, — глоссарий, каталог, песочница с тренажёром. Для него не нужны ни новый layout, ни правки темы: это обычная страница или бандл, а интерактив — те же widgets.js рядом с текстом, механизм работает для любого бандла, не только для гайдов. Пункт меню добавляется в [[menus.main]] конфига; параметр params.badge = "β" у пункта рисует бейдж — это генерик-фича навигации, а не признак особого раздела.

На этом демо так собрана «Песочница»: в теме от неё нет ни следа, весь раздел — три файла на стороне сайта.

#Свои строки

Тексты интерфейса не захардкожены в шаблонах. Серверные строки живут в i18n/*.toml: сайт кладёт свой файл с частичным набором ключей, и он мержится с файлом темы — переопределяешь только нужное. Строки, живущие в JS — поповер «Вид», подсказки минимап, — переопределяются объектом window.THEME_I18N; список ключей — в docs/customizing.md.

#Второй язык

Добавление языка — аддитивный шаг, а не миграция. В конфиг дописывается блок [languages.en] (плюс [languages.en.params] для hero-строки и [languages.en.menus] для меню). Переводы — суффиксами файлов: index.en.md рядом с index.md, включая _index рубрик и серий; Hugo связывает версии сам. Переключатель языков появляется в шапке, когда языков больше одного, а Pagefind строит отдельный индекс на каждый язык по lang страницы. Правок шаблонов — ноль; пошаговый чеклист — в docs/i18n.md темы.

Главная мысль

Инвариант всей этой части: кастомизация — это файлы твоего сайта. В каталог темы не попадает ни одна правка, поэтому обновление темы — git pull или бамп версии модуля, без ручного мержа своих изменений.

Теперь ты можешь увезти сайт сколь угодно далеко от этого демо — не форкая тему.

#Что дальше

Руководство на этом закончено: тема стоит, гайды пишутся, сайт выглядит по-своему. Если интересно, почему это устроено именно так, — в «Устройстве» есть серия «Анатомия темы»: папка-бандл, арифметика серий, палитры-как-данные. А все компоненты разом собраны на полигоне в «Справочнике».