Массовый импорт модификации продуктов [miniShop2]
В поддержке задали вопрос как можно массово добавлять модификации для продуктов (разные цены для разных размеров, артикулы уникальны для каждого размера).
Ниже привожу пример…
постановка
К примеру, есть бюстгальтер с артикулом BL802. У него есть цвет, вес, название, описание и т.п.
И так представлены модификации:
артикул товара; размер; цена; количество; собственный артикул размера; вес
BL802;32A;1860.0;1;BL802-32A;150
BL802;32B;1860.0;1;BL802-32B;150
BL802;32C;1860.0;1;BL802-32C;150
BL802;34B;1896.0;5;BL802-34B;150
BL802;34C;1896.0;0;BL802-34C;150
BL802;36B;1896.0;0;BL802-36B;150
BL802;36C;1896.0;5;BL802-36C;150
BL802;38B;1896.0;5;BL802-38B;150
BL802;38C;1918.0;5;BL802-38C;150
Ниже привожу пример…
постановка
К примеру, есть бюстгальтер с артикулом BL802. У него есть цвет, вес, название, описание и т.п.
И так представлены модификации:
артикул товара; размер; цена; количество; собственный артикул размера; вес
BL802;32A;1860.0;1;BL802-32A;150
BL802;32B;1860.0;1;BL802-32B;150
BL802;32C;1860.0;1;BL802-32C;150
BL802;34B;1896.0;5;BL802-34B;150
BL802;34C;1896.0;0;BL802-34C;150
BL802;36B;1896.0;0;BL802-36B;150
BL802;36C;1896.0;5;BL802-36C;150
BL802;38B;1896.0;5;BL802-38B;150
BL802;38C;1918.0;5;BL802-38C;150
$msoptionsprice = $modx->getService('msoptionsprice');
$msoptionsprice->initialize('web');
/*
* основной артикул продукта выкидываем, он не используется
* в опции модификации идет размер
*/
$modifications = array(
array(
'price' => '1860.0',
'article' => 'BL802-32A',
'weight' => '150',
'options' => array(
'size' => '32A'
)
),
array(
'price' => '1860.0',
'article' => 'BL802-32B',
'weight' => '150',
'options' => array(
'size' => '32B'
)
),
array(
'price' => '1860.0',
'article' => 'BL802-32C',
'weight' => '150',
'options' => array(
'size' => '32C'
)
),
array(
'price' => '1896.0',
'article' => 'BL802-34B',
'weight' => '150',
'options' => array(
'size' => '34B'
)
),
array(
'price' => '1896.0',
'article' => 'BL802-34C',
'weight' => '150',
'options' => array(
'size' => '34C'
)
),
array(
'price' => '1896.0',
'article' => 'BL802-36B',
'weight' => '150',
'options' => array(
'size' => '36B'
)
),
array(
'price' => '1896.0',
'article' => 'BL802-36C',
'weight' => '150',
'options' => array(
'size' => '36C'
)
),
array(
'price' => '1896.0',
'article' => 'BL802-38B',
'weight' => '150',
'options' => array(
'size' => '38B'
)
),
array(
'price' => '1918.0',
'article' => 'BL802-38C',
'weight' => '150',
'options' => array(
'size' => '38C'
)
),
);
/* идентификатор продукта */
$rid = 152;
$modifications = $modx->call('msopModification', 'saveProductModification', array(&$modx, $rid, $modifications));
Комментарии: 18
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
создать/ обновить
кто он? скрипт? так сформируйте массив без пустых значений опций.
ps.Если остались вопросы далее в ТП
Модификация в методе saveProductModification получается именно по набору опций, если для набора опций существует модификация — она будет обновлена, если нет — создана.
Если разные товары, обувь и губки для обуви, у обуви будет размер у губки нет. Если обрабатывать size то в случае пустого значения, будет создаваться как новая опция. У товаров, которых есть пустые значения. В следствии этого, при повторной обработке, он создается заново Логичней всего, обрабатывать модефикации по article. Ибо в таком случае необходимо делать очистку всех модефикаций и заново грузить, так-как при добавленном цвете будет так-же создаваться новый набор модефикаций. Это крайне не удобно с выгрузкой из 1с, так-как придется постоянно делать полную выгрузку и обновлять существующие модефикации не как не получится.
вы можете написать свою логику импорта по аналогии с данным примером.
или может кто знает как после последней строки "$modifications = $modx->call('msopModif...." — взять id этой модификации,? чтобы через pdo внести такой article