Fenom — это быстрый и удобный шаблонизатор, который очень схож со Smarty (в плане синтаксиса), но является намного лучше! С его помощью Вы можете ускорить разработку, время на выполнение запросов, сократить количество чанков, использовать циклы прям в чанках/шаблонах и многое другое.
В MODX шаблонизатор Fenom появился в 2015 году, с выходом обновления pdoTools 2.0. Теперь когда вы устанавливается pdoTools, парсер Fenom уже активен, но не обрабатывает страницы и шаблоны сайта.
Для того, чтобы включить fenom (обработку страниц и шаблонов сайта), необходимо активировать параметр pdotools_fenom_parser в системных настройках.
Синтаксис
Можете посмотреть официальную документацию, а я буду рассматривать синтаксис, касательно MODX Revolution.
Итак, как я уже говорил, синтаксис довольно прост, вместо привычных двойных квадратных скобок в MODX [[ ]]
и Fenom используются одинарные фигурные скобки { }
.
Чтобы использовать более сложные функции, в pdoParser есть служебная переменная {$_modx}
, которая даёт безопасный доступ к некоторым переменным и методам системы.
{$_modx->resource.id}
- вывод id текущего ресурса{$_modx->resource.tv_name}
- вывод tv текущего ресурса{$_modx->user}
- массив текущего пользователя{$_modx->makeUrl(10)}
- ссылка на 10 ресурс{$_modx->config.system_setting}
- вывод системной настройки
Игнорирование кода
Так как в Fenom используются фигурные скобки, то возможно возникнет такая проблема, что не будут выполняться какие-то скрипты/стили.
Для этих случаев существует переменная ignore. Для того, чтобы выключить обработку Fenom необходимо просто обернуть скрипты/стили в этот тег:
<style>
{ignore}
body {font-size: 16px; background-color: #000;}
{/ignore}
</style>
Плейсхолдеры с точкой или тире
В MODX как вы знаете существуют TV параметры у ресурса или плейсхолдеры с точкой (данные массивов). Так как они не соответсвуют правилам наименования, то в Fenom для доступа к плейсхолдерам и TV существуют служебная переменная {$_pls}
.
<!-- Вывод сразу -->
{$_pls['tag.subtag']}
<!-- Или через переменную -->
{var $tv_name = $_pls['tv-name']}
{$tv_name}
Как запустить сниппет в Fenom?
Я знаю два способа, как запустить сниппет в Fenom, какой использовать, решать только Вам.
1 способ:
{'!pdoPage' | snippet : [
'parents' => $_modx->resource.id,
'limit' => 5,
'toPlaceholder' => 'result'
]}
{$_modx->getPlaceholder('result')}
{$_modx->getPlaceholder('page.total')}
{$_modx->getPlaceholder('page.nav')}
2 способ:
{$_modx->runSnippet('!pdoPage', [
'parents' => $_modx->resource.id,
'limit' => 5,
'toPlaceholder' => 'result'
])}
{$_modx->getPlaceholder('result')}
{$_modx->getPlaceholder('page.total')}
{$_modx->getPlaceholder('page.nav')}
Если необходимо вызвать pdopage без параметров:
#1 способ
{'!pdoPage' | snippet}
#2 способ
{$_modx->runSnippet('!pdoPage')}
Примеры использования Fenom MODX:
Условие IF
#Устанавливаем id текущей страницы в переменную
{set $id = $_modx->resource.id}
#Условие
{if $id == '1'}
<p>Главная страница</p>
{else}
<p>Не главная</p>
{/if>
Условие IF с использованием тренарного оператора
#Устанавливаем id текущей страницы в переменную
{set $id = $_modx->resource.id}
#Условие
{$id == '1' ? '<p>Главная страница</p>' : '<p>Не главная</p>'}
Вывод чанка
{include 'myChank'}
Получение значения TV у произвольного ресурса:
{1 | resource: 'tv_name'}
*1 - id ресурса
Вывод MIGX через Fenom для текущего ресурса:
{set $rows = json_decode($_modx->resource.tv_images, true)}
{foreach $rows as $row}
{$row.image}
{/foreach}
Информация о прозводителе в miniShop2
{$_modx->makeUrl($_pls['vendor.resource'])}
{$_pls['vendor.name']})
{$_modx->getPlaceholder('vendor.name')}
Получение изображения через переменную с точкой {$_pls}
{$_pls["tv.img"] | phpthumbon : "w=300&h=200&zc=1"}
//Без префикса
{$img | phpthumbon : "w=300&h=200&zc=1"}
Получение превью изображений в корзине
{if $product['120x90']?}
<img src="{$product['120x90']}" alt="{$product.pagetitle}" title="{$product.pagetitle}"/>
{else}
<img src="{'assets_url' | option}components/minishop2//web/ms2_small.png"
srcset="{'assets_url' | option}components/minishop2/img/web/[email protected] 2x"
alt="{$product.pagetitle}" title="{$product.pagetitle}"/>
{/if}
Модификатор дата
{$_modx->resource.publishedon | date_format:"%d-%m-%Y %H:%M:%S"}
Вывысти текущий год
{'' | date : 'Y'}
Проверка авторизации
{$_modx->isAuthenticated()}
{$_modx->hasSessionContext('web')}
{$_modx->hasPermission('load')}
Комментарии ()