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

Главные вкладки

Аватар пользователя solar25 solar25 25 февраля 2021 в 17:14

Всем привет. Помогите в DC на D7 разобраться.
Имеется следующий код:

<?php
function kladr_commerce_addtocart_menu() {
  
$items = array();
  
$items['commerce/add-to-cart/%'] = array(
    
'title' => 'Add item to cart',
    
'type' => MENU_CALLBACK,
    
'access arguments' => array('access checkout'),
    
'page callback' => 'kladr_commerce_addtocart',
    
'page arguments' => array(23),
  );
return 
$items;
}

function 

kladr_commerce_addtocart($product_id$quantity 1) {
  
// Add the product to the current users cart.
  
commerce_cart_product_add_by_id($product_id$quantity);
 
  
// Go to the cart page.
  
drupal_goto('cart');
?>

При переходе по ссылке commerce/add-to-cart/1/2/
корзину добавляется line item с id продукта 1 и количеством 2.
Я добавил в тип продукта и line item кастомное поле field_kn и хочу, чтобы при переходе
по ссылке commerce/add-to-cart/1/2/asdf
создавался line item со значением поля field_kn ='asdf'.

Мануалы не помогли решить проблему, в интерфейсе отловил запрос, он обращается к полю line_item_fields[field_kn][und][0][value]...пытался по-разному не получается, подскажите пжл

Лучший ответ

Аватар пользователя solar25 solar25 27 февраля 2021 в 13:09

Спасибо, получилось, сделал так:

<?php
function kladr_commerce_addtocart_menu() {
  
$items = array();
  
$items['commerce/add-to-cart/%'] = array(
    
'title' => 'Add item to cart',
    
'type' => MENU_CALLBACK,
    
'access arguments' => array('access checkout'),
    
'page callback' => 'kladr_commerce_addtocart1',
    
'page arguments' => array(2345),
  );
return 
$items;
}
function 
kladr_commerce_addtocart1($product_id$quantity 1$kadnum$address) {
  
// Add the product to the current users cart.
$combine TRUE;
$product commerce_product_load($product_id);
$line_item commerce_product_line_item_new($product$quantity0$data = array(), $line_item_type 'product');
$line_item_wrapper entity_metadata_wrapper('commerce_line_item'$line_item);
$line_item_wrapper->field_kn->set($kadnum);
$line_item_wrapper->field_address->set($address);
$line_item commerce_cart_product_add($GLOBALS['user']->uid$line_item$combine);
  
// Go to the cart page.
  
drupal_goto('cart');
}
?>

Комментарии

Аватар пользователя adano adano 25 февраля 2021 в 17:50
<?php
'page arguments' => array(234),
?>

Лучше полностью задачу опишите и чего добиться хотите.
field_kn - это что?

Аватар пользователя solar25 solar25 25 февраля 2021 в 18:15

field_kn это доп поле в типе продукта. Значение которое должно в нем сохраняться передаётся из внешней системы, каждый раз оно уникальное. Мне нужно чтобы на странице с продуктами(одного типа) по нажатию на кнопку «добавить в корзину» происходило, собственно добавление продукта в корзину с сохранением в field_kn исходного значение из внешней системы

Аватар пользователя solar25 solar25 27 февраля 2021 в 13:09

Спасибо, получилось, сделал так:

<?php
function kladr_commerce_addtocart_menu() {
  
$items = array();
  
$items['commerce/add-to-cart/%'] = array(
    
'title' => 'Add item to cart',
    
'type' => MENU_CALLBACK,
    
'access arguments' => array('access checkout'),
    
'page callback' => 'kladr_commerce_addtocart1',
    
'page arguments' => array(2345),
  );
return 
$items;
}
function 
kladr_commerce_addtocart1($product_id$quantity 1$kadnum$address) {
  
// Add the product to the current users cart.
$combine TRUE;
$product commerce_product_load($product_id);
$line_item commerce_product_line_item_new($product$quantity0$data = array(), $line_item_type 'product');
$line_item_wrapper entity_metadata_wrapper('commerce_line_item'$line_item);
$line_item_wrapper->field_kn->set($kadnum);
$line_item_wrapper->field_address->set($address);
$line_item commerce_cart_product_add($GLOBALS['user']->uid$line_item$combine);
  
// Go to the cart page.
  
drupal_goto('cart');
}
?>