Источник файлов, TV поле image, Обрезанный путь

Свой источник файлов — TV поле image — Обрезанный путь к изображению

Тестовая картинка: mysite.com/images/other/test.jpg
Как ясно из пути, основная директория для изображений — images
Чтоб было удобней обращаться к изображениям и не давать другим пользователям возможность видеть другие директории, создаю Источник файлов..

1) Создаю источник файлов
Имя: Images
basePath: images/
basePathRelative: Да
baseUrl: images/
baseUrlRelative: Да

2) Создаю TV
Имя: img_1
Тип ввода: Изображение
Источники файлов: Images
Так же указываю для каких шаблонов доступен этот TV

3) Создаю ресурс, в TV поле «img_1», выбираю изображение test.jpg
И, по идее, в TV поле «img_1» должен прийти следующий текст:
images/other/test.jpg
но, к моему сожалению, туда приходит только:
other/test.jpg
Причем TV поле отлично отрабатывает привью для этой картинки.

Вопрос многоуважаемому сообществу!
Как сделать так, чтоб в TV поле «img_1», приходил полный путь (images/other/test.jpg)?
Хочется, чтоб в Базе данных TV для изображений и файлов содержали в себе полный путь.

P.S.
Я понимаю, что в чанках, вызовах сниппетов и т.д., я сам могу дописывать путь к [[*img_1]] или [[+img_1]], но это, мягко говоря, совсем не устраивает.

Тема так же актуальна и в случае использования HTML-редактора.
Например, в Tinymce, если нажать соответствующую иконку для вставки изображения, то после выбора картинки получим обрезанный путь, а значит битую ссылку на картинку.

P.P.S.
Облазил весь гугл, ничего толкового не нашел, хотя подобные вопросы люди уже задавали.
Очень хотелось бы получить ответ здесь, ибо modx.pro — это очень даже сообщество…
Сuriosity
13 июля 2017, 02:07
modx.pro
5 243
0

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

