Прошу помочь с API miniShop2
Написал скрипт который переносит сайт с Drupal'а на miniShop2 (когда закончу — выложу в GitHub).
Всё работает, собирался уже запускать полный процесс импорта, как заметил, что картинки к товарам хранятся не только в таблице modx_ms2_products, но ещё и в modx_ms2_product_files.
Код функции создающей каждый отдельный товар:
Всё работает, собирался уже запускать полный процесс импорта, как заметил, что картинки к товарам хранятся не только в таблице modx_ms2_products, но ещё и в modx_ms2_product_files.
Код функции создающей каждый отдельный товар:
function CreateProduct($arr, $content, $modx)
{
/* @var msProduct $object */
$object = $modx->newObject('msProduct');
$keywords = $arr['keywords'];
unset($arr['keywords']);
foreach($arr as $key => $value){
$object->set($key, $value);
}
$object->setContent($content);
$response=array();
$response['msProduct']=($object->save())?'Created':'Fail';
$id = $object->get('id');
// SEOPro compability
$seoPro = $modx->getService('seopro','seoPro',$modx->getOption('seopro.core_path',null,$modx->getOption('core_path').'components/seopro/').'model/seopro/',$config);
$objSeoKeywords = $modx->getObject('seoKeywords', array('resource' => $id));
// Модификация для переноса всех ключевых слов
if(!$objSeoKeywords)
{
$objSeoKeywords = $modx->newObject('seoKeywords', array('resource' => $id));
}
if($objSeoKeywords){
$objSeoKeywords->set('keywords', $keywords);
$response['objSeoKeywords']=($objSeoKeywords->save())?'Saved':'Fail';
}
if($response['msProduct']=='Created' && $response['objSeoKeywords']=='Saved') $response['status']='OK'; else $response['status']='Fail';
return $response;
}
Просьба пояснить по API miniShop2 — как картинки добавить правильно в продукты? Файлы уже загружены на хостинг, пути все есть в БД, в функцию передаются в параметре $arr['image']. Комментарии: 9
Я же тебе еще в прошлой теме дал ссылку на готовый скрипт импорта. Там и ТВ, и картинки, и всё остальное есть — смотри.
Если коротко: у товара должен быть указан правильный source, а потом просто используй процессор upload из галереи.
Ну и создание товаров через API MODX неверное, при таком раскладе не отработают разные проверки и плагины. Нужно использовать обычные системные процессоры MODX (не MS2!), с указанием class_key msProduct.
В общем, смотри мой скрипт импорта, там всё есть.
Если коротко: у товара должен быть указан правильный source, а потом просто используй процессор upload из галереи.
Ну и создание товаров через API MODX неверное, при таком раскладе не отработают разные проверки и плагины. Нужно использовать обычные системные процессоры MODX (не MS2!), с указанием class_key msProduct.
В общем, смотри мой скрипт импорта, там всё есть.
ОК, спс.
Проанализировал скрипт импорта. Позаимстовал для себя куски хорошего подходящего кода. Но, хочу заметить, что процессор 'gallery/upload' (возможно и другие) не приспособлен для работы через API.
Конкретно:
Процессор 'gallery/upload' при инициализации выдаёт ошибку: %ms2_gallery_err_no_product
Потому что в коде:
Вобщем буду приспосабливать под себя. Может сделаю пулл-реквест.
Конкретно:
Процессор 'gallery/upload' при инициализации выдаёт ошибку: %ms2_gallery_err_no_product
Потому что в коде:
public function initialize() {
/* @var msProduct $product */
$id = $this->getProperty('id', @$_GET['id']);
if (!$product = $this->modx->getObject('msProduct', $id)) {
return $this->modx->lexicon('ms2_gallery_err_no_product');
}
...
$id не принимается из передаваемых параметров, а считывается из $_GET.Вобщем буду приспосабливать под себя. Может сделаю пулл-реквест.
Что-то всё никак не удаётся добавить картинки к товарам… Казалось бы простая операция…
Всё разобрался. Комментарий по поводу некорректности процессора 'gallery/upload' — ошибочен. Сейас уже понял сам принцип работы.
Напишите, пожалуйста, в чем было дело. У меня сейчас та же проблема. Создается только первый товар из списка импорта, ошибка ms2_gallery_err_no_product
Василий подскажи пожалуйста в чем проблема, точнее она схожа с вышеописанной:
выдает ошибку ms2_gallery_err_no_product и на первом товаре сбрасывается.
1. В цикле создаю товары, класс указан msProduct
2. Закачиваю на сервер картинку
3. Закачиваю картинку через процессор.
если убрать запуск процессора gallery, то товары создаются нормально.
id и image точно передаются.
Подскажите пожалуйста
выдает ошибку ms2_gallery_err_no_product и на первом товаре сбрасывается.
1. В цикле создаю товары, класс указан msProduct
2. Закачиваю на сервер картинку
3. Закачиваю картинку через процессор.
если убрать запуск процессора gallery, то товары создаются нормально.
id и image точно передаются.
foreach($TVR_hm as $tvr){
echo '--- Создан <b>Товар</b> '.$tvr['pagetitle']. '
';
$newTVR = creatRes($tvr['pagetitle'],$newPodCat['id'],8);
$img = $hmURL.$tvr['image'];
$file_name = str_replace("/","",substr( $img, strripos( $img,'/')));
$origFileName = $_SERVER["DOCUMENT_ROOT"].'/'.$tmp.$file_name;
$image = str_replace('//', '/', MODX_BASE_PATH . $tmp . $file_name);
//загрузка файла на сервер
upload($img,$origFileName);
//загрузки файла для товара
$params = array('id' => $newTVR['id'], 'name' => $file_name, 'file' => $image);
$response = $modx->runProcessor('gallery/upload',$params, array('processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/'));
if ($response->isError()) {
echo "Error on upload \"$image\": \n". print_r($response->getAllErrors(), 1);
}
unlink($image);
}
function creatRes($pagetitle,$parent,$template,$class = 0){
global $modx;
$classR = 'msProduct';
if($class == 1){
$classR = 'msCategory';
}
$data['class_key'] = $classR;
$data['context_key'] = 'web';
$data['template'] = $template;
$data['published'] = 1;
$data['parent'] = $parent;
$data['pagetitle'] = $pagetitle;
$new_res = $modx->runProcessor('resource/create', $data);
return $new_res->getObject();
}
Пробовал (нашел где-то), $modx->error->reset(); в цикл пихать, проходит первую категорию, товары создаются с картинками. Помимо того, что долго он еще и вешается, мол массив пустой, хотя он не пустой, в общем это костыль какой-то.Подскажите пожалуйста
Василий, обрати пожалуйста свой взор на эту небольшую проблему)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.