Настройка мультисайтовости Craft CMS

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка мультисайтовости Craft CMS
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка мультисайтовости Craft CMS

Craft CMS поддерживает несколько сайтов из одной инсталляции: разные домены, языки, регионы. Контент может быть уникальным для каждого сайта или синхронизироваться между ними.

Архитектура мультисайта

Инсталляция Craft
├── Site Group: Main
│   ├── Site: mysite.ru (ru-RU) — основной
│   ├── Site: mysite.com (en-US)
│   └── Site: mysite.de (de-DE)
└── Site Group: Microsite
    └── Site: promo.mysite.ru (ru-RU)

Настройка через CP или Project Config

# config/project/sites/mysite-ru.yaml
name: 'My Site RU'
handle: mySiteRu
language: ru-RU
primary: true
enabled: true
hasUrls: true
baseUrl: 'https://mysite.ru/'

Nginx конфигурация для нескольких доменов на одну инсталляцию:

# Оба домена указывают на один document root
server {
  server_name mysite.ru mysite.com mysite.de;
  root /var/www/mysite/web;
  # ...стандартный Craft Nginx конфиг...
}

Управление контентом по сайтам

propagationMethod в Section определяет, как контент распространяется:

  • all — запись создаётся для всех сайтов автоматически
  • none — только для сайта, где создана
  • siteGroup — для сайтов из той же группы
  • language — для сайтов с тем же языком
# config/project/sections/blog.yaml
propagationMethod: all
siteSettings:
  mySiteRu:
    hasUrls: true
    uriFormat: 'blog/{slug}'
    template: blog/_entry
  mySiteEn:
    hasUrls: true
    uriFormat: 'en/blog/{slug}'
    template: blog/_entry
  mySiteDe:
    hasUrls: true
    uriFormat: 'de/blog/{slug}'
    template: blog/_entry

Поля с разной локализацией

Field "title": translationMethod = site (свой заголовок для каждого сайта)
Field "publishDate": translationMethod = none (одна дата)
Field "heroImage": translationMethod = none (общее изображение)
Field "body": translationMethod = site (уникальный текст)
Field "slug": translationMethod = site (slug на языке сайта)

Переключатель языков в шаблоне

{# Список всех версий текущей страницы #}
<nav class="language-switcher">
  {% for site in craft.app.sites.getAllSites() %}
    {% set localeEntry = entry.getLocalized().site(site).one() %}
    {% if localeEntry %}
      <a href="{{ localeEntry.url }}"
         lang="{{ site.language | slice(0, 2) }}"
         {% if site.id == currentSite.id %}aria-current="page"{% endif %}>
        {{ site.language | upper | slice(0, 2) }}
      </a>
    {% endif %}
  {% endfor %}
</nav>

Запросы с учётом сайта

{# Контент текущего сайта (автоматически) #}
{% set posts = craft.entries().section('blog').all() %}

{# Явное указание сайта #}
{% set enPosts = craft.entries().section('blog').site('mySiteEn').all() %}

{# Через PHP в модуле #}
$entries = Entry::find()
  ->section('blog')
  ->site(\Craft::$app->sites->getSiteByHandle('mySiteRu'))
  ->all();

Переводы интерфейса

// translations/ru/site.php
return [
  'Read more' => 'Читать далее',
  'Published on {date}' => 'Опубликовано {date}',
];

В Twig:

{{ "Read more" | t('site') }}
{{ "Published on {date}" | t('site', { date: entry.postDate | date('d.m.Y') }) }}

Настройка мультисайта с 2–3 языками для существующего проекта — 2–4 дня.