Drupal → Программно создать товар в Commerce
Пример программного создания товара и его вариации:
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);
Комментарии
Интересно Это равноценно??
да
Вопросик:
Допустим я создал так 1 продукт и 1 дисплей.
На следующий день я создал ещё один продукт и его нужно добавить в этот дисплей, понятно, что нужно вызвать:
что такое "в пред обработке &$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). (Размышляю) Может переопределить
Вообщем мне показалось проще:
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-kra...
Оставить комментарий