Как на fenom проверить существование файла, типа file_exists?
Приветствую, следующая ситуация, TV image пользователь выбрал картинку, все ок, сохранил ресурс, потом заполняя другие ресурсы, удалил картинку из хранилища, в TV остался путь к картинке, поэтому проверка типа
{if $el.id | resource: 'photo'}
не работает, поле заполнено, а картинки нет по факту, на сайт выводиться хрень, а в журнале сыпяться ошибки от pThumb о отсутствующем файле. Подскажите пожалуйста, есть какой то вариант на fenom проверки на существование файла по пути? Типа file_exists Комментарии: 14
if(file_exists($el.id | resource: 'photo'))
Спасибо, а как это использовать в шаблоне на 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 выводит, типа файл есть всегда.
Так не работает, ошибка {if(file_exists($el.id | resource: 'photo'))}1{else}2{/if}. Добавил пробел после if так ошибки нет {if (file_exists($el.id | resource: 'photo'))}1{else}2{/if} но не работает конструкция, всегда 2 выводит, типа файл есть всегда.
Хотя, думаю проблема в другом, написал сниппет простой
<?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 в браузер то фото открывается легко.
Если картинки лежат на этом же сервере, то нужно указывать путь от корня сервера, а не http. А если файлы лежат в удалённом хранилище, то file_exists в этом случае не работает — www.nomostech.it/2022/02/20/checking-if-a-file-exists-on-a-remote-server-with-php/
Да спасибо, это уже понял, погуглил как работает file_exist но не пойму как указать путь от корня сервера в этой конструкции? if(file_exists($el.id | resource: 'photo'))
Пока получилось только через сниппет, но все равно криво
Сниппет такой
Сниппет такой
$path = $_SERVER['DOCUMENT_ROOT'].$input;
if (file_exists($path)) {
echo $path. ' файл есть';
} else {
echo $path. ' файла нет';
}
Но если поле TV с рисунком пусто $input понятно пуста, то он возвращает ФАЙЛ ЕСТЬ потому что $_SERVER['DOCUMENT_ROOT'] путь возвращает :( задолбался
if ($input && file_exists($path)) {
Делай доп. проверку на пустоту tv -поля
Делай доп. проверку на пустоту tv -поля
Спасибо, так работает, а на Fenom так нельзя сделать? Без лишних сниппетов?
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']. Я сам ни разу не использовал, но — судя по мануалу — может сработать
Попробуй $.server['DOCUMENT_ROOT']. Я сам ни разу не использовал, но — судя по мануалу — может сработать
В общем, сделал так, работает! Пришлось правда сделать сниппет 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}
А почему бы не разбить на части?
{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}
По-моему так читабельнее.
Можно, а зачем? У меня там в другомпроблема, в $_modx->config.base_path есть папка assets/ на конце со слешем, а у рисунка путь начинается с /assets/… со слешем в начале. Поэтому и добавил функцию назвал substr в которой вырезаю у пути assets/
Зачем делать код читабильнее? Ну чтобы удобнее было его читать самому и другим.
Что же до проблемы, то я бы на твоём месте проверил настройки источника файлов (baseUrl), так как у меня нет. Если же исходить из того, что слэш есть и он нужен то можно сделать так
Что же до проблемы, то я бы на твоём месте проверил настройки источника файлов (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}
Спасибо, попробую! ereplace интересно, обойтись без доп самописного сниппета будет хорошо
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.