• Блог
  • ZoomX 2.1. Виртуальные страницы

В новой минорной версии исправлены некоторые недочёты и добавлена возможность отключать автоматическую загрузку ресурса. Вот список изменений:

  • Добавлена системная настройка «zoomx_autoload_resource», позволяющая отключать автоматическую загрузку ресурса по URI.
  • Исправлена ошибка, возникающая при работе в консольном режиме.
  • Возвращена поддержка GET параметра «q».

Системная настройка «zoomx_autoload_resource»

Логика работы MODX основана на ресурсах. Без них он работать не сможет (в отличие от тех же фреймворков). По сути они являются эндпойнтами. Даже если запрашиваемой страницы нет, то вас всё равно перекинут на существующую страницу ошибки (ну или на главную).

А что если вам понадобилась настоящая виртуальная страница? Теперь достаточно просто отключить автозагрузку в системной настройке и выводить только шаблон.

Информация!

Если отключить автозагрузку ресурса, то MODX не сможет определить, есть такая страница или нет. В этом случае вам придётся самостоятельно управлять логикой ошибки 404.

Внимание!

Важно знать, что такие страницы не будут отображаться в карте сайта, генерируемой с помощью стандартных дополнений MODX. Придётся добавлять их вручную.

Ошибка в консольном режиме

Тут всё банально просто — в консольном режиме не нужны парсеры и маршутизатор, поэтому и запускать их не нужно. У меня, например, отвалился крон скрипт, рассылающий почту.

Поддержка GET параметра «q»

На этот риф наскочил читатель моего блога Семён. Описание проблемы тут. А дело оказалось в том, что в MODX для ЧПУ запросов используют перенаправление и в GET параметр «q» записывают URI запроса.

// .htaccess
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Если честно, я не могу найти причин, для чего это сделано. Может они и есть, но надёжно скрыты от моего взора. На самом деле достаточно сделать перенаправление на index.php.

// .htaccess
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

Просто обычно работают с глобальной переменной $_SERVER, в которой хранятся и URI и параметры запроса. Тем более, что сейчас полно библиотек для работы с запросами. Если уж нет желания их использовать, то было бы полезно разобраться, как они работают.

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

1   247

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.