Как на fenom проверить существование файла, типа file_exists?

Приветствую, следующая ситуация, TV image пользователь выбрал картинку, все ок, сохранил ресурс, потом заполняя другие ресурсы, удалил картинку из хранилища, в TV остался путь к картинке, поэтому проверка типа

{if $el.id | resource: 'photo'}
не работает, поле заполнено, а картинки нет по факту, на сайт выводиться хрень, а в журнале сыпяться ошибки от pThumb о отсутствующем файле. Подскажите пожалуйста, есть какой то вариант на fenom проверки на существование файла по пути? Типа file_exists
Роман
06 января 2023, 23:00
modx.pro
568
0

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

Михаил
07 января 2023, 10:44
1
0
if(file_exists($el.id | resource: 'photo'))
    Роман
    07 января 2023, 11:00
    0
    Спасибо, а как это использовать в шаблоне на fenom?

    Так не работает, ошибка {if(file_exists($el.id | resource: 'photo'))}1{else}2{/if}. Добавил пробел после if так ошибки нет {if (file_exists($el.id | resource: 'photo'))}1{else}2{/if} но не работает конструкция, всегда 2 выводит, типа файл есть всегда.
      Роман
      07 января 2023, 11:16
      0
      Хотя, думаю проблема в другом, написал сниппет простой

      <?php
      //$protocol = (!empty($_SERVER['HTTPS']) && 'off' !== strtolower($_SERVER['HTTPS'])?"https://":"http://");
      //return $protocol. $_SERVER["SERVER_NAME"];
      
      $path = $input;
      //$path = 'http://'.$_SERVER["SERVER_NAME"].$input;
      if (file_exists($path)) {              
          echo $path. ' файл есть';
      } else {
          echo $path. ' файла нет';
      }
      Выводит всегда файла нет почему то, даже если такой путь /assets/theme/media/images/tour/img-20221023-140026.jpg или полный с http скормить, все равно файла нет :( не понимаю почему он не видит файлы? Если скопировать url в браузер то фото открывается легко.
    Alexey
    07 января 2023, 11:36
    0
    Если картинки лежат на этом же сервере, то нужно указывать путь от корня сервера, а не http. А если файлы лежат в удалённом хранилище, то file_exists в этом случае не работает — www.nomostech.it/2022/02/20/checking-if-a-file-exists-on-a-remote-server-with-php/
      Роман
      07 января 2023, 11:45
      0
      Да спасибо, это уже понял, погуглил как работает file_exist но не пойму как указать путь от корня сервера в этой конструкции? if(file_exists($el.id | resource: 'photo'))
        Роман
        07 января 2023, 11:53
        0
        Пока получилось только через сниппет, но все равно криво
        Сниппет такой
        $path = $_SERVER['DOCUMENT_ROOT'].$input;
        if (file_exists($path)) {              
            echo $path. ' файл есть';
        } else {
            echo $path. ' файла нет';
        }
        Но если поле TV с рисунком пусто $input понятно пуста, то он возвращает ФАЙЛ ЕСТЬ потому что $_SERVER['DOCUMENT_ROOT'] путь возвращает :( задолбался
          Alexey
          07 января 2023, 11:59
          1
          0
          if ($input && file_exists($path)) {

          Делай доп. проверку на пустоту tv -поля
            Роман
            07 января 2023, 12:08
            0
            Спасибо, так работает, а на Fenom так нельзя сделать? Без лишних сниппетов?
              Alexey
              07 января 2023, 12:15
              0
              docs.modx.pro/komponentyi/pdotools/parser#%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5

              Попробуй $.server['DOCUMENT_ROOT']. Я сам ни разу не использовал, но — судя по мануалу — может сработать
                Роман
                07 января 2023, 13:27
                0
                В общем, сделал так, работает! Пришлось правда сделать сниппет substr что бы обрезать лишний каталог и слеш на конце из строки пути сервера, а так все норм, но заморочено.

                {if (file_exists($_modx->runSnippet("substr", ["input" => $_modx->config.assets_path])~$el.id | resource: 'photo')) AND $el.id | resource: 'photo'}
                <img src="{$el.id | resource: 'photo' | pthumb : 'w=660&h=412&zc=1&q=90'}" alt="{$el.pagetitle}"/>
                {/if}
                  Артур Шевченко
                  09 января 2023, 12:16
                  0
                  А почему бы не разбить на части?
                  {set $photo = ($el.id | resource: 'photo')}
                  {set $path = $_modx->config.base_path ~ $photo}
                  {if $phote && file_exists($path)}
                  <img src="{$photo | pthumb : 'w=660&h=412&zc=1&q=90'}" alt="{$el.pagetitle}"/>
                  {/if}
                  По-моему так читабельнее.
                    Роман
                    09 января 2023, 12:45
                    0
                    Можно, а зачем? У меня там в другомпроблема, в $_modx->config.base_path есть папка assets/ на конце со слешем, а у рисунка путь начинается с /assets/… со слешем в начале. Поэтому и добавил функцию назвал substr в которой вырезаю у пути assets/
                      Артур Шевченко
                      09 января 2023, 13:11
                      1
                      +1
                      Зачем делать код читабильнее? Ну чтобы удобнее было его читать самому и другим.
                      Что же до проблемы, то я бы на твоём месте проверил настройки источника файлов (baseUrl), так как у меня нет. Если же исходить из того, что слэш есть и он нужен то можно сделать так
                      {set $photo = ($el.id | resource: 'photo')}
                      {set $base_path = $_modx->config.base_path | ereplace: '/\/$/' : ''}
                      {set $path = $base_path ~ $photo}
                      {if $phote && file_exists($path)}
                      <img src="{$photo | pthumb : 'w=660&h=412&zc=1&q=90'}" alt="{$el.pagetitle}"/>
                      {/if}
                        Роман
                        09 января 2023, 13:13
                        0
                        Спасибо, попробую! ereplace интересно, обойтись без доп самописного сниппета будет хорошо
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        14