Изменить имя файла при добавлении картинки. minishop2
Добавляю изображение вот таким образом.
Как при добавлении изменить имя файла?
$data = [
'id' => 'id продукта',
'file' => 'путь к файлу',
];
$response = $modx->runProcessor('gallery/upload', $data, [
'processors_path' => MODX_CORE_PATH . 'components/minishop2/processors/mgr/',
]);
Как при добавлении изменить имя файла?
Комментарии: 22
Так не работает?
$data = [
'id' => 'id продукта',
'file' => 'путь к файлу',
'name' => 'имя' // тут имя
];
...
Неа, не работает. Ничего не меняется…
Тогда получать ID нового объекта в ответе и прописывать непосредственно:
$data = [
'id' => 'id продукта',
'file' => 'путь к файлу',
];
$response = $modx->runProcessor('gallery/upload', $data, [
'processors_path' => MODX_CORE_PATH . 'components/minishop2/processors/mgr/',
]);
if($gallery = $modx->getObject('msProductFile', $response->response['object']['id'])){
$gallery->set('name', 'имя'); // тут пишем имя
$gallery->save();
}
Вы меня не совсем поняли наверно.
Мне нужно чтоб изменилось имя непосредственно самого файла…
Не название его в базе, а именно файла
Мне нужно чтоб изменилось имя непосредственно самого файла…
Не название его в базе, а именно файла
/images/products/321/321_0.jpeg
уже в папках
Добрый день! Нашли решение?
Ниже написано готовое решение
А через Console rename() работает?
А какая разница. И в плагинах и в консоли один и тот же PHP интерпретатор
Да. Проблема в другом оказалась. Может Вы Николай подскажете? В общем есть файлы без имени.Такого типа: /assets/images/resources/91080/.jpeg. rename() их не видит file_exists() выдает соответственно, false. как их можно переименовать? Или тут только руками?
Боюсь ошибиться, но как будто бы да — PHP тут бессилен, он ожидает имя файла с собственно именем.
Беда. Проблема в том что таких файлов много и они у разных ресурсов штучно. Руками их выцеплять практически нереально.
тогда вот вопрос. Почему /connectors/system/phpthumb.php?src=/assets/images/resources/91084/.jpg может получить файл?
Почему не видит? Протестил у себя, без проблем переименовал файл без имени с помощью rename. Если scandir запустить, там же этот файл будет?
Да бог его знает не хочет и все. Вообще как я понял rename не хочет работать в консоли.
Нормально он работает в консоли, я оттуда и тестил. Создал два файла и переименовал их без проблем. Код покажи? Подозреваю, что ты не абсолютный путь к файлу указываешь. Там не просто имя файла должно быть в аргументах, а абсолютный путь.
путь от корня прописывал. Фал размещал и в корне и assets не работало. Уже решил просто копированием файлов с нормальным именем. Проверял так-же на file_exists() он тоже ошибку давал для .jpg при этом для 1.jpg нормально. Но почему rename() не работал не знаю. Код там элементарный был rename('/assets/images/resources/91080/.jpeg', '/assets/images/resources/91080/no-name.jpeg'). А при том, тестил на определенном файле, то даже в переменные не записывал и не получал resource->url, все просто текстом прописывал в rename().Подозреваю что каких-то парв не хватает консоли
Ну, что и следовало ожидать. Нужен абсолютный путь. А путь типа '/assets/images/resources/91080/.jpeg' — это относительный, тем более это относительно корня сайта. Он должен быть что-то наподобие '/var/32011/home/site.ru/assets/images/resources/91080/.jpeg' — вот это и есть абсолютный. Поэтому у тебя ни file_exist, ни rename не работали, потому что они пытались найти папку assets в корневой директории хостинга, а там такой нет. Используй готовые переменные, в твоем случае MODX_ASSETS_PATH и дальше дописывай путь от assets, т.е.
$path = MODX_ASSETS_PATH.'images/resources/91080/'; //будет от корня
$file = $path.'.jpeg';
Спасибо. Теперь и правда заработало. И почему я сам вчера не проверил это. Весь вчерашний код уложился бы в 4 строки. Может по другому моему вопросу тоже есть какие мысли Не срабатывает OnFileManagerUpload при загрузке файлов в галерею ресурсов. Когда загружаю просто в файловый менеджер работает. При загрузке в галерею нет
Ответил. У нас комментариям ставят плюсы, если они помогли (стрелка вверх)
Могу дать пример на питоне и объяснить как я это сделал(потратил минут 5, так как давно не работал на питоне).
Задача такая: Найти все файлы что относятся к изображениям, можно сразу сделать регулярку чтобы проверял начиналось всё с точки и заканчивалось расширением изображений, либо найти все изображения затем пробежаться по ним и проверить на тоже самое начинается с точки и заканчивается расширением, далее заменить название, чат gpt в помощь с таким он должен справится.
Задача такая: Найти все файлы что относятся к изображениям, можно сразу сделать регулярку чтобы проверял начиналось всё с точки и заканчивалось расширением изображений, либо найти все изображения затем пробежаться по ним и проверить на тоже самое начинается с точки и заканчивается расширением, далее заменить название, чат gpt в помощь с таким он должен справится.
import os
import pathlib
allowed_imgs = ('jpg','png','jpeg','webp','svg')
for root, dirs, files in os.walk("./"):
for file in files:
if file.startswith('.') and file.endswith(allowed_imgs):
fl = os.path.join(root, file)
ext = fl.split(".")[-1]
nfl = os.path.join(root, f"newfile.{ext}")
os.rename(fl, nfl)
С питоном если честно не работал еще.В планах на будущее)))
На своих сайтах я всегда делаю вот такой плагин
Для этого еще должен быть установлен пакет translit, и сист.настройка «friendly_alias_translit»=«russian»
<?php
switch ($modx->event->name) {
case 'OnFileManagerUpload':
$generator = $modx->newObject('modResource');
$bases = $source->getBases($directory);
$fullPath = $bases['pathAbsolute'].ltrim($directory,'/');
$directory = $source->fileHandler->make($fullPath);
foreach ($files as $file) {
$ext = @pathinfo($file['name'],PATHINFO_EXTENSION);
rename($directory->getPath().$file['name'], $directory->getPath() . $generator->cleanAlias($file['name']));
}
break;
default: break;
}
return true;
Он для транслитерации всех загружаемых в админку файлов.Для этого еще должен быть установлен пакет translit, и сист.настройка «friendly_alias_translit»=«russian»
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.