Пару модификаторов для 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
modx.pro
18
3 034
+13
Поблагодарить автора Отправить деньги

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

Sergey (Sentinel)
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 Brise
      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 Brise
          07 декабря 2018, 13:07
          +3
          Ну а зачем проверять есть ли картинка, если менеджеры забивают на загрузку изображения, я что-то не понимаю.
            Андрей Степаненко
            07 декабря 2018, 13:12
            +1
            Ну менеджеры всяко умею косячить, могу просто файл удалить или переместить.
            в общем применений несколько.
            Так же картинка по умолчанию может устанавливатся при этом модификаторе
              Vlad Brise
              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
            Спасибо! Небольшой, но полезный материал.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              27