Вложенный импорт в Minishop2 из CSV
Добрый день!
Интересует вопрос, я бы даже сказал «горит». Уже несколько дней внимательно читал гугл и официальную документацию по импорту в частности, но так и не смог разобраться, как сделать импорт из CSV в minishop2 товаров во вложенных категориях?
Например, «Подушки» >>> «Декоративные» >>> «Синтетические» >>> «Сам товар».
Сталкивался кто-нибудь? И вообще, это реально сделать штатными средствами?
Естественно, импорт в одну категорию, указав «parent», сделать получается.
Спасибо большое!
Интересует вопрос, я бы даже сказал «горит». Уже несколько дней внимательно читал гугл и официальную документацию по импорту в частности, но так и не смог разобраться, как сделать импорт из CSV в minishop2 товаров во вложенных категориях?
Например, «Подушки» >>> «Декоративные» >>> «Синтетические» >>> «Сам товар».
Сталкивался кто-нибудь? И вообще, это реально сделать штатными средствами?
Естественно, импорт в одну категорию, указав «parent», сделать получается.
Спасибо большое!
Комментарии: 4
Создать категории, затем загрузить в них товар, указывая верный parent.
Родной импорт не рассчитан на импорт категорий, потому что он работает с csv, в котором нет вложенности.
Родной импорт не рассчитан на импорт категорий, потому что он работает с csv, в котором нет вложенности.
Спасибо!
В нашем CSV вложенность указана через колонки, типа «group1», «group2» и т.п., указывающая на уровень от первого. Если допилим такой импорт, обязательно выложу, людям наверняка пригодится.
В нашем CSV вложенность указана через колонки, типа «group1», «group2» и т.п., указывающая на уровень от первого. Если допилим такой импорт, обязательно выложу, людям наверняка пригодится.
Написал четырехуровневый импорт из CSV (на быстроту/качественность кода не претендую, замечания приветствуются).
Товаров у меня 75000, обработка в районе 4-х часов идет.
Работает пока что только с включенной автоматической транслитерацией.
Код ниже вставляется от строки // Import до строки // Set default values
При этом задавать «parent» при отправке запроса на импорт не нужно, он указывается в скрипте.
Первые три колонки, как я и писал, указывают на НАИМЕНОВАНИЯ родительских категорий товаров (указывать id не нужно):
группа1; группа2; группа3 (например, Подушки; Декоративные; Синтетические)
Скан происходит в заранее созданной категории с id, указанным в $parent_id (0 — корень);
Создавать категории заранее не нужно. Скрипт проверяет на наличие категории по алиасу и, если категории с таким алиасом не существует, он ее создает.
Если вложенные группа2 или 3 не указываются, то выгружается товар в его родителя (в т.ч. и в корень).
Товаров у меня 75000, обработка в районе 4-х часов идет.
Работает пока что только с включенной автоматической транслитерацией.
Код ниже вставляется от строки // Import до строки // Set default values
При этом задавать «parent» при отправке запроса на импорт не нужно, он указывается в скрипте.
Первые три колонки, как я и писал, указывают на НАИМЕНОВАНИЯ родительских категорий товаров (указывать id не нужно):
группа1; группа2; группа3 (например, Подушки; Декоративные; Синтетические)
Скан происходит в заранее созданной категории с id, указанным в $parent_id (0 — корень);
Создавать категории заранее не нужно. Скрипт проверяет на наличие категории по алиасу и, если категории с таким алиасом не существует, он ее создает.
Если вложенные группа2 или 3 не указываются, то выгружается товар в его родителя (в т.ч. и в корень).
// Import!
$parent_id = 0; // Указываем здесь id корневого каталога, куда выгружать
$handle = fopen($file, "r");
$rows = $created = $updated = 0;
while (($csv = fgetcsv($handle, 0, $delimeter)) !== false) {
$rows ++;
$data = $gallery = array();
$modx->error->reset();
$modx->log(modX::LOG_LEVEL_INFO, "Raw data for import: \n".print_r($csv,1));
foreach ($keys as $k => $v) {
if (!isset($csv[$k])) {
exit('Field "' . $v . '" not exists in file. Please fix import file or parameter "fields".');
}
if ($v == 'g1') { ///Если поле g1, вычисляем id по транслиту имени каталога
if ($csv[$k]=='') {$data['parent']=381;} else {
$pdo = $modx->getService('pdoFetch');
$newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
if (!$newcat) { ///Если такой id не существует, то создаем его
$parent = $modx->newObject('modResource');
$parent->set('pagetitle',$csv[$k]);
$parent->set('alias',$csv[$k]);
$parent->set('parent',31);
$parent->set('template',2);
$parent->set('class_key','msCategory');
$parent->set('published','1');
$parent->set('hidemenu','0');
$parent->save();
}
$data['parent'] = $newcat['id'];
}
}
if ($v == 'g2') { ///Если поле g2, вычисляем id по транслиту имени каталога
if ($csv[$k]!=='') {
$pdo = $modx->getService('pdoFetch');
$newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
if (!$newcat) { ///Если такой id не существует, то создаем его
$par = $pdo->getObject('modResource', array('pagetitle' => $data['g1']));
$parent = $modx->newObject('modResource');
$parent->set('pagetitle',$csv[$k]);
$parent->set('alias',$csv[$k]);
$parent->set('parent',$par['id']);
$parent->set('template',2);
$parent->set('class_key','msCategory');
$parent->set('published','1');
$parent->set('hidemenu','0');
$parent->save();
}
$data['parent'] = $newcat['id'];
}
}
if ($v == 'g3') { ///Если поле g3, вычисляем id по транслиту имени каталога
if ($csv[$k]!=='') {
$pdo = $modx->getService('pdoFetch');
$newcat = $pdo->getObject('modResource', array('pagetitle' => $csv[$k]));
if (!$newcat) { ///Если такой id не существует, то создаем его
$par = $pdo->getObject('modResource', array('pagetitle' => $data['g2']));
$parent = $modx->newObject('modResource');
$parent->set('pagetitle',$csv[$k]);
$parent->set('alias',$csv[$k]);
$parent->set('parent',$par['id']);
$parent->set('template',2);
$parent->set('class_key','msCategory');
$parent->set('published','1');
$parent->set('hidemenu','0');
$parent->save();
}
$data['parent'] = $newcat['id'];
}
}
if ($v == 'gallery') {
$gallery[] = $csv[$k];
}
elseif (isset($data[$v]) && !is_array($data[$v])) {
$data[$v] = array($data[$v], $csv[$k]);
}
elseif (isset($data[$v]) && is_array($data[$v])) {
$data[$v][] = $csv[$k];
}
else {
$data[$v] = $csv[$k];
}
}
$is_product = false;
Черт, в коде облажался, вместо $data['parent']=381 нужно поставить $data['parent']=$parent_id
И добавить забыл, родительские категории указываются как group1, group2 и group3
Администрация, исправьте, пожалуйста!
И добавить забыл, родительские категории указываются как group1, group2 и group3
Администрация, исправьте, пожалуйста!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.