Дефолтный шаблон

Этот сайт сделан на дефолтном шаблоне — то, что вы видите прямо сейчас, и есть он.

Дефолтный шаблон — встроенный макет страницы, который trip2g использует по умолчанию. Он обеспечивает полный набор возможностей: шапка, подвал, боковые панели, оглавление, обратные ссылки и сетка карточек для связанных заметок.

Всё управляется через frontmatter — писать HTML не нужно.

Что входит в дефолтный шаблон

Каждая страница может содержать эти секции:

  • Шапка — логотип и навигация сайта (из markdown-заметки)
  • Левая боковая панель — оглавление, обратные ссылки или меню
  • Правая боковая панель — исходящие ссылки, виджеты или пусто
  • Контент — markdown-разметка вашей заметки
  • Сетка карточек — связанные заметки (большие, средние, список)
  • Подвал — навигация и информация сайта (из markdown-заметки)

Функциональные заметки: шапка, подвал и боковые панели

Шапка, подвал и боковые панели — это обычные markdown-заметки из вашего хранилища. Вы пишете их как обычные заметки, а trip2g подставляет их в нужное место на каждой странице.

Trip2g разрешает, какую заметку показать в каждой секции, в таком порядке:

  1. frontmatter самой заметкиheader: [[моя-шапка]] в заметке переопределяет всё
  2. Glob-секции — заметка объявляет, для каких путей она является шапкой/подвалом/панелью
  3. Автозагрузка_header.md, _footer.md, _left_sidebar.md, _right_sidebar.md
  4. Секция отсутствует

Автозагрузка (рекомендуемый способ для большинства сайтов)

Если в вашем хранилище есть заметка _header.md, trip2g автоматически использует её как шапку на всех страницах — без каких-либо настроек в отдельных заметках.

Аналогично работают:

  • _footer.md — подвал для всех страниц
  • _left_sidebar.md — левая боковая панель для всех страниц
  • _right_sidebar.md — правая боковая панель для всех страниц

Пример _header.md:

![Логотип](/assets/logo.png)

- [Главная](/)
- [Документация](/docs)
- [О сайте](/about)

Заметка не требует frontmatter. Шапка извлекает:

  • Первое изображение — логотип сайта
  • Первый список — пункты навигации

Пример _left_sidebar.md:

### Начало работы

- [Быстрый старт](/docs/quick-start)
- [Установка](/docs/install)

### Продвинутое

- [Шаблоны](/docs/templates)
- [API](/docs/api)

Для заголовков групп в боковой панели используйте ### (заголовок h3), а не жирный текст. Интерфейс отображает ### как полноценные метки секций.

Glob-секции (разные шапки для разных разделов)

Если нужны разные шапки или боковые панели для разных разделов сайта, добавьте glob-поля во frontmatter заметки — и она автоматически применится к нужным страницам.

Добавьте {section}_includes во frontmatter любой заметки, чтобы она стала glob-секцией:

