Пример программного создания товара и его вариации:
Commerce 2 (Drupal 8+):
// Create variation
$variation = \Drupal\commerce_product\Entity\ProductVariation::create([
'type' => 'default',
'sku' => 'PRODUCT1',
'title' => 'Product 1',
'price' => ['number' => 10, 'currency_code' => 'USD'], // $10
]);
$variation->save();
// Create product
$product = \Drupal\commerce_product\Entity\Product::create([
'type' => 'default',
'title' => $variation->label(),
'variations' => $variation,
'stores' => 1, // Store id
]);
$product->save();
Commerce 1 (Drupal 7):
// Create product
$product = commerce_product_new('product');
$product->sku = 'PROD-SKU';
$product->title = 'Product title';
$product->language = LANGUAGE_NONE;
$product->uid = 1;
$product->commerce_price[LANGUAGE_NONE][0]['amount'] = commerce_currency_decimal_to_amount(10, 'USD'); // $10
$product->commerce_price[LANGUAGE_NONE][0]['currency_code'] = 'USD';
commerce_product_save($product);
// Create product display
$node = (object)array('type' => 'product_display');
node_object_prepare($node);
$node->title = 'Product display title';
$node->uid = 1;
$node->field_product[LANGUAGE_NONE][]['product_id'] = $product->product_id;
$node->language = LANGUAGE_NONE;
node_save($node);
Написанное актуально для
Commerce 1.x, Commerce 2.x
Похожие записи
Комментарии
Интересно Это равноценно??
да
Вопросик:
Допустим я создал так 1 продукт и 1 дисплей.
На следующий день я создал ещё один продукт и его нужно добавить в этот дисплей, понятно, что нужно вызвать:
А можно ли где то в пред обработке &$variables... подцеплять дополнительные product_id??
что такое "в пред обработке &$variables"?
Я думал вы меня поймете...)))
Я имел ввиду что перед визуализацией страницы добавить новый id продукта. Но не знаю куда копать. Либо в template.php либо в своём модуле...
Хотелось бы чтобы где то где только только загрузился дисплей(страница) в обработку перед выводом сообщить обработчику, что у него не один продукт, ну то есть не только тот(те) продукт, но и ещё которые тоже его как будто и они прописаны у него в базе... Может так только сложнее?
http://xandeadx.ru/blog/drupal/628
а как присвоить статус товара отличный от дефолтного?
логично предположить, что нужно изменить $product->status
$product->commerce_price[LANGUAGE_NONE][0]['amount'] = 10 * 100; // $10
Не то чтобы меня напрягает умножить на 100, нет. Но вывод копеек достал! У меня в магазине(офлайн...)))), бывает, не берут эту желтую мелочь...)))
Первое решение, вроде самое удобное - Drupal Commerce Extra Price Formatters . Полностью не решает проблемы. "RRP / Your Price" - удобный формат для вывода где-нибудь, но ни при оформлении заказа!
В коммерце жестко для этого прописан формат - 'type' => 'commerce_price_formatted_components' - commerce_order_handler_area_order_total.inc. То есть определить другой формат ни как не получится. Либо заменять вывод (#markup). (Размышляю) Может переопределить
Я ещё так ни разу не делал, это же ООП.
Вообщем мне показалось проще:
Только срузу же все цены разделить на 100!
hook_commerce_currency_info Как здесь обсуждают или здесь: http://www.drupal.ru/node/95438. Пришлось просто http вставить - а то пишет - похоже на спам - слишком много ссылок...)))
Есть еще красивое решение с использованием EntityAPI http://dropbucket.org/node/288
а как программно добавить товар в корзину?
@DeX
commerce_cart_product_add
Ссылка не работает. Может кому пригодится, восстановил инфу из архива:
https://truewebstories.ru/zametki/programmno-sozdat-tovar-v-commerce-kr…
Добавить комментарий