Fenom в MODX (шпаргалки)

01 Juli 2018, 13:13

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')}
MODX.ONE
0    9309    0
0

Comments ()

    You need to login to create comments.