🛠️ Хелперы
Хелперы — это глобальные функции, которые облегчают доступ к ключевым компонентам фреймворка. Они являются обёртками над основными классами и методами, часто используемыми при разработке.
⚙️ modx()
Возвращает глобальный экземпляр modX.
$modx = modx();🧾 query(?string $table = null)
Открывает конструктор запросов по таблице. Имя пишется без префикса — его подставит соединение. Без аргумента возвращает само соединение.
query('site_content')->where('template', 4)->get();
query(); // Illuminate\Database\MySqlConnection🧱 model(string $name)
Открывает запрос по модели Eloquent из PageBlocks\App\Models\. В отличие от query(), строки возвращаются моделями — со связями, кастами и скоупами.
model('PbResource')->published()->limit(10)->get();⚙️ config(string $key, $default = null)
Получает значение из конфигурации.
$debug = config('app.debug', false);
// или
Config::get('app.debug', false)
?? $modx->getOption('app.debug', null, false);📁 Конфигурации хранятся в папке: core/App/config/
📥 request(string $key = '')
Возвращает текущий HTTP-запрос или конкретное значение.
$request = request(); // $request = Request::getInstance()
$name = request('name'); // $request->get('name');
request()->validate([...]); // $request->validate([...]);🌐 uri()
Возвращает текущий URI без расширений и ведущих/замыкающих слэшей.
$uri = uri();
// например: /about.html → "about"
// /blog/post/ → "blog/post"🏷️ alias()
Возвращает текущий алиас страницы (последнюю часть URI).
$alias = alias();
// например: /blog/post → "post"
// /about → "about"💾 cache(string $key, $value = null, int $ttl = 3600)
Получение или установка значения в кэше.
$data = cache('menu'); // $data = Cache::get('menu')
cache('menu', $items, 600); // Cache::set('menu', $items, 600)📤 response($content = '', int $status = 200, array $headers = [])
Создаёт и возвращает HTTP-ответ.
$response = response(); // $response = new Response();
return response('OK'); // $response->text('OK')
return response(['status' => 'ok'], 200); // $response->json([...])📌 Тип ответа определяется автоматически: text, json или object.
✅ validate(array $data, array $rules, array $messages = [])
Запускает валидацию данных.
$validator = validate(
['email' => 'john@example.com'],
['email' => 'required|email']
);
// или
$validator = Validator::make($data, $rules, $messages);🖼️ view(string $template, array $params = [])
Рендерит шаблон с параметрами.
$html = view('components.card', ['title' => 'Dashboard']);
// или
$html = View::make('components.card', ['title' => 'Dashboard']);🔁 redirect(...$args)
Создаёт редирект.
$redirect = redirect(); // $redirect = Redirect::getInstance();
redirect('/login'); // $redirect->to('/login');
redirect()->back(); // $redirect->back();🧭 route(string $name, array $params = [])
Генерация ссылки по имени маршрута.
$url = route('post.show', ['id' => 10]);
// или
Route::route('post.show', ['id' => 10])🌍 lang(string $key, array $replace = [], string $locale = '')
Получение перевода строки.
lang('messages.welcome');
// or
Lang::get('messages.welcome');📁 Переводы хранятся в папке: core/App/lang/{locale}/
🔐 auth(string $context = '')
Проверка авторизации пользователя в заданном (или текущем) контексте.
if (auth()) {
echo 'Вы авторизованы';
}
if (auth('mgr')) {
echo 'Вы авторизованы в контексте "mgr"';
}🔁 То же самое, что:
$modx->user && $modx->user->isAuthenticated($context ?: $modx->context->key);❌ abort(int $code = 404, string $text = '')
Останавливает выполнение и возвращает HTTP-ошибку.
abort(403, 'Доступ запрещён');
// или
response()->abort(403, 'Доступ запрещён')->send();📄 console($message, $array = [])
Запись в лог MODX. Второй аргумент печатается через print_r — удобно для массива.
console('Заказ не прошёл', $payload);⚠️ dd($message, $array = [])
Не то, что вы подумали. Это не «dump and die» из Laravel: страница не останавливается и на экран ничего не выводится. Функция полностью совпадает с console() — пишет в лог и идёт дальше.
dd('сюда дошли', $data); // окажется в core/cache/logs/error.log🌍 Языки
| Функция | Что возвращает |
|---|---|
language() | Текущий язык целиком или null |
languages() | Все активные языки |
langs() | Готовый набор для переключателя языков |
lang_url(string $uri = '') | Адрес с префиксом текущего языка |
multilingual() | Включена ли многоязычность |
context() | Ключ языка, а если его нет — контекст по умолчанию |
{if multilingual()}
{foreach langs() as $item}
<a href="{$item.url}">{$item.name}</a>
{/foreach}
{/if}🔀 route_path(string $name, array $parameters = [])
Собирает адрес именованного маршрута — чтобы не набирать его руками и не искать все вхождения, когда маршрут переедет.
route_path('cargo.show', ['id' => 42]);👤 profile()
Профиль текущего пользователя массивом. Гостю возвращает пустой массив, результат запоминается на время запроса.
Почему не $modx->user
В самой строке пользователя MODX почти ничего нет: email, fullname и расширенные поля живут в профиле. profile() избавляет от $user->getOne('Profile') при каждом обращении.
🛡️ csrf()
Готовое скрытое поле с токеном — вставляется в форму.
<form method="post">
{csrf()}
</form>🧾 lexicon($key, $namespace = '')
Строка из лексикона MODX. С namespace он подгружается сам.
lexicon('pb_blocks', 'pageblocks');🔢 plural_form($number, array $forms)
Согласование числа со словом. Три формы — для русского, две — для английского.
plural_form(5, ['товар', 'товара', 'товаров']); // товаров
plural_form(2, ['item', 'items']); // items🏳️ Режим площадки
| Функция | Что делает |
|---|---|
site_mode() | dev или prod |
is_dev(), is_prod() | То же самое, но условием |
Режим берётся из настройки pageblocks_site_mode; всё, кроме dev, читается как prod.
📚 Списки объектов
| Функция | Что отдаёт |
|---|---|
resources($ids = null, array $options = []) | Ресурсы MODX из site_content |
pbresources($ids = null, array $options = []) | Свои ресурсы из pb_resources |
users($ids = null, array $options = []) | Пользователи |
Те же самые списки доступны в шаблоне модификаторами — см. View.
🌐 http_post(string $url, $data = null, array $headers = [], int $timeout = 10)
POST-запрос наружу, без подключения curl руками. Возвращает массив с ответом.
http_post('https://api.example.com/hook', ['id' => 42], ['Authorization: Bearer …']);🕒 now(string $timezone = null)
Текущий момент как Carbon — со всей его арифметикой дат.
now()->addDays(7)->toDateTimeString();