Работа с сайтами
Введение
С помощью функции Сайты (Sites) в Pimcore можно создавать многодоменные веб‑приложения. Отправной точкой всегда является определённый узел в дереве документов. Начиная с этой отправной точки, весь поддерево может рассматриваться как отдельный сайт и быть доступным по определённому домену.
Конфигурация сайтов
Вы можете очень просто создавать подсайты в Pimcore непосредственно через контекстное меню дерева документов:

И на этом, в сущности, всё.
Примечание: конечно, настройка вашего сервера (VHost, ServerAlias) должна быть выполнена корректно, чтобы все запросы для всех доменов перенаправлялись на Pimcore.
Теперь также маршрутизации пользовательских маршрутов и перенаправлений можно настраивать отдельно для каждого сайта. Кроме того, многие другие инструменты и функции Pimcore, такие как Glossary, управление тегами и сниппетами (Tag & Snippet Management), настройки маркетинга (Google Analytics, Google Search Console, Google Tag Manager) и настройки веб‑сайта являются специфичными для сайта.
Сайты в вашем коде
Проверка, находится ли текущий запрос внутри подсайта
if(\Pimcore\Model\Site::isSiteRequest()) { /* ... */ }
{% if pimcore_site_is_request() %}
{# ... #}
{% endif %}
Работа с помощником навигации
Подробнее см. Навигация.
Получение полного пути документа в контексте запроса подсайта
$document->getRealFullpath(); // возвращает путь, включая корень сайта
$document->getFullPath(); // возвращает путь относительно корня сайта
document.getRealFullpath() {# возвращает путь, включая корень сайта #}
document->getFullPath() {# возвращает путь относительно корня сайта #}
Получение корневого документа текущего сайта
if (\Pimcore\Model\Site::isSiteRequest()) {
$site = \Pimcore\Model\Site::getCurrentSite();
$navStartNode = $site->getRootDocument();
} else {
$navStartNode = \Pimcore\Model\Document::getById(1);
}
{% if pimcore_site_is_request() %}
{% set site = pimcore_site_current() %}
{% set navStartNode = site.getRootDocument() %}
{% else %}
{% set navStartNode = pimcore_document(1) %}
{% endif %}
Некоторые другие инструменты
Функциональность должна быть достаточно понятной:
\Pimcore\Tool\Frontend::getSiteForDocument($document);
\Pimcore\Tool\Frontend::isDocumentInCurrentSite($document);
\Pimcore\Tool\Frontend::isDocumentInSite($site, $document);
Предпросмотр документа с учётом сайтов
Имейте в виду, что при предпросмотре документов, содержащих ссылки на разные сайты, навигация может работать некорректно из‑за политик безопасности содержимого в iframe (Content Security Policies) и политики совместного использования ресурсов между источниками (CORS). Установите свои правила безопасности в соответствии с вашими требованиями.
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.