Работа phpthumbon с нестандартным путем картинки


Добрый день!
Сразу скажу для профи данное решение наверное покажется смешным, а вот кому-то уровнем ниже думаю в самый раз.

Буквально вчера столкнулся с проблемкой:
Есть TV типа "Смешанная загрузка файлов", которое содержит путь к загруженной картинке, но путь — /upload/123/image.jpg.

Картинки оказались загружены не обрезанными, поэтому я естественно сразу попытался вот так сделать:
<img class="pull-left" src="{$tvimage | phpthumbon : 'w=280&h=210&zc=0&f=jpg&q=80'}" alt="{$pagetitle}">
. Но ничего не получилось, потому что phpthumbon искал картинки в assets.
Поэтому сделал следующее..
{var $fullpath = "upload/" ~ $tvimage}
                <img class="pull-left" src="{$fullpath | phpthumbon : 'w=280&h=210&zc=0&f=jpg&q=80'}" alt="{$pagetitle}">
Тут я создал переменную fullpath, и присвоил ей модифицированный путь к картинке, состоящий из папки объединенного через оператор ~ старого значения TV.

UPD: сниппет pdoResources
04 сентября 2017, 11:07    Сергей Лелеко   G+  
2    338 +3

Комментарии (7)

  1. Василий Наумкин 04 сентября 2017, 11:10 # +5
    Тут бы не помешало отметить, через какой сниппет выводится этот ТВ.

    pdoResources должен сам подставлять полный путь к ТВ, если включен &prepareTVs=`1` (а он включен по умолчанию).
    1. Сергей Лелеко 04 сентября 2017, 12:38 # 0
      Справедливое замечание!
      Сниппет как раз pdoResources. Не знаю, но у меня почему-то автоматически путь не учелся, и пришлось так поступить поэтому.
    2. Алексей 04 сентября 2017, 11:16 # +2
      Такая «проблема» может иногда возникать, встречал.
      Какой-то сниппет (не помню сейчас, какой именно) не учитывают в пути basePath источника файлов.
      Проверил: pdoResources точно учитывает )
      1. Василий Столейков 04 сентября 2017, 12:23 # +1
        getResources, getProducts для шопкипера, у них политика другая — всё должно прописываться ручками в чанке, об этом автор шопкипера сам писал как-то в перепалке с Василием, когда Василий ему указывал на это отличие в pdoTools.
      2. Николай 04 сентября 2017, 16:05 # 0
        Кстати, раз тут уж речь зашла про это. Использую этот сниппет в своих целях, и если я кормлю ему файл из другого места отличного от сайта но на этом же сервере — не работает. Пришлось костыльнуть, в папке с сайтом создать временную папку, куда копировать файл, вызывать сниппет и удалять этот файл из временной папки…

                    $options['options'] = "q=90".$imgW.$imgh.$img_zc;
                    $options['input'] =  MODX_BASE_PATH.'temps/'.$_FILES['img']['name'];
                    $pr =  $modx->runSnippet("phpThumbOn", $options);
        
                    copy(MODX_BASE_PATH.$pr, $to);
                    unlink(MODX_BASE_PATH.'temps/'.$_FILES['img']['name']);
        
        Может быть это как то по человеческий можно?
        1. Алексей 05 сентября 2017, 10:16 # 0
          Да, выглядит не очень…

          Как вариант: хранить файлы в облаке с нужными размерами.
          Например, у меня есть 2 сайта, использующие одинаковые картинки. Соответственно, хранятся они в облаке, с нужными размерами и берутся обоими сайтами оттуда.
          Плюсы: никаких обработок картинок «на лету», не занимают места на сервере, CDN + картинки загружать можно только на одном сайте или вообще заливать через API, без MODX со сторонних источников.
          Смотреть в сторону Swift. Респект Василию, как всегда.
        2. Игорь Терентьев 06 сентября 2017, 21:04 # 0
          Вот так вроде тоже должно работать:

          <img class="pull-left" src="{("upload/" ~ $tvimage) | phpthumbon : 'w=280&h=210&zc=0&f=jpg&q=80'}" alt="{$pagetitle}">
          
          Вы должны авторизоваться, чтобы оставлять комментарии.