---
header_includes:
  - blog/*
  - articles/**
header_excludes:
  - blog/premium/*
header_include_property: published
header_exclude_property: draft
header_priority: 10
content: [self]
free: true
---

# Шапка блога

- [[Главная блога]]
- [[Категории]]
- [[Архив]]

Этот файл будет шапкой для всех заметок, путь которых соответствует blog/* или articles/**, — кроме заметок из blog/premium/*, заметок без ключа published во frontmatter и заметок с ключом draft.

Поля frontmatter glob-секций

Замените {section} на одно из: header, footer, left_sidebar, right_sidebar.

Поле Тип Обязательно По умолчанию Примечание
{section}_includes строка или массив да (для активации) Glob-паттерны (doublestar). Строка или список строк.
{section}_excludes строка или массив нет нет Glob-паттерны для исключения. Применяются после includes.
{section}_include_property строка нет Только заметки, у которых есть этот ключ во frontmatter
{section}_exclude_property строка нет Пропустить заметки, у которых есть этот ключ
{section}_priority целое число нет 0 Выигрывает файл с наибольшим числом при совпадении нескольких

Поле content работает так же, как у любой заметки: self — тело самого файла, [[ссылка]] — вставка другой заметки и т.д.

Один файл — несколько ролей

Один файл может одновременно быть шапкой и подвалом:

---
header_includes: "**"
footer_includes: "**"
content: [self]
free: true
---

Шапка и подвал по умолчанию для всех страниц.

Скрытие glob-секций из листинга

Добавьте префикс _ к имени файла, чтобы скрыть его из сетки и списков сайта:

_blog-header.md     ← скрыт из листинга, работает как glob-секция
blog-header.md      ← виден как обычная заметка И работает как glob-секция

Переопределение в отдельной заметке (frontmatter)

Если нужно задать шапку, подвал или боковую панель для конкретной страницы, укажите ссылку в frontmatter:

---
header: [[_header]]
footer: [[_footer]]
left_sidebar:
  - TOC
  - Backlinks
right_sidebar: false
---

Скрыть шапку: header: false
Скрыть подвал: footer: false
Скрыть левую панель: left_sidebar: false
Скрыть правую панель: right_sidebar: false

Доступные виджеты для боковых панелей:

  • TOC — интерактивное оглавление (заголовки текущей заметки)
  • Backlinks или inlinks — заметки, которые ссылаются на эту
  • outlinks — ссылки из этой заметки на другие
  • [[Название]] — встроить другую заметку по названию
  • путь/к/файлу.md — встроить заметку по пути

Полный пример: сайт документации

Сайт с общей шапкой для всех страниц и отдельной боковой панелью для раздела API.

_header.md — применяется ко всем страницам (автозагрузка):

![Логотип](/logo.png)

- [Главная](/)
- [Документация](/docs)
- [Блог](/blog)

_api-sidebar.md — левая панель только для раздела API (glob-секция):

---
left_sidebar_includes: "docs/api/**"
left_sidebar_priority: 10
content: [self]
free: true
---

### Справочник API

- [[Аутентификация]]
- [[Эндпоинты]]
- [[Лимиты запросов]]

docs/api/endpoints.md — обычная заметка, никаких полей макета не нужно:

---
title: Эндпоинты
---

Документация по эндпоинтам API...

Результат: docs/api/endpoints.md получит _header.md как шапку (через автозагрузку) и _api-sidebar.md как левую панель (через glob-совпадение). Заметки вне docs/api/ получат только шапку.

Сравнение с frontmatter-патчами

Оба инструмента позволяют назначать шапки и боковые панели сразу для множества заметок. Разница:

  • Frontmatter-патчи добавляют поля во frontmatter заметок при загрузке. Заметка получает header: [[x]], как если бы вы написали его вручную.
  • Glob-секции разрешаются при рендеринге — из frontmatter самого файла-секции. Отдельные заметки остаются нетронутыми.

В большинстве случаев glob-секции проще: задайте правила сопоставления один раз в файле-секции — и готово. Frontmatter-патчи полезны, когда нужно задать несколько свойств одновременно (например, free: true и header: для целой папки).

Документация по frontmatter-патчам

Блоки контента

Свойство content управляет, какие секции появятся в основной области:

---
content:
  - self
  - magazine
---

Доступные блоки контента:

  • self или selfcontent — сама заметка с заголовком и текстом
  • magazine — сетка связанных заметок (см. ниже)
  • [[Название]] — встроить заметку по названию
  • путь/к/файлу.md — встроить заметку по пути

Поведение по умолчанию:

  • Если не указали content, показывается только сама заметка (self)
  • Если заметка — корень сайта без индекса, показывается magazine

Макет сетки карточек

Сетка отображает связанные заметки в виде карточек с трёхуровневой иерархией:

Уровень Позиция Количество Стиль
Featured Первая 1 Большая, на всю ширину
Сетка 2–5 4 Средние, 4 в ряд
Список 6+ Много Минимальный, вертикально

Включите сетку на индексной странице:

---
title: Блог
content:
  - magazine
magazine_include_files: "blog/**/*.md"
magazine_sort_property: priority
---

Свойства сетки

magazine_include_files — Glob-паттерн для выбора заметок

magazine_include_files: "blog/*.md"          # Все посты в blog/
magazine_include_files: "posts/**/*.md"      # Все .md в posts/ рекурсивно
magazine_include_files: "docs/**/README.md"  # Все README.md файлы

По умолчанию: **/*.md (все заметки)

magazine_exclude_files — Glob-паттерн для исключения заметок из сетки

magazine_exclude_files: "**/*Telegram.md"   # Исключить Telegram-версии по имени
magazine_exclude_files: "drafts/**"         # Исключить черновики
magazine_exclude_files: "archive/*.md"      # Исключить архивные посты

Применяется после magazine_include_files. По умолчанию не задан — ничего не исключается.

magazine_exclude_property — Исключить заметки с определённым полем frontmatter

magazine_exclude_property: telegram_publish_at

Заметки с этим полем не появятся в сетке. Полезно, когда Telegram-версии заметок лежат рядом с веб-версиями.

magazine_sort_property — Сортировать карточки по полю frontmatter

magazine_sort_property: priority

Заметки с этим полем списываются первыми (по убыванию значения), остальные — по дате создания по убыванию.

Пример:

---
title: Важный пост
priority: 100
---

magazine_include_property — Показывать только заметки с определённым полем

magazine_include_property: featured

