Почему FormIt не находит файловые шаблоны в MODX 3 и как это исправить
Почему FormIt не находит файловые шаблоны в MODX 3 и как это исправить
Проблема
При переходе на MODX 3 многие разработчики сталкиваются с ошибкой:
«Не могу найти указанный чанк "@FILE chunks/path/to/form.tpl" с формой»
Несмотря на то, что:
-
Файл существует и пути указаны верно,
-
Код работает в MODX Revolution 2.x,
-
Даже
{ include 'file:...' }отрабатывает корректно.
Почему так происходит?
-
В MODX 3 ужесточили политику доступа к файлам вне стандартных директорий (
assets/,core/). -
FormIt использует устаревший механизм загрузки
@FILE-шаблонов. -
Проблемы с относительными путями при AJAX-обработке.
Решение: Используем FetchIt
Пакет FetchIt — легкая замена FormIt для работы с файловыми шаблонами.
1. Установка FetchIt
-
Через «Управление пакетами» в MODX:
-
Extras → Установить → Поиск: "FetchIt" → Установить
Пример рабочего кода
Заменяем стандартный вызов FormIt:
$_modx->runSnippet('!FetchIt', [
'snippet' => 'FormIt', // Используем движок FormIt, но с FetchIt-обработкой
'form' => '@FILE chunks/baseParts/modal/tpls/formOrder_tpl.tpl',
'emailTpl' => '@FILE chunks/baseParts/modal/tpls/emailTpl_tpl.tpl',
'hooks' => 'recaptchav3,email',
'emailTo' => $_modx->getPlaceholder('+leadEmail'),
'validate' => 'name:required,phone:required'
]);
Вывод
Проблема с @FILE в MODX 3 — не ошибка, а особенность безопасности. FetchIt решает её без хаков и переписывания кода.