Вы здесь

Ошибка при оформлении заказа в drupal commerce

0

Половину дня бьюсь над ошибкой, не могу побороть...
Возникает при оформлении заказа, на странице оплаты(/checkout/NUMBER/payment), если добавлять в него товары программно:

Notice: Undefined index: context в функции eval() (строка 18 в файле /sites/all/modules/rules/modules/php.eval.inc(125) : eval()'d code).
EntityMalformedException: Отсутствует связующее свойство у сущности типа commerce_product. в функции entity_extract_ids() (строка 7880 в файле /includes/common.inc).

Товар в заказ добавляю при оформлении заказа вот так:

global $user;
$line_item = commerce_product_line_item_new($product, $quantity);
$line_item_added = commerce_cart_product_add($user->uid, $line_item);

Может кто-то сталкивался с такой ошибкой?

Версия Drupal: 
7.x
Связанные проекты: 
Drupal Commerce
Вопрос задан 03.07.2016 - 13:25
Аватар пользователя shu
shu
163

Ответы

1

Погуглите! есть куча примеров как можно добавить товар к заказу.

Ответ дан 04.07.2016 - 20:29

Хм.. Перед тем, как задать вопрос погуглил. Испробовал 3 или 4 способа, которые выдавали такую же ошибку. Решил, что дело не в способе добавления товара к заказу.
После этого решил сюда написать.

Комментарий оставлен 05.07.2016 - 13:24

я могу сказать, что товары к заказу добавляются не так. Напишите полностью свою функцию.

Комментарий оставлен 05.07.2016 - 13:46

Я добавляю функцию на кнопку "Продолжить" в форме чекаута:

/*
 * Implements hook_form_alter().
 */
function MYMODULE_form_alter(&$form, &$form_state, $form_id){
  if($form_id == 'commerce_checkout_form_checkout'){
    array_unshift($form['buttons']['continue']['#submit'],'add_additional_products_to_order');
  }
}

Дальше в этой функции добавляю товары к заказу

/*
 * Функция, которая добавляет дополнительные товары к заказу
 */
function add_additional_products_to_order($form, &$form_state) {
  global $user;

  // Тут перебирается массив чекбоксов. Если чекбокс отмечен, то добавляем товар
  foreach ($form_state['values']['checkout_additional']['checkout_additional'] as $key => $value) {
    if($value != 0){
      $product = commerce_product_load($key);
      $line_item = commerce_product_line_item_new($product, 1);
      $line_item_added = commerce_cart_product_add($user->uid, $line_item);      
    }
  }
}

Комментарий оставлен 05.07.2016 - 23:39

не знаю, где вы смотрели, но у меня первая ссылка в выдаче - http://drupal.stackexchange.com/questions/89412/programmatically-creatin...
и 3 ссылка пример с комерсгайс - https://commerceguys.com/blog/creating-orders-drupal-commerce-api

<?php
global $user;
$product_id = 1;

// Create the new order in checkout; you might also check first to
// see if your user already has an order to use instead of a new one.
$order = commerce_order_new($user->uid, 'checkout_checkout');
// Save the order to get its ID.
commerce_order_save($order);

// Load whatever product represents the item the customer will be
// paying for and create a line item for it.
$product = commerce_product_load($product_id);
$line_item = commerce_product_line_item_new($product, 1, $order->order_id);

// Save the line item to get its ID.
commerce_line_item_save($line_item);

// Add the line item to the order using fago's rockin' wrapper.
$order_wrapper = entity_metadata_wrapper('commerce_order', $order);
$order_wrapper->commerce_line_items[] = $line_item;

// Save the order again to update its line item reference field.
commerce_order_save($order);

// Redirect to the order's checkout form. Obviously, if this were a
// form submit handler, you'd just set $form_state['redirect'].
drupal_goto('checkout/' . $order->order_id);
?>
Комментарий оставлен 08.07.2016 - 18:12