Modx + Fenom. Шпаргалки

29.11.2019 1 Comments Просмотры: 13 Теги: Fenom, Example, MODX

Fenomэто легковесный, быстрый и гибкий шаблонизатор, который очень схож со Smarty (в плане синтаксиса), но является намного лучше! С его помощью Вы можете ускорить разработку,
время на выполнение запросов, сократить количество чанков, использовать циклы прям в чанках/шаблонах и многое другое

В MODX Fenom появился в 2015 году, с выходом обновления pdoTools 2.0.
Теперь когда вы устанавливается pdoTools, парсер Fenom уже активен, но не обрабатывает страницы и шаблоны сайта

Для того, чтобы включить fenom (обработку страниц и шаблонов сайта), необходимо активировать параметр pdotools_fenom_parser в системных настройках.

На обработку шаблонизатором влияют следующие системные настройки:

  • pdotools_fenom_default - включает обработку через Fenom чанков pdoTools. Включено по умолчанию.
  • pdotools_fenom_parser - включает обработку шаблонизатором всех страниц сайта. То есть, не только чанков, но и шаблонов.
  • pdotools_fenom_php - включает поддержку PHP функций в шаблонизаторе. Очень опасная функция, так как любой менеджер получит доступ к PHP прямо из чанка.
  • pdotools_fenom_modx - добавляет системные переменные {$modx} и {$pdoTools} в шаблоны Fenom. Тоже очень опасно - любой менеджер может управлять объектами MODX из чанков.
  • pdotools_fenom_options - JSON строка с массивом настроек согласно официальной документации. Например:
    {"auto_escape":true,"force_include":true}
  • pdotools_fenom_cache - кэширование скопмилированных шаблонов. Имеет смысл только для сложных чанков на рабочих сайтах, по умолчанию отключено.

Запуск сниппета

#1 способ

{'!pdoPage' | snippet : [
    'parents' => $_modx->resource.id, 
    'limit' => 5,
    'toPlaceholder' => 'result'
]}

#2 способ

{$_modx->runSnippet('!pdoPage', [
    'parents' => $_modx->resource.id, 
    'limit' => 5,
    'toPlaceholder' => 'result'
])}

Сниппет без параметров

#1 способ
{'!pdoPage' | snippet}

#2 способ
{$_modx->runSnippet('!pdoPage')}

Сниппет — модификатор

{$id | SnippetName}

Плейсхолдоры

{$_modx->getPlaceholder('result')}

{$_modx->getPlaceholder('page.total')}

{$_modx->getPlaceholder('page.nav')}

#ИЛИ

{'page.nav' | placeholder}

Модификаторы

{"test"|upper} //выведет «TEST"
{"TEST"|lower} //выведет "test"
{$content | jevix}
{$content | ellipsis : "100"} //Обрезка текста 100 символов, потом …

 

declension (decl) - склоняет слово, следующее за числом по правилам русского языка. Например: 1 яблоко, 2 яблока, 10 яблок. Вторым параметром указывается выводить ли само число, по умолчанию выводится только подходящий вариант слова. Разделитель вариантов можно задавать третьим параметром, по умолчанию |.

{6 | declension : 'яблоко|яблока|яблок'} // яблок
{3 | declension : 'яблоко|яблока|яблок' : true} // 3 яблока
{101 | decl : 'яблоко,яблока,яблок' : false : ','} // яблоко

 


Условие IF

#Устанавливаем id текущей страницы в переменную
{set $id = $_modx->resource.id}
#Условие
{if $id == '1'}
<p>Главная страница</p>
{else}
<p>Не главная</p>
{/if}

IF с тренарным оператором

#Устанавливаем id текущей страницы в переменную
{set $longtitle = $_modx->resource.longtitle}
#Условие
{$_modx->resource.id =='1' ? '<p>Главная страница </p>' : '<p>Не главная</p>'}
{$longtitle ?: $pagetitle}{*Если лонг пустой, то дефолтный тайтл*}

Вывод чанка

{include 'ChankName'}

Передача переменных в чанк

{include 'ChankName' class="col-md-12"}

Вызов в чанке — $class


Расширение шаблонов

Обычный чанк {include 'имя чанка'}
Шаблон modTemplate {include 'template:имя шаблона'}
Чанк с набором параметров
{include '[email protected]'}
{include 'template:[email protected]'}
{extends 'template:Fenom Base'}

{block 'content'} 

{/block }

Получение значения полей

{"1" | resource: 'TVname'}
  • {$_modx->resource.id} - вывод id текущего ресурса
  • {$_modx->resource.tv_name} - вывод tv текущего ресурса
  • {$_modx->user}- массив текущего пользователя
  • {$_modx->makeUrl(10)} - ссылка на 10 ресурс

