xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Программно создать товар в Commerce

Опубликовано в

Пример программного создания Product и Product Display:

// 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'] = 10 * 100; // $10
$product->commerce_price[LANGUAGE_NONE][0]['currency_code'] = 'USD';
commerce_product_save($product);
 
// 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
Похожие записи

Комментарии RSS

Интересно Это равноценно??

commerce_product_save($product);
// или это?
entity_save('commerce_product', $product);

да

Вопросик:
Допустим я создал так 1 продукт и 1 дисплей.
На следующий день я создал ещё один продукт и его нужно добавить в этот дисплей, понятно, что нужно вызвать:

$node = node_load(123);
$node->field_product[LANGUAGE_NONE][]['product_id'] = $product->product_id;
node_save($node);
А можно ли где то в пред обработке &$variables... подцеплять дополнительные product_id??

что такое "в пред обработке &$variables"?

Я думал вы меня поймете...)))
Я имел ввиду что перед визуализацией страницы добавить новый id продукта. Но не знаю куда копать. Либо в template.php либо в своём модуле...
Хотелось бы чтобы где то где только только загрузился дисплей(страница) в обработку перед выводом сообщить обработчику, что у него не один продукт, ну то есть не только тот(те) продукт, но и ещё которые тоже его как будто и они прописаны у него в базе... Может так только сложнее?

а как присвоить статус товара отличный от дефолтного?

логично предположить, что нужно изменить $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). (Размышляю) Может переопределить

 class commerce_order_handler_area_order_total extends views_handler_area {} 
// как то так:
class mymodule_commerce_order_handler_area_order_total extends commerce_order_handler_area_order_total {} 
Я ещё так ни разу не делал, это же ООП.
Вообщем мне показалось проще:
 /**
* Implements hook_commerce_currency_info_alter().
*
*/
function имя_модуля_commerce_currency_info_alter(&$currencies, $langcode) {
  $currencies['RUB']['decimals'] = 0; // Всё подорожает в 100 раз!
} 
Только срузу же все цены разделить на 100!
hook_commerce_currency_info Как здесь обсуждают или здесь: http://www.drupal.ru/node/95438. Пришлось просто http вставить - а то пишет - похоже на спам - слишком много ссылок...)))

Есть еще красивое решение с использованием EntityAPI http://dropbucket.org/node/288

а как программно добавить товар в корзину?

@DeX
commerce_cart_product_add

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании