Изменить имя файла при добавлении картинки. minishop2

Добавляю изображение вот таким образом.

$data = [
    'id' => 'id продукта',
    'file' => 'путь к файлу',
];

$response = $modx->runProcessor('gallery/upload', $data, [
    'processors_path' => MODX_CORE_PATH . 'components/minishop2/processors/mgr/',
]);

Как при добавлении изменить имя файла?
Евгений
10 декабря 2019, 12:28
modx.pro
903
0

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

Павел Романов
10 декабря 2019, 13:08
0
Так не работает?
$data = [
    'id' => 'id продукта',
    'file' => 'путь к файлу',
    'name' => 'имя' // тут имя
];
...
    Евгений
    10 декабря 2019, 14:01
    0
    Неа, не работает. Ничего не меняется…
      Павел Романов
      10 декабря 2019, 14:39
      0
      Тогда получать 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();
      }
        Евгений
        10 декабря 2019, 14:52
        0
        Вы меня не совсем поняли наверно.
        Мне нужно чтоб изменилось имя непосредственно самого файла…
        Не название его в базе, а именно файла
        /images/products/321/321_0.jpeg
        уже в папках
          Сергей С
          27 августа 2023, 09:49
          0
          Добрый день! Нашли решение?
            Николай Савин
            27 августа 2023, 10:43
            0
            Ниже написано готовое решение
              Сергей С
              27 августа 2023, 10:46
              0
              А через Console rename() работает?
                Николай Савин
                27 августа 2023, 10:47
                0
                А какая разница. И в плагинах и в консоли один и тот же PHP интерпретатор
                  Сергей С
                  27 августа 2023, 10:52
                  0
                  Да. Проблема в другом оказалась. Может Вы Николай подскажете? В общем есть файлы без имени.Такого типа: /assets/images/resources/91080/.jpeg. rename() их не видит file_exists() выдает соответственно, false. как их можно переименовать? Или тут только руками?
                    Николай Савин
                    27 августа 2023, 10:56
                    0
                    Боюсь ошибиться, но как будто бы да — PHP тут бессилен, он ожидает имя файла с собственно именем.
                      Сергей С
                      27 августа 2023, 10:57
                      0
                      Беда. Проблема в том что таких файлов много и они у разных ресурсов штучно. Руками их выцеплять практически нереально.
                      Сергей С
                      27 августа 2023, 12:28
                      0
                      тогда вот вопрос. Почему /connectors/system/phpthumb.php?src=/assets/images/resources/91084/.jpg может получить файл?
                    Dan
                    Dan
                    27 августа 2023, 18:22
                    0
                    Почему не видит? Протестил у себя, без проблем переименовал файл без имени с помощью rename. Если scandir запустить, там же этот файл будет?
                      Сергей С
                      27 августа 2023, 21:47
                      0
                      Да бог его знает не хочет и все. Вообще как я понял rename не хочет работать в консоли.
                      Dan
                      Dan
                      27 августа 2023, 21:52
                      0
                      Нормально он работает в консоли, я оттуда и тестил. Создал два файла и переименовал их без проблем. Код покажи? Подозреваю, что ты не абсолютный путь к файлу указываешь. Там не просто имя файла должно быть в аргументах, а абсолютный путь.
                      Сергей С
                      28 августа 2023, 10:22
                      0
                      путь от корня прописывал. Фал размещал и в корне и assets не работало. Уже решил просто копированием файлов с нормальным именем. Проверял так-же на file_exists() он тоже ошибку давал для .jpg при этом для 1.jpg нормально. Но почему rename() не работал не знаю. Код там элементарный был rename('/assets/images/resources/91080/.jpeg', '/assets/images/resources/91080/no-name.jpeg'). А при том, тестил на определенном файле, то даже в переменные не записывал и не получал resource->url, все просто текстом прописывал в rename().Подозреваю что каких-то парв не хватает консоли
                      Dan
                      Dan
                      28 августа 2023, 10:35
                      +1
                      Ну, что и следовало ожидать. Нужен абсолютный путь. А путь типа '/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';
                      Сергей С
                      28 августа 2023, 10:55
                      0
                      Спасибо. Теперь и правда заработало. И почему я сам вчера не проверил это. Весь вчерашний код уложился бы в 4 строки. Может по другому моему вопросу тоже есть какие мысли Не срабатывает OnFileManagerUpload при загрузке файлов в галерею ресурсов. Когда загружаю просто в файловый менеджер работает. При загрузке в галерею нет
                      Dan
                      Dan
                      28 августа 2023, 11:13
                      +1
                      Ответил. У нас комментариям ставят плюсы, если они помогли (стрелка вверх)
          Vladimir
          27 августа 2023, 16:31
          0
          Могу дать пример на питоне и объяснить как я это сделал(потратил минут 5, так как давно не работал на питоне).
          Задача такая: Найти все файлы что относятся к изображениям, можно сразу сделать регулярку чтобы проверял начиналось всё с точки и заканчивалось расширением изображений, либо найти все изображения затем пробежаться по ним и проверить на тоже самое начинается с точки и заканчивается расширением, далее заменить название, чат 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)
            Сергей С
            28 августа 2023, 10:58
            0
            С питоном если честно не работал еще.В планах на будущее)))
    Тодор
    11 декабря 2019, 16:58
    0
    На своих сайтах я всегда делаю вот такой плагин
    <?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»
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      22