Источник файлов, 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 — это очень даже сообщество…
Тестовая картинка: 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 — это очень даже сообщество…
Комментарии: 8
P.S.А вы пробовали не дописывать путь?
Я понимаю, что в чанках, вызовах сниппетов и т.д., я сам могу дописывать путь к [[*img_1]] или [[+img_1]], но это, мягко говоря, совсем не устраивает.
Логика MODX построена так, что при работе с TV система смотрит на
baseUrl: images/у источника файлов.
После этого берет этот baseUrl и дописывает туда значение из img_1.
Текстовые редакторы в modx делают по-иному. При добавлении картинки в контент — также смотрят на baseUrl, но уже при выборе картинки дописывают baseUrl автоматом. В итоге при вставке того же TinyMCE у Вас вставится
images/other/test.jpgавтоматически.
Александр, спасибо!
Примерно через 1,5 часа после опубликования своего вопроса, я и сам обратил внимание, на то, что при работе с tv image, modx старается вставлять перед tv недостающий путь, добавляя baseUrl.
Учитывая, что pdoTools — сила, пришлось поискать как там решается вопрос с недостающим baseUrl при работе с TV
Так что, примерно через пол часа, в официальном мануале обнаружил еще и предусмотренный для этих случаев параметр "&prepareTVs".
Вопрос можно отметить как решенный, хоть и косвенно!
Но, все же, учитывая, что вопрос стоял:
Мне хочется, чтоб в Базе данных 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 будет сохраняться полный путь.
Примерно через 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 будет сохраняться полный путь.
ставите тип вывода «Текст», далее создаете плагин на событие 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;
}
При сохранении документа плагин проверяет встречается ли имя нужной директории в папке, если нет, то дописывает в ТВ нужную директорию. Кстати, даже после дописанной директории в админке превью также выводится.
Александр, уж извините, но плагин в таком виде не годится.
Он не проверят на то, заполнен ли конкретный TV и сразу добавляет «images/»
В результате, если пользователь не заполнил это TV, в журнал ошибок придет что-то похожее на:
Так же плагину можно указать только один TV ($tvName), а ведь похожих TV можете быть много.
Возможно стоит указать, чтоб переменная $directory получала автоматом baseUrl
А переменная $tvName имела тип массив…
Он не проверят на то, заполнен ли конкретный 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 имела тип массив…
Это жесть какой костыль.
У меня сейчас 3k ресурсов с полным путем. Но я хочу изменить источник файлов и теперь там будет просто название файла. Просто капец как раздражает это. Почему из коробки не сделать опцию показывать полный путь, не понимаю.
У меня сейчас 3k ресурсов с полным путем. Но я хочу изменить источник файлов и теперь там будет просто название файла. Просто капец как раздражает это. Почему из коробки не сделать опцию показывать полный путь, не понимаю.
Попробуйте заменить Тип вывода на Текст
Если вы про настройку TV и его параметр «Параметры вывода», то это никак не решает вопрос. Специально только-что еще раз проверил.
Тоже встал вопрос по этому поводу.
И вот не могу понять как baseUrl достать…
И вот не могу понять как baseUrl достать…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.