Проверка переменных MODX Revo Fenom

Проверка переменных MODX Revo Fenom

Проверка переменных в MODX Revolution через Fenom: Полное руководство с примерами

Работа с переменными — основа любого шаблонизатора. В MODX Revolution Fenom предлагает мощные инструменты для их проверки, но новички часто сталкиваются с нюансами синтаксиса. В этой статье мы разберём все способы валидации данных: от базовых проверок до продвинутых приёмов.

Зачем это нужно?

Представьте: вы выводите список товаров, но некоторые позиции временно отсутствуют. Без правильных проверок на пустые значения вместо аккуратного «Нет в наличии» пользователи увидят ошибки или пустые блоки. Грамотная обработка переменных:

  • Предотвращает ошибки в шаблонах
  • Защищает от неожиданного поведения
  • Делает код предсказуемым
Важно: 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% типовых ошибок в шаблонах
  • Писать более читаемый и поддерживаемый код

Главное правило — выбирать проверки соответственно контексту. Для большинства случаев хватит оператора ?, а сложные сценарии требуют комбинации методов.

Связаться с нами

Здесь вы можете написать свои вопросы или оставить заявку