Настройка мультисайтовости Statamic
Statamic Pro поддерживает несколько сайтов из одной инсталляции с разными доменами, языками и наборами контента. Контент может быть общим для всех сайтов или уникальным для каждого.
Настройка сайтов
// config/statamic/sites.php
return [
'sites' => [
'default' => [
'name' => 'My Site RU',
'locale' => 'ru_RU',
'url' => env('APP_URL', '/'),
'direction' => 'ltr',
'attributes' => ['lang' => 'ru'],
],
'english' => [
'name' => 'My Site EN',
'locale' => 'en_US',
'url' => env('SITE_EN_URL', 'https://mysite.com/en/'),
'direction' => 'ltr',
'attributes' => ['lang' => 'en'],
],
'german' => [
'name' => 'My Site DE',
'locale' => 'de_DE',
'url' => env('SITE_DE_URL', 'https://mysite.com/de/'),
],
],
];
Локализация Collections
# content/collections/blog.yaml
sites:
- default
- english
- german
Локализованные записи хранятся в папках по handle сайта:
content/collections/blog/
├── default/
│ └── my-post.md # русская версия
├── english/
│ └── my-post.md # английская версия
└── german/
└── my-post.md # немецкая версия
Если локализованная версия не создана — Statamic показывает fallback на основной сайт.
Глобалы с локализацией
# content/globals/site.yaml (default)
title: Мой сайт
phone: +7 999 123-45-67
footer_text: © 2024 Мой сайт
# content/globals/site/english.yaml (override для en)
title: My Site
phone: +44 20 1234 5678
footer_text: © 2024 My Site
Переключатель языков в Antlers
{{# Список версий текущей страницы #}}
{{ if entry }}
{{ collection:sites }}
{{ if sites_enabled }}
{{ foreach:localizations as="locale => localized_entry" }}
{{ if localized_entry }}
<a href="{{ localized_entry:url }}"
lang="{{ locale }}"
{{ if locale == {current_site:handle} }}aria-current="page"{{ /if }}>
{{ site:name }}
</a>
{{ /if }}
{{ /foreach:localizations }}
{{ /if }}
{{ /collection:sites }}
{{ /if }}
Упрощённый вариант через хелпер:
{{ locales }}
<a href="{{ url }}" lang="{{ locale }}" {{ if is_current }}aria-current="page"{{ /if }}>
{{ name }}
</a>
{{ /locales }}
PHP-запросы с учётом сайта
use Statamic\Facades\Entry;
use Statamic\Facades\Site;
// Записи текущего сайта
$posts = Entry::query()
->where('collection', 'blog')
->where('site', Site::current()->handle())
->get();
// Записи конкретного сайта
$enPosts = Entry::query()
->where('collection', 'blog')
->where('site', 'english')
->get();
SEO: hreflang теги
{{# В <head> layout #}}
{{ if entry }}
{{ locales }}
<link rel="alternate"
hreflang="{{ locale }}"
href="{{ url }}">
{{ /locales }}
<link rel="alternate" hreflang="x-default" href="{{ entry:url }}">
{{ /if }}
Настройка мультисайта с 2–3 языками — 1–2 дня.







