MODX REVO API Как сохранить изображение по URL?

Подскажите пожалуйста, как сохранить изображение при создании страниц через API?
Использую следующий код для создания страниц через API MODX, все создается порядок.
Среди всех переменных полей есть и ссылка на изображение, сохраняю его в TV поле создаваемого ресурса.
НО так же хочу его скачивать в папку на хостинге сразу. Как это сделать?

Попробовал с помощью runProcessor но не получилось.

$data = [
    'id' => $value['id'],
    'file' => $value['media_url'],
];
$response = $modx->runProcessor('gallery/upload', $data, [
    'processors_path' => MODX_CORE_PATH . '/images/',
]);
Вот общий код цикла создания страниц. В $value['media_url'] находиться ссылка на изображение.
Хочу его сохранять в папку images в корне сайта. Не получается, помогите пожалуйста.

foreach($instPosts as $key => $post){
foreach($post as $key => $value){  
////
$rss = $modx->newObject('modResource');
    $rss->set('template', 1);                     // Назначаем ему нужный шаблон
    $rss->set('isfolder', 1);                         // Указываем, что это не контейнер   
    $rss->set('published', 1);                      // Опубликован
    $rss->set('createdon', time());              // Время создания
    $rss->set('pagetitle', $value['username']);               // Заголовок
    $rss->set('content', $value['caption']);               // Контент
    $rss->set('alias', strtolower($value['username'].'-'.$value['id']));    // Псевдоним
    $rss->set('parent', 2);                 // Родительский ресурс
    $rss->save(); 
  
    $nid = $rss->get('id');      //получаем ID созданного ресурса
    
$data = [
    'id' => $value['id'],
    'file' => $value['media_url'],
];
$response = $modx->runProcessor('gallery/upload', $data, [
    'processors_path' => MODX_CORE_PATH . '/images/',
]);
    
    $tvimg = $modx->getObject('modTemplateVar',array('name'=>'images'));       // Указываем имя нужного TV
    $tvimg->setValue($nid, $value['media_url']);       // Записываем в TV значение
    $tvimg->save();
    
    unset($rss); 
    unset($tvimg);       // Удаляем переменные
    $modx->cacheManager->clearCache();      // Кэш тоже чистим
////
}
}
Роман
18 января 2021, 17:15
modx.pro
179
0

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

Михаил
18 января 2021, 17:41
0
'processors_path' => MODX_CORE_PATH . '/images/',
эта строчка указывает на путь к процессору а не путь к папке сохранения картинок
    Николай Савин
    18 января 2021, 19:40
    +1
    Вам сначала нужно загрузить нужную картинку на сервер для ее последующей обработки процессором галереи.
    Примерно вот такой код

    //Получите имя файла в переменную $file_name - например через explode('/', $image_url)
    //Указываем каталог для временного хранения файла
    $img_path = MODX_ASSETS_PATH . 'images/upload/' . $file_name;
    //Копируем изображение            
    if (!file_exists($img_path) && $file_content = file_get_contents($image_url)) {
        file_put_contents($img_path, $file_content);
    }
    
    //Здесь идет кусок кода с загрузкой файла в процессор, который сгенерирует нужные превью.
    //Здесь если нужно удаляем временный файл через unlinlk($img_path)
      Роман
      18 января 2021, 20:15
      0
      Подскажите пожалуйста, а что должно быть в переменной $file_content?
      И зачем нужен временный каталог? Почему нельзя сразу сохранить куда нужно и все?
        Николай Савин
        18 января 2021, 20:17
        0
        В эту переменную попадает копируемая картинка. Ниже вы ее вставляете в указанный файл на своем сайте.
    Константин Ильин
    19 января 2021, 12:21
    +2
    Недавно делал для товаров Минишопа.
    $gallery = array(
        'id' => $id,
        'file' => $URL_FULL // https://site.ru/img/123.jpg
    );
    $upload = $modx->runProcessor('gallery/upload', $gallery, array(
        'processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/'
    ));
    
    if ($upload->isError()) {
        //print_r($upload->getResponse());
    }
    $modx->error->reset();

    для ms2gallery
    // Почему то источник у меня слетал, так что этот код возможно не нужен.
    if ($resource = $modx->getObject('modResource', $id)) {
        $properties = $resource->getProperties('ms2gallery');
        $properties['media_source'] = 3;
        $resource->setProperties($properties, 'ms2gallery');
        $resource->save();
    }
    
    $gallery = array(
        'id' => $id,
        'file' => $URL_FULL // https://site.ru/img/123.jpg
    );
    
    $upload = $modx->runProcessor('gallery/upload', $gallery, array(
        'processors_path' => MODX_CORE_PATH.'components/ms2gallery/processors/mgr/'
    ));
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8