home/docs/README.ru.md
Maxim Lebedev c361321012
All checks were successful
/ docker (push) Successful in 1m0s
✏️ Added missing .Page variable menton in tempaltes section
2023-11-09 22:04:46 +06:00

96 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# home
> Совершенно новый:tm: Golang-движок для моего персонального сайта. Без баз данных, работа полностью основана на взаимодействии с простыми файлами "как есть". Потенциально стремится к совместимости с протоколами [IndieWeb](https://indieweb.org/).
## Установка и запуск
Склонируйте этот репозиторий и запустите его компилятором Go:
```bash
> git clone https://source.toby3d.me/toby3d/home -b develop
> cd home && go run .
```
Базовая конфигурация движка осуществляется через переменные окружения ОС.
Доступны четыре опции:
* `HOME_CONTENT_DIR` -- имя или путь директории в которой содержатся страницы и статика, по-умолчанию `content/`;
* `HOME_HOST` -- IP-адрес на котором будет работать движок, по-умолчанию `0.0.0.0`;
* `HOME_THEME_DIR` -- имя или путь директории в которой содержатся файлы шаблонов, по-умолчанию `theme/`;
* `HOME_PORT` -- порт на котором будет работать движок, по-умолчанию `3000`;
Конфигурация сайта и его страниц полностью обеспечивается через FrontMatter в Markdown-файлах находящиеся в `$HOME_CONTENT_DIR`.
Чтобы назначить глобальные настройки сайту нужно создать `index.md` в `$HOME_CONTENT_DIR` и указать в нём следующее:
```markdown
---
# Известные параметры:
title: "ACME Inc" # Название сайта
baseUrl: "https://example.com/" # Префикс всех относительных URL
timeZone: "UTC" # Имя часового пояса
# Любые другие наборы ключей-значений будут восприниматься как второстепенные параметры и доступные через `.Site.Params`:
tokens:
mastodonApi: "asdbjhqwe..."
telegram: "bot1234..."
announcement: >
You got mail!
backlink: "https://mstdn.io/@toby3d"
...
---
```
## Использование
Страницы публикуются мгновенно через создание Markdown-файлов. Индексные файлы главной страницы и директорий называются `index.md` или `index.lang.md` где `lang` это двубуквенное обозначение языка локализации. Движок поддерживает работу с любым числом локализаций одних и тех же страниц: `index.ru.md`, `index.en.md`, `index.jp.md` и так далее.
Именованные страницы могут называться как угодно, имя будет использоваться в качестве slug из URL, например:
* `$HOME_CONTENT_DIR/folder/file.md`: `/folder/file`, `/folder/file/`, `/folder/file/index.html` и `/folder/file.html`;
* `$HOME_CONTENT_DIR/now/index.md`: `/now`, `/now/`, `/now/index.html` и `/now.html`;
* `$HOME_CONTENT_DIR/2023/11/09.md`: `/2023/11/09`, `/2023/11/09/`, `/2023/11/09/index.html` и `/2023/11/09.html`;
* и так далее;
Правила по локализациям здесь также применимы: `folder/file.ru.md` b `folder/file.en.md`, `now.jp.md`, `2023/11/09.de.md` и так далее.
Содержимое публикуемых страниц также соответствует формату FrontMatter:
```markdown
---
# Известные параметры:
title: "Hello, World!"
# Любые другие наборы ключей-значений будут восприниматься как второстепенные параметры и доступные через `.Page.Params`:
style:
accent: "#0a0a23"
icon: "👋🏻"
tags:
- example
- demo
- blog
contact: "hey@toby3d.me"
---
This is a sample page content for demo.
```
Статические файлы вроде изображений, видео, `robots.txt`, стилей, скриптов и чего-угодно ещё размещаются в `$HOME_CONTENT_DIR` как есть: в корень если они должны быть доступны глобально через `.Site.Files` и для домашних страниц, а также в нужных директориях со страницами для доступа к ним через `.Page.Files`. Формат и имена файлов ничем не ограничены.
Для рендера содержимого страниц в браузерах необходимы шаблоны, которые должны размещаться в `$HOME_THEME_DIR`. Для работы необходим хотя бы один шаблон с блоком `baseof` который будет вызываться для каждой страницы, например:
```html
<!-- theme/baseof.html -->
{{ define "baseof" }}
<!DOCTYPE html>
<html lang="{{ .Site.Language }}">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>{{ .Site.Title }}</title>
</head>
<body>
{{ block "body" . }}{{ .Page.Content }}{{ end }}
</body>
</html>
{{ end }}
```
Шаблонизация работает по [инструкциям стандартного шаблонизатора Go](https://pkg.go.dev/html/template) с небольшими дополнениями в виде дополнительных утилит. В `$HOME_THEME_DIR` разрешена любая комбинация и иеархия шаблонов и их взаимосвязей до тех пор, пока существует `baseof` в качестве единого родительского блока.
В качестве контекста в каждый шаблон пробрасываются две структуры: `.Site` с глобальными опциям из `$HOME_CONTENT_DIR/index.md` и текущая просматриваемая страница `.Page` с её опциями найденная в `$HOME_CONTENT_DIR`. Структуры данных в этих контекстах можно посмотреть в пакете [domains](../internal/domain), они используются в шаблонах как есть.