Александр
13 июля 2017, 18:36
+1
P.S.
Я понимаю, что в чанках, вызовах сниппетов и т.д., я сам могу дописывать путь к [[*img_1]] или [[+img_1]], но это, мягко говоря, совсем не устраивает.
А вы пробовали не дописывать путь?
Логика MODX построена так, что при работе с TV система смотрит на
baseUrl: images/
у источника файлов.
После этого берет этот baseUrl и дописывает туда значение из img_1.
Текстовые редакторы в modx делают по-иному. При добавлении картинки в контент — также смотрят на baseUrl, но уже при выборе картинки дописывают baseUrl автоматом. В итоге при вставке того же TinyMCE у Вас вставится
images/other/test.jpg
автоматически.
    Сuriosity
    13 июля 2017, 20:16
    +1
    Александр, спасибо!
    Примерно через 1,5 часа после опубликования своего вопроса, я и сам обратил внимание, на то, что при работе с tv image, modx старается вставлять перед tv недостающий путь, добавляя baseUrl.
    Учитывая, что pdoTools — сила, пришлось поискать как там решается вопрос с недостающим baseUrl при работе с TV
    Так что, примерно через пол часа, в официальном мануале обнаружил еще и предусмотренный для этих случаев параметр "&prepareTVs".

    Вопрос можно отметить как решенный, хоть и косвенно!

    Но, все же, учитывая, что вопрос стоял:
    Как сделать так, чтоб в TV поле «img_1», приходил полный путь (images/other/test.jpg)?
    я решил поискать решения еще.
    Мне хочется, чтоб в Базе данных TV для изображений и файлов содержали в себе полный путь.
    Так что стал экспериментировать…

    И как вариант решения, пока остановился на этом, в силу его простоты:
    1) Создаю источник файлов
    Имя: Images
    basePath:
    basePathRelative: Да
    baseUrl:
    baseUrlRelative: Да
    allowedFileTypes: jpg,jpeg,png,gif
    imageExtensions: jpg,jpeg,png,gif
    skipFiles: .svn,.git,_notes,nbproject,.idea,.DS_Store,core,manager,assets,connectors,css,js

    То есть, медиа источник «Images» будет отбращаться к корню сайта.
    Но благодаря параметру «skipFiles», запретил показ папок: core,manager,assets,connectors,css,js
    Ну а чтоб не было видно системных файлов и файлов-скриптов (.htaccess,config.core.php,index.php,robots.txt), то в параметре «allowedFileTypes» указываем, выводить только картинки.

    Осталось решить вопрос, чтоб пользователь, использующий источник «Images», не мог загружать картинки в корень сайта. Для этого создаем плагин, который любезно предоставил Николай Ланец.

    Теперь пользователь (тот же контент-менеджер), сможет видеть конкретную папку (в моем случае «images») с ее содержимым, ну а при выборе изображения в TV будет сохраняться полный путь.
      Александр
      14 июля 2017, 11:28
      +1
      ставите тип вывода «Текст», далее создаете плагин на событие OnDocFormSave:
      switch ($modx->event->name) {
          case 'OnDocFormSave':
      			$directory = 'images'; //Имя директории
      			$tvName = 'image'; //Имя TV
      			$tv = $modx->getObject('modTemplateVar', array('name' => $tvName));
      			$curTv = $tv->getValue($resource);
      			if (!preg_match('/'.$directory.'\//',$curTv)){
                                    if(!$resource->setTVValue($tvName, $directory.'/'.$curTv)) {
                                       $modx->log(modX::LOG_LEVEL_ERROR, 'There was a problem setting the TV value.');
                                    }
      			}
              break;
          default:
              return;
      }
      При сохранении документа плагин проверяет встречается ли имя нужной директории в папке, если нет, то дописывает в ТВ нужную директорию. Кстати, даже после дописанной директории в админке превью также выводится.
        Сuriosity
        15 июля 2017, 18:29
        0
        Александр, уж извините, но плагин в таком виде не годится.
        Он не проверят на то, заполнен ли конкретный TV и сразу добавляет «images/»
        В результате, если пользователь не заполнил это TV, в журнал ошибок придет что-то похожее на:
        [2017-07-15 19:27:15] (ERROR @ mysite.com\core\model\phpthumb\modphpthumb.class.php : 121) phpThumb was unable to generate a thumbnail for: mysite.com\core\cache\phpthumb\mysite.com__srcc2ea3cdb3e01b45fbd73e8f6867b7c60_par0ba78bb0326502335f8683fdf331013a_dat0.jpeg
        [2017-07-15 19:27:15] (ERROR @ mysite.com\core\model\phpthumb\modphpthumb.class.php : 133) Error outputting thumbnail:
        OutputThumbnail() failed because !is_resource($this->gdimg_output) in file "phpthumb.class.php" on line 618
        К тому же этот код не универсален. Например, здесь приходится жестко прописывать $directory.
        Так же плагину можно указать только один TV ($tvName), а ведь похожих TV можете быть много.
        Возможно стоит указать, чтоб переменная $directory получала автоматом baseUrl
        А переменная $tvName имела тип массив…
        Александр
        27 июня 2019, 17:05
        0
        Это жесть какой костыль.
        У меня сейчас 3k ресурсов с полным путем. Но я хочу изменить источник файлов и теперь там будет просто название файла. Просто капец как раздражает это. Почему из коробки не сделать опцию показывать полный путь, не понимаю.
      Alexander V
      13 июля 2017, 20:29
      0
      Попробуйте заменить Тип вывода на Текст
        Сuriosity
        13 июля 2017, 20:40
        0
        Если вы про настройку TV и его параметр «Параметры вывода», то это никак не решает вопрос. Специально только-что еще раз проверил.
        Дмитрий
        06 октября 2018, 00:05
        0
        Тоже встал вопрос по этому поводу.
        И вот не могу понять как baseUrl достать…
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8