Всем привет. Пишу эту заметку больше для себя, чтобы часто используемый код был под рукой. Если кому-то пригодится, пользуйтесь на здоровье и не судите строго :)
Работа с изображениями
Часто, при наполнении сайта контентом, менеджеры загружают не обработанные заранее изображения. Они могут быть размером до нескольких мегабайт. И если их выводить в таком виде, это сильно сказывается на скорости загрузки страницы. Для того чтобы сайт отдавал оптимизированные (обрезанные, уменьшенные и тп.) изображения, независимо от того какого размера они были загружены, в MODX применяется сниппет phpThumbOn. Приведу несколько примеров его использования.
Вывод изображения непосредственно в шаблоне, заданного в TV "image" документа:
<img class="img-fluid" src="{$_modx->resource.image | phpthumbon: 'w=800&h=600&zc=1&q=80'}" alt="" />
Здесь phpThumbOn используется как модификатор. В параметрах указываем нужные выходные размеры картинки: w=800 - ширина в пикселях, h=600 - высота в пикселях, zc=1 - автоматическая обрезка лишнего по большей стороне, q = 80 - степень сжатия (1 - худшее качество, 100 - лучшее).
Есть еще вариант использовать phpThumbOn как сниппет, тогда код будет примерно таким:
<img class="img-fluid" src="{'phpthumbon' | snippet: ['input' => $_modx->resource.image,'options' => 'w=320&zc=0&q=75']}" alt="">
Или если нужно, через переменную, например в каком-нибудь чанке:
{set $image = $_modx->runSnippet('phpthumbon', ['input' => $_pls['image'], 'options' => 'w=320&zc=0&q=75'])} <div class="col-12 col-md-3"> <img class="img-fluid" src="{$image}" alt=""> </div>
Можно также вынести настройки phpThumbOn в отдельную переменную и использовать такую конструкцию, где, например, высота картинки будет высчитываться по какой-нибудь формуле, если надо поиграть пропорциями или даже передать параметры через TV-шку или параметры сниппета:
{set $width = 936 {set $height = $width / 3} {set $options = 'w='~$width~'&h='~$height~'&zc=1&q=80'} <img class="img-fluid mb-3" src="{$image | phpthumbon: $options}" alt="">
Вывод заголовков
Вывод заголовка страницы, если указан longtitle то выводить его, иначе pagetitle:
<h1 class="page-header"> {$_modx->resource.longtitle ? $_modx->resource.longtitle : $_modx->resource.pagetitle} </h1>