Skip to content

Настройка ​

Что задать после установки, а что работает и без вас.

Маршрутизация ​

Одна настройка решает, сколько запроса берёт на себя PageBlocks:

pageblocks_routingЧто происходит
Disabled (off)Компонент не трогает маршрутизацию. Все адреса разбирает MODX.
Route Only (routes)Ваши маршруты проверяются, всё несовпавшее уходит в MODX.
Full API (full)Запрос принадлежит PageBlocks.

По умолчанию full. Раньше было off, и чистая установка получала мёртвую админку: пункт меню модерации и виджет дашборда дёргают /mgr/pb/*, а при выключенной маршрутизации таких маршрутов нет.

У остальных настроек рабочие значения по умолчанию, полный список — в Системных настройках.

Сервер ​

  • Apache — переименуйте ht.access в .htaccess
  • Nginx — пропишите правила переписывания: nginx .htaccess не читает

Без этого всё, кроме главной, отдаёт 404: веб-сервер ищет каталог, которого нет, вместо того чтобы отдать адрес в index.php.

Страницы работают сразу ​

В прикладном слое уже лежат два маршрута для обычных ресурсов MODX, core/App/routes/web.php:

php
<?php

use Boshnik\PageBlocks\Facades\Route;

Route::get('/{context}/{alias?}', 'ResourceController@context')->where('context', '[a-z]{2}');
Route::fallback('ResourceController@index');

Первый — многоязычный случай: двухбуквенный префикс считается языком, остальное алиасом. Поэтому адрес вида /en/about начинает работать сразу, как только появился второй язык, и добавлять маршрут не нужно. См. Языки.

Второй открывает любой остальной ресурс. Это именно fallback, а не паттерн вида /{alias?}, и намеренно: ресурсы MODX вкладываются на любую глубину, а ResourceController и так определяет нужный по самому URI, — паттерн задал бы искусственный предел вложенности, и при routing = full страница /catalog/phones отвечала бы 404.

ResourceController находит ресурс, подбирает его шаблон и рендерит страницу. Больше ничего, чтобы обслуживать обычный сайт, не требуется.

Эти маршруты в слое сайта, то есть ваши

core/App/routes/ принадлежит сайту, а не компоненту — обновление его не перезапишет. Переопределяйте любой из двух или удаляйте оба и забирайте запрос себе целиком.

Файлы маршрутов читаются по алфавиту ​

Всё из core/App/routes/ подхватывается глобом и сортируется по имени файла. Файлы, чьё имя начинается с _, пропускаются — так файл маршрутов откладывают, не удаляя.

Очерёдность решает, какой из двух пересекающихся паттернов выиграет, поэтому называйте файл по разделу — product.php, catalog.php — и он проверится раньше тех, что сортируются позже. web.php в этой гонке не участвует: его перехватчик — это Route::fallback(), а он пробуется только после того, как промахнулись все зарегистрированные паттерны, в каком порядке ни читай файлы.

© PageBlocks 2019-present