MODX REVO API Как сохранить изображение по URL?
Подскажите пожалуйста, как сохранить изображение при создании страниц через API?
Использую следующий код для создания страниц через API MODX, все создается порядок.
Среди всех переменных полей есть и ссылка на изображение, сохраняю его в TV поле создаваемого ресурса.
НО так же хочу его скачивать в папку на хостинге сразу. Как это сделать?
Попробовал с помощью runProcessor но не получилось.
Вот общий код цикла создания страниц. В $value['media_url'] находиться ссылка на изображение.
Хочу его сохранять в папку images в корне сайта. Не получается, помогите пожалуйста.
Использую следующий код для создания страниц через API MODX, все создается порядок.
Среди всех переменных полей есть и ссылка на изображение, сохраняю его в TV поле создаваемого ресурса.
НО так же хочу его скачивать в папку на хостинге сразу. Как это сделать?
Попробовал с помощью runProcessor но не получилось.
$data = [
'id' => $value['id'],
'file' => $value['media_url'],
];
$response = $modx->runProcessor('gallery/upload', $data, [
'processors_path' => MODX_CORE_PATH . '/images/',
]);
Хочу его сохранять в папку 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(); // Кэш тоже чистим
////
}
}
Комментарии: 8
'processors_path' => MODX_CORE_PATH . '/images/',
эта строчка указывает на путь к процессору а не путь к папке сохранения картинок
Вам сначала нужно загрузить нужную картинку на сервер для ее последующей обработки процессором галереи.
Примерно вот такой код
Примерно вот такой код
//Получите имя файла в переменную $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)
Подскажите пожалуйста, а что должно быть в переменной $file_content?
И зачем нужен временный каталог? Почему нельзя сразу сохранить куда нужно и все?
И зачем нужен временный каталог? Почему нельзя сразу сохранить куда нужно и все?
В эту переменную попадает копируемая картинка. Ниже вы ее вставляете в указанный файл на своем сайте.
не работает, а если проще, есть url картинки например,
upload.wikimedia.org/wikipedia/commons/thumb/9/97/The_Earth_seen_from_Apollo_17.jpg/1200px-The_Earth_seen_from_Apollo_17.jpg
Как его положить в папку на хостинге? С применением MODX API
upload.wikimedia.org/wikipedia/commons/thumb/9/97/The_Earth_seen_from_Apollo_17.jpg/1200px-The_Earth_seen_from_Apollo_17.jpg
Как его положить в папку на хостинге? С применением MODX API
MODX API тут не причем. Эту задачу решает просто PHP. Код я дал выше
Ок, спасибо, думал есть что то в API для этого, сделал просто на php и порядок.
$url = $value['media_url'];
$path = './images/'.$value['id'].'.jpg';
file_put_contents($path, file_get_contents($url));
$url = $value['media_url'];
$path = './images/'.$value['id'].'.jpg';
file_put_contents($path, file_get_contents($url));
Недавно делал для товаров Минишопа.
для ms2gallery
$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/'
));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.