ID ресурса — $id

Url ресурса — {$_modx->makeUrl($id)} или {$uri}

 

Системные

option (getOption) - получение значения из массива modX::config

Вывод системной настройки — {$_modx->config.system_setting} или {'site_name' | option}

lexicon - вывод записи из словарей системы через modX::lexicon. Некоторые словари предварительно нужно загрузить.

{$_modx->lexicon->load('en:core:default'}
{'action_err_nfs' | lexicon : ['id' => 25] : 'en'} //  No action with 25 found.

Вывод даты

date_format = функция strftime (Полный список форматов дат — https://github.com/fenom-template/fenom/blob/master/docs/ru/mods/date_format.md)

{$publishedon | date_format:'%d.%m.%Y'} — Дата в формате дд.мм.гггг

{$publishedon | date_format:'%s'} — Дата публикации в формате UNIX

date - форматирование даты через функцию date

{$publishedon | date : 'd.m.Y'} - 14.05.2019
{'' | date : 'Y'} - текущий год

Цикл foreach

{foreach $rows as $row}
    {$row.title}
{/foreach}

MIGX через Fenom

#1

{set $rows = json_decode($_modx->resource.tv_images, true)}
{foreach $rows as $row}
    {$row.image}
{/foreach}

#2

{foreach $_modx->resource['PhotoGallery'] | fromJSON as $idx => $item}
	{$item.image}
{/foreach }

Пользователи

{$user.id} и {$user['id']} это одно и то же

user (userinfo) - вывод поля пользователя системы

{1 | user : 'fullname'} // Administrator

Проверка авторизации

{$_modx->isAuthenticated()}
{$_modx->hasSessionContext('web')}
{$_modx->hasPermission('load')}

if($_modx->user->isAuthenticated($_modx->context.key)){
    //пользователь авторизован
}

if($_modx->user->hasSessionContext('web')){
      //пользователь авторизован
}

{if $_modx->user.id > 0 && $_modx->isMember('admin')}
     {'chunkname' | chunk}			
{/if}

isloggedin, isnotloggedin - проверка авторизации текущего пользователя в контекте. Если контекст не указан, то проверяется текущий.

{'' | isloggedin : 'web'} // true
{'' | isnotloggedin : 'web'} // false

Игнорирование кода

 <style>
{ignore}
	body {font-size: 16px; background-color: #000;}
{/ignore}
</style>

Отладка

print_r - распечатка переменной через PHP функцию. Если передан параметр, то можно сохранить результат.

{var $printed = (['key' => 'value'] | print_r : true)} // Array ( [key] => value )
{1 | resource | print} // распечатает массив с данными всего ресурса
{0 | user : 'extended' | print : false} // распечатает массив поля `extended` текущего пользователя в одну строку

var_dump (dump) - распечатка переменной вместе с типом


Теги

Использование тегов.

  • set, add и var — определение значения переменной
  • if, elseif и else — условный оператор
  • foreach, foreachelse, break и continue — перебор элементов массива или объекта
  • switch и case — групповой условный оператор
  • cycle — циклицеский перебор массива значений
  • include, insert — вставляет и исполняет указанный шаблон
  • extends, use, block, parent и paste — наследование шаблонов
  • filter — применение модификаторов к фрагменту шаблона
  • ignore — игнорирование тегов Fenom
  • macro и import — пользовательские функции шаблонов
  • autoescape — экранирует фрагмент шаблона
  • raw — отключает экранирование фрагмента шаблона
  • unset — удаляет переменные

Операторы fenom

  • Арифметические операторы — +, -, *, /, %
  • Логические операторы — ||, &&, !$var, and, or, xor
  • Операторы сравнения — >, >=, <, <=, ==, !=, !==, <>
  • Битовые операторы — |, &, ^, ~$var, >>, <<
  • Операторы присвоения — =, +=, -=, *=, /=, %=, &=, |=, ^=, >>=, <<=
  • Строковые операторы — $str1 ~ $str2, $str1 ~~ $str2, $str1 ~= $str2
  • Тернарные операторы — $a ? $b : $c, $a ! $b : $c, $a ?: $c, $a !: $c
  • Проверяющие операторы — $var?, $var!
  • Оператор тестирования — is, is not
  • Оператор содержания — in, not in

Документация шаблонизатора FENOM

 

Эта страница полезна?

Да Нет

Эта страницу считают полезной 0% клиентов

Комментарии ()

  1. Юра Фінів 02 декабря 2019, 02:22 # 0