Пару модификаторов для MODX

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

К примеру нам нужно вывести телефонный номер в формате: +7 (900) 2000 600 и так чтобы он нажимался как ссылка для запуска на устройствах

Но так как плейсхолдер всего один [[++phone]]

Создаем сниппет phone c содержимым

<?php
if (!empty($input)) {
    $input = preg_replace("/[^0-9]/", '', $input);    
}
return $input;

И в шаблон где нужно вывести телефонный номер вставляем
<a href="tel:+[[++phone:phone]]">[[++phone]]</a>
Результат:
<a href="tel:+79002000600">+7 (900) 2000 600</a>

Модификатор проверка существования файла

Бывает что необходимо выводить файл из тв параметра или какого другова поля. Но как обычно менеджеры забивают на это дело и ничего не вводят. И получается что на сайт отображается битая картинка.

Для решения этой проблемы можно использовать модификатор.
Создаем сниппет file_exists с содержимым
<?php
/** @var array $scriptProperties */
if (file_exists(MODX_BASE_PATH.$input)) {
      return $input;
}
return  $modx->getOption('default', $scriptProperties, '/assets/components/minishop2/img/web/ms2_big.png');
И в шаблоне где мы выводим картинку делаем так
<img src="[[+images:file_exists]]" >
Получится что в итоге вернется изображение по умолчанию
<img src="/assets/components/minishop2/img/web/ms2_big.png" >
Андрей Степаненко
07 декабря 2018, 09:42
13
390
+13

Комментарии: 27

Sergey
07 декабря 2018, 09:56
2
+3
Модификатор телефонного номера
можно же fenom
{var $app_mobile = 'phone'|option}
 {var $app_mobile_clear = $app_mobile|preg_replace:'/[^0-9]|/': ''}
Результат:
<a href="tel:+{$app_mobile_clear}">{'phone'|option}</a>
Фарит
07 декабря 2018, 12:54
0
Объясните, пожалуйста, где и как этот телефонный модификатор использовать.
Везде где есть телефон я просто прописываю в таком формате
<a href="tel:+79002000600">+7 (900) 2000 600</a>
Это же делается всего один раз на сайт и какой смысл лишний раз нагружать сервер.
    Александр Мельник
    07 декабря 2018, 12:59
    +1
    А каким образом контент-менеджер сможет изменить этот номер?
    Такие данные лучше всегда выносить в настройки.
    А вот тут то и пригодится модификатор для телефонного номера, ведь не будете вы делать две настройки — номер чтобы показать человеку и номер чтобы скормить протоколу tel для ссылки
    Андрей Степаненко
    07 декабря 2018, 13:04
    +1
    ClientConfig когда используется создается плейсхолдер [[++phone]]
      Александр Мельник
      07 декабря 2018, 13:07
      0
      Я отвечал Фариду, на его вопрос зачем это нужно все, ведь можно просто вписать телефоны в html код
        Андрей Степаненко
        07 декабря 2018, 13:17
        0
        А если заказчик захочет телефон поменять, в шаблон полезет? )))
Vlad
07 декабря 2018, 13:04
+3
А почему для файла не использовать условие? Например если его нет, то выводить дефолтное изображение?
И не надо никаких сниппетов создавать.
{if $image}
    <img src="{$image}" alt="">
    {else}
    <img src="assets/images/no-image.png" alt="">
  {/if}
А с телефоном я делаю так
<a href="tel:{'phone'|config}">{'phone'|config}</a>
    Андрей Степаненко
    07 декабря 2018, 13:05
    0
    {if $image}
    ....
    Проверяет не существование файла а содиржится ли что либо в переменной.
      Vlad
      07 декабря 2018, 13:07
      +3
      Ну а зачем проверять есть ли картинка, если менеджеры забивают на загрузку изображения, я что-то не понимаю.
        Андрей Степаненко
        07 декабря 2018, 13:12
        +1
        Ну менеджеры всяко умею косячить, могу просто файл удалить или переместить.
        в общем применений несколько.
        Так же картинка по умолчанию может устанавливатся при этом модификаторе
          Vlad
          07 декабря 2018, 13:16
          +3
          На самом деле такие проблемы можно решать миллионом способов, но ты все равно молодец, кому-то может так удобнее будет.
            Андрей Степаненко
            07 декабря 2018, 13:18
            0
            Да я просто для себя этот метод открыл вчера, чтобы в код не лазить, когда нету возможности использовать fenom
Сергей
07 декабря 2018, 19:55
0
Погодите, а что я не правильно тогда делаю?
ClientConfig создаю настройку телефон с именем phone, и потом вывожу в шаблоне где должен быть номер {‘phone’ | config} а в clientconfig пишу номер. И везде номер добавляется вроде
    Андрей Степаненко
    07 декабря 2018, 20:25
    +1
    Во первый вы используете fenom
    Во вторых для феном надо писать {$modx->config.phone}
    В третьих {$modx->config.phone | phone}
      Сергей
      07 декабря 2018, 20:28
      0
      ))) я просто в метро писал на коленях)))
      Вопрос в правильности действий?!
        Андрей Степаненко
        07 декабря 2018, 20:30
        0
        Повторите в чем вопрос?
          Сергей
          07 декабря 2018, 20:37
          0
          1)Добавил в clientconfig поле номера телефона с именем vasya.
          2)Где в шаблоне предусмотрен телефон вставляю код clientconfig с именем роля номера телефона vasya ( синтаксис пока опустим )
          3) записываю телефонный номер в настройках clientconfig
          Вуаля телефон отображается на сайте.
          Вопрос: правильно ли я делаю, и для чего плагин если так работает.
          Ваш плагин и смутил меня в правильности моих действий…
            Андрей Степаненко
            07 декабря 2018, 20:39
            0
            Видимо заметку надо заново прочесть.

            Загадка такая: как из одного плейсхолдера получить два разных телефонных номера:
            <a href="tel:+79002000600">+7 (900) 2000 600</a>
              Сергей
              07 декабря 2018, 20:53
              0
              Видимо не моего ума дело)) прочёл не понял))
                Андрей Степаненко
                07 декабря 2018, 20:55
                0
                А что там пробовать?

                В ClientConfig создан phone?

                Если нет, то надо создать.

                И на страницу вставь:
                <a href="tel:+[[++phone:phone]]">[[++phone]]</a>
                Увидешь что будет
                  Сергей
                  07 декабря 2018, 20:57
                  0
                  Ок попробую
                    Андрей Степаненко
                    07 декабря 2018, 20:59
                    0
                    У тебя телефон выводиться: вот так +7 (900) 100 10-10
                    <a href="tel:+СЮДА ДОЛЖЕН ПОПАСТЬ ОТФОРМАТИРОВАНЫЙ ТЕЛЕФОН"></a>
                    Без всяких тире, плюсов и скобок.

                    Дак вот этот модификатор это и делает
                    // Выведет чистый телефон в формате: 79001001010
                    [[++phone:phone]]
                    Зачем tel: знаешь?
Баха Волков
08 декабря 2018, 02:14
+1
Столько комментариев из-за 2-ух модификаторов?!))
Ivan
08 декабря 2018, 14:59
0
Если я не ошибаюсь, то на старых айфонах tel:+7 заменяется на tel:7 и приводит к ошибке в номере.
koozoo
12 декабря 2018, 21:12
0
Спасибо! Небольшой, но полезный материал.