Появятся только заметки с featured: true (или другим истинным значением) во frontmatter.

Исключение Telegram-заметок из сетки

Когда вы публикуете и на сайт, и в Telegram, Telegram-версии часто лежат в той же папке. Два способа исключить их:

По имени файла — если Telegram-заметки следуют соглашению (например, Мой пост. Telegram.md):

---
title: Ежедневные отчёты
content:
  - magazine
magazine_include_files: "reports/**/*.md"
magazine_exclude_files: "**/*Telegram.md"
---

По свойству frontmatter — если у Telegram-заметок есть telegram_publish_at:

---
title: Ежедневные отчёты
content:
  - magazine
magazine_include_files: "reports/**/*.md"
magazine_exclude_property: telegram_publish_at
---

Оба способа можно комбинировать.

Карточки сетки

Каждая карточка показывает:

  • Эскиз — первое изображение в заметке (если есть)
  • Заголовок — из frontmatter
  • Описание — из поля description (или первый параграф, если нет описания)
  • Ссылку — на полную заметку

Примеры использования

Главная страница с сеткой

---
title: Главная
content:
  - self
  - magazine
magazine_include_files: "**/*.md"
magazine_sort_property: featured_on_home
left_sidebar: false
right_sidebar: false
---

# Добро пожаловать

Исследуйте наш контент ниже.

Отметьте заметки для главной страницы:

---
title: Важная тема
featured_on_home: true
---

Сайт документации

---
title: Документация
content:
  - self
left_sidebar:
  - _sidebar.md
right_sidebar:
  - TOC
  - outlinks
---

Блог с избранными постами

---
title: Блог
content:
  - magazine
magazine_include_files: "blog/**/*.md"
magazine_sort_property: featured
---

Посты блога:

---
title: Последние новости
featured: 50
description: Резюме недавних обновлений
---

Гибкость через frontmatter-патчи

Прописывать header, footer, left_sidebar и lang в каждой заметке вручную — бессмысленно. Frontmatter-патчи позволяют задать эти свойства один раз для целой папки.

Например, эта документация управляется вот так:

# Все страницы — публичные
**/*.md → {free: true}

# Русский сайдбар для всего RU-раздела
ru/user/**/*.md → {left_sidebar: "ru/user/_sidebar.md"}

# Русскоязычные шапка и подвал
ru/**/*.md → {header: "[[ru/_header]]", footer: "[[ru/_footer]]"}

Ни одна заметка не знает о шаблоне — всё приходит снаружи через патчи.

Полная документация по frontmatter-патчам

Переключение на свой шаблон

Если вам нужен больше контроль, чем дают свойства frontmatter, создайте собственный шаблон. См. templates для полной системы шаблонов.

---
layout: my-custom-template
title: Моя страница
---

Любая заметка может использовать либо дефолтный шаблон (без layout), либо свой.


Ссылки на посты в Telegram

Если заметка опубликована в Telegram-канале, шаблон показывает синюю кнопку «Читать в Telegram» над заголовком. По нажатию открывается пост в Telegram.

Кнопка появляется автоматически в трёх случаях.

1. Опубликовано через trip2g

Когда вы публикуете заметку в Telegram через систему публикации trip2g, кнопка появляется автоматически. Если заметка отправлена в несколько каналов — каждый канал получает свою кнопку с названием канала.

Никакой frontmatter не нужен — trip2g хранит информацию об отправленных сообщениях в базе данных.

2. Импорт из Telegram

У заметок, импортированных из Telegram-канала, ссылка уже есть во frontmatter:

---
telegram_publish_channel_id: "1234567890"
telegram_publish_message_id: 42
telegram_publish_message_link: https://t.me/c/1234567890/42
---

Поле telegram_publish_message_link устанавливается автоматически при импорте. Кнопка использует этот URL напрямую.

Для публичных каналов формат ссылки — https://t.me/channelname/42. В этом случае кнопка показывает имя канала: «Читать на @channelname».

3. Альтернативы (ссылка на Telegram-версию)

Если у вас есть веб-версия и отдельная Telegram-версия одного контента, используйте поле alternatives:

---
title: Моя статья
alternatives:
  - "[[Моя статья. Telegram]]"
---

Связанная заметка (Моя статья. Telegram) должна содержать telegram_publish_message_link во frontmatter или быть опубликована через систему публикации trip2g. Шаблон разрешает вики-ссылку, извлекает ссылку на Telegram и показывает кнопку на родительской странице.

Приоритет

Шаблон проверяет источники в таком порядке:

  1. База данных (опубликовано через trip2g) — проверяется первой, поддерживает несколько каналов
  2. Frontmatter telegram_publish_message_link — запасной вариант для импортированных заметок
  3. Альтернативы — извлекаются из связанных заметок