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

Генератор статических страниц

Pimcore предлагает сервис генерации статических страниц, который используется для создания HTML-страниц из документов Pimcore. Этот сервис-генератор использует документ Pimcore с содержимым и шаблонами и преобразует их в полноценную HTML-страницу, которая может быть загружена непосредственно с сервера без вмешательства механизма создания шаблонов.

Включение генератора статических страниц для документа

Чтобы включить автоматическую генерацию статических страниц при сохранении документа или с помощью команды CLI, перейдите в раздел Document -> Settings -> Satic Page Generator. настройки статических страниц

Установите флажок включить и задайте необязательный срок службы для статических страниц (который перегенерирует статическую страницу по истечении срока службы) и сохраните документ.

Как только генератор статических страниц будет включен, значок документа изменится на серый: Подробная информация о статической странице

и последняя сгенерированная информация отображается в настройках документа, когда генерация запрашивается из интерфейса или cli-команды. Подробная информация о статической странице

Кроме того, если вы используете локальное хранилище по умолчанию для статических страниц, убедитесь, что в .htaccess вашего проекта есть следующий раздел (после раздела # Thumbnails), который отвечает за поиск статической страницы перед передачей в механизм создания шаблонов.

# static pages  
SetEnvIf Request_URI ^(.*)$ STATIC_PAGE_URI=$1
SetEnvIf Request_URI / STATIC_PAGE_URI=/%home

RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
RewriteCond %{QUERY_STRING} !(pimcore_editmode=true|pimcore_preview|pimcore_version)
RewriteCond %{DOCUMENT_ROOT}/var/tmp/pages%{STATIC_PAGE_URI}.html -f
RewriteRule ^(.*)$ /var/tmp/pages%{STATIC_PAGE_URI}.html [PT,L]

Если вы используете NGINX в качестве веб-сервера, это должно быть добавлено перед блоком server

map $args $static_page_root {  
default /var/tmp/pages;
"~*(^|&)pimcore_editmode=true(&|$)" /var/nonexistent;
"~*(^|&)pimcore_preview=true(&|$)" /var/nonexistent;
"~*(^|&)pimcore_version=[^&]+(&|$)" /var/nonexistent;
}

map $uri $static_page_uri {
default $uri;
"/" /%home;
}

и в блок местоположения, соответствующий всем запросам, необходимо внести следующие изменения

server {  
...

location / {
error_page 404 /meta/404;
try_files $static_page_root$static_page_uri.html $uri /index.php$is_args$args;
}

...
}

Обработка

Как только опция статического генератора включена, Pimcore генерирует статические страницы при выполнении следующих действий:

  • Первый запрос на страницу после обновления и сохранения документа в admin.
  • Задание на обслуживание (maintenance)
  • Команда CLI

В фоновом режиме maintenance job регулярно генерирует статические страницы для документов. Однако вы также можете использовать команду CLI для создания статических страниц по требованию: php bin/console pimcore:documents:generate-static-pages

кроме того, вы можете отфильтровать документы по родительскому пути, который должен быть обработан для статической генерации: php bin/console pimcore:documents:generate-static-pages -p /en/Magazine

SSI

Если вы хотите добавить SSI-модуль NGINX для генерации статических страниц, вы можете добавить следующую конфигурацию:

pimcore:  
document:
static_page_generator:
headers:
- { name: "Surrogate-Capability", value: 'device="SSI/1.0"' }

Теперь команда обслуживания может генерировать SSI-файлы в статических файлах, как при обычной загрузке страницы.

Хранение

По умолчанию Pimcore сохраняет сгенерированные HTML-страницы по локальному пути: 'document_root/public/var/tmp/pages'.

Можно настроить путь к локальному хранилищу для статических страниц, определив конфигурацию Flysystem в файле config.yaml:

flysystem:  
storages:
pimcore.document_static.storage:
# Storage for generated static document pages, e.g. .html files generated out of Pimcore documents
# which are then delivered directly by the web-server
adapter: 'local'
visibility: public
options:
directory: '%kernel.project_dir%/public/var/tmp/pages'

Маршрутизатор генерации статических страниц

В случае, если вы используете пользовательское удаленное хранилище для статических страниц и вам необходимо обслуживать страницы из этого удаленного хранилища, вам необходимо включить маршрутизатор статических страниц со следующей конфигурацией в config.yaml:

pimcore:  
documents:
static_page_router:
enabled: true
route_pattern: '@^/(en/Magazine|de/Magazin)@'

конфигурацияОписание
enabledУстановите значение true, чтобы включить маршрутизатор статических страниц
route_patternРегулярное выражение для подбора маршрутов для статического отображения страницы

Используйте статические HTML-файлы страниц с указанием mainDomain вместо path

Включите опцию основного домена (mainDomain), чтобы получать статические страницы с начальным основным доменом вместо ключей из документов Pimcore.

pimcore:  
documents:
static_page_generator:
use_main_domain: true

конфигурацияОписание
use_main_domainИспользуйте путь tmp следующим образом /public/var/tmp/pages/my-domain.com/en.html

Изменения в конфигурации NGINX:

map $args $static_page_root {  
default /var/tmp/pages/$host;
"~*(^|&)pimcore_editmode=true(&|$)" /var/nonexistent;
"~*(^|&)pimcore_preview=true(&|$)" /var/nonexistent;
"~*(^|&)pimcore_version=[^&]+(&|$)" /var/nonexistent;
}

map $uri $static_page_uri {
default $uri;
"/" /%home;
}

Генерация статической страницы с помощью Ajax-запроса

Статические страницы с XMLHttpRequest извлекают данные и отображают их на странице, как на стандартной странице документа. Однако, если вы используете Fetch API для запроса данных, необходимо добавить заголовок XMLHttpRequest, как показано ниже, в противном случае подзапрос заменит содержимое сгенерированной статической страницы.

fetch('/test/page', {  
headers: {
'X-Requested-With': 'XMLHttpRequest',
}
})


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