Проверка переменных в MODX Revolution через Fenom: Полное руководство с примерами
Работа с переменными — основа любого шаблонизатора. В MODX Revolution Fenom предлагает мощные инструменты для их проверки, но новички часто сталкиваются с нюансами синтаксиса. В этой статье мы разберём все способы валидации данных: от базовых проверок до продвинутых приёмов.
Зачем это нужно?
Представьте: вы выводите список товаров, но некоторые позиции временно отсутствуют. Без правильных проверок на пустые значения вместо аккуратного «Нет в наличии» пользователи увидят ошибки или пустые блоки. Грамотная обработка переменных:
- Предотвращает ошибки в шаблонах
- Защищает от неожиданного поведения
- Делает код предсказуемым
empty
иначе, чем PHP. Например, строка "0" считается НЕ пустой в Fenom, но пустой в PHP.1. Универсальная проверка на заполненность
Оператор ?
— ваш главный инструмент. Он проверяет существование переменной + непустое значение:
{* Пример для вывода заголовка с проверкой *}
<h1>{if $pagetitle?}{$pagetitle}{else}Без названия{/if}</h1>
{* Проверка перед выводом галереи *}
{if $gallery?}
<div class="gallery">{...}</div>
{/if}
Что считается «пустым»: null, пустая строка "", массив без элементов.
2. Проверка существования без учёта значения
Оператор !
нужен, когда важно само наличие переменной, даже с пустым значением:
{* Логирование для отладки *}
{if $debug_mode!}
<script>console.log({$some_data|json_encode})</script>
{/if}
3. Явная проверка на пустоту
Используйте is empty
, когда нужно явно указать на отсутствие данных:
{* Показываем предупреждение для пустых полей *}
{if $description is empty}
<div class="alert">Описание отсутствует</div>
{/if}
4. Проверка типа данных: выходим за рамки строк
Fenom позволяет проверять структуру данных через is
:
{* Обработка JSON-данных *}
{if $response is array}
{foreach $response as $item}
...
{* Проверка числового ID *}
{if $id is int}
<input type="hidden" value="{$id}">
{* Валидация булевых флагов *}
{if $is_active is bool}
Статус: {$is_active ? 'Активен' : 'Не активен'}
Доступные проверки: array, string, int, float, bool, numeric, object, scalar.
5. Тернарный оператор: лаконичные условия
Сокращайте код через ?:
для подстановки значений по умолчанию:
<meta name="description" content="{$seo_desc ?: 'Стандартное описание сайта'}">
<img src="{$image ?: 'assets/images/no-photo.jpg'}" alt="{$title}">
Ловушки и лучшие практики
{if $var! && $var?} {...} {/if} ❌ Избыточно
{if $var?} {...} {/if} ✅ Достаточно
Советы от разработчиков:
- Используйте
??
для строгой проверки на null:{$var ?? 'fallback'}
- Для чисел проверяйте тип:
{if $price is int}
- Не проверяйте через
==
/===
— Fenom оптимизирован для своих операторов
Продвинутый пример: многоуровневая проверка
{if $product?}
<div class="product">
{if $product.title?}
<h2>{$product.title}</h2>
{else}
<h2 class="error">Название не указано</h2>
{/if}
{if $product.images is array && $product.images|length > 0}
<div class="gallery">...</div>
{/if}
</div>
{else}
<p>Товар не найден</p>
{/if}
Итоги
Освоив эти методы, вы сможете:
- Точно контролировать вывод данных
- Избежать 90% типовых ошибок в шаблонах
- Писать более читаемый и поддерживаемый код
Главное правило — выбирать проверки соответственно контексту. Для большинства случаев хватит оператора ?
, а сложные сценарии требуют комбинации методов.