Мои мини-модификаторы fenom modx, которые часто использую при разработке сайтов.
  • Дата создания
    25 октября 2018
  • Топиков
    6
  • Ограничение на постинг
    0.000

Вывод даты на MODx через Fenom

У документа Modx есть несколько дат, которые можно использовать для отображения на сайте:
  • Дата создания — поле createdon
  • Дата публикации — поле publishedon
  • Дата изменения — поле editedon
MODx хранит их в формате Timestamp, поэтому, чтобы вывести их в человеческом виде, нужно использовать модификатор Fenom
Например так:
{$publishedon | date : "d.m.Y"}

Стоит различать место вывода. Тут возможно несколько ситуаций.
1. Вывод непосредственно в шаблоне. Тогда поле будет доступна у объекта $_modx->resource
И вывод будет выглядеть так
{$_modx->resource.publishedon | date : "d.m.Y"}
2. В чанке сниппета, например, в чанке pdoResource или msProduct. Тогда выводим дату непосредственно из переменной
{$publishedon | date : "d/m/Y"}

И, чтобы настроить нужный формат вывода даты, используем дополнительный параметр, где указываем что и как выводить.
"d/m/Y" -> 12/02/2017
"d.m.Y" -> 12.02.2017
"d.m.Y H:i:s" -> 12.02.2017 17:30:12

Все возможные подстановочные символы можно найти на официальной документации PHP php.net/manual/en/function.date.php

Чтобы вывести текущее дату:
{'' | date : "d.m.Y"}

Так можно вывести через fenom текущий год:
{'' | date : "Y"}

Например, для вывода текущего года в копирайте:
© {'' | date : "Y"} - название компании

Выводим дату на Modx с русским названием месяца

Чтобы не настраивать локаль, да и иногда требуется вывести в том или ином формате, то я
Название: rus_months
Содержимое:
<?php
$months = array(
    'Jan' => 'января',
    'Feb' => 'февраля',
    'Mar' => 'марта',
    'Apr' => 'апреля',
    'May' => 'мая',
    'Jun' => 'июня',
    'Jul' => 'июля',
    'Aug' => 'августа',
    'Sep' => 'сентября',
    'Oct' => 'октября',
    'Nov' => 'ноября',
    'Dec' => 'декабря',
);

return str_replace(array_keys($months), array_values($months), $input);

Если используется Fenom, товыводить даты можно так:
{$doc.publishedon | date : "d M Y" | rus_months}
обязательно должен быть символ «М», так как именно он заменяется на название русского месяца.

Если без Fenom:
[[*publishedon:date=`d M Y`:rus_months]]

Формируем ссылки поделиться в соцсетях на Modx

Чтобы реализовать функционал «Поделиться в соцсетях» накидал вот такой модификатор:
Имя: share
Содержимое:
<?php
if (empty($input)) {
    return;
}

$host = 'https://share.yandex.net/go.xml?';
$query = array(
    'service' => $input,
    'url' => $modx->makeUrl($modx->resource->get('id'),'','','full'),
    'title' => $modx->resource->get('pagetitle'),
);

return $host . http_build_query($query);

Использую так:

<div class="gallery-share">
    <div class="gallery-share__info">
        Поделиться в соц. сетях:
    </div>
    <a href="{'odnoklassniki' | share}"><img src="/assets/template/images/ok.png" alt=""></a>
    <a href="{'twitter' | share}"><img src="/assets/template/images/twitter.png" alt=""></a>
    <a href="{'facebook' | share}"><img src="/assets/template/images/facebook.png" alt=""></a>
    <a href="{'gplus' | share}"><img src="/assets/template/images/google.png" alt=""></a>
    <a href="{'vkontakte' | share}"><img src="/assets/template/images/vk.png" alt=""></a>
</div>

На фронте получается так:

Модификатор Fenom для форматирование цены в формате minishop2

Для вывода цены в денежном формате (отделением тысяч) использую модификатор, который берет настройку формата из системной настройки minishop2


берет настройку отсюда


Название сниппета price_format
Содержимое:
<?php
$price = str_replace(',','.',$input);
$options = json_decode($modx->getOption('ms2_price_format'));
if (is_array($options)) {
    return number_format($price, $options[0], $options[1], $options[2]);
} else {
    return $price;
}

Использую вот так:
{$doc.price_tv | price_format}

Модификатор Fenom для номера телефона

Постоянно в проектах требуется вывести ссылку на телефон для быстрого набора номер. А номер телефона хранится в какой-нибудь переменной и с лишними символами — скобки, тире, пробелы. Чтобы их вырезать и не захламлять код, я использую модификатор fenom — tel.
Т.е. чтобы получить вот такой html код

<a href="tel:8800260000">8(800)260-00-00</a>
я делаю так

<a href="tel:{$_modx->config.phone | tel}">{$_modx->config.phone}</a>
где в переменной $_modx->config.phone содержится номер «8(800)260-00-00».
tel — это сниппет, со следующим кодом

<?php
$input = preg_replace('#[\(\)\s-]#siU', '', $input);
return $input;