Перейти к основному содержимому

Работа с сайтами

Введение

С помощью функции Сайты (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). Установите свои правила безопасности в соответствии с вашими требованиями.


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