Вы здесь

Как добавить дополнительные товары при оформлении заказа в drupal commerce?

0

Есть страница заказа в drupal commerce. Шаг в заказе всего один и на этой странице находятся все поля: какие товары в корзине, информация о покупателе, информация о получателе, вид оплаты, дополнительные товары.

Выбор дополнительных товаров осуществляется при клике на чекбоксы:

Если отмечен товар, то при клике на оформление заказа он добавляется к заказу и сразу идёт переход на выбранный способ оплаты.

Как добавить блок с дополнительными товарами в оформление заказа?

Версия Drupal: 
7.x
Связанные проекты: 
Drupal Commerce
Вопрос задан 24.04.2016 - 10:35
Аватар пользователя shu
shu
178

Ответы

0

Решил так:

/*
 * 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']['MYMODULE_additional']['MYMODULE_additional'] as $key => $value) {
    if($value != 0){
      $product = commerce_product_load($key);
      $line_item = commerce_product_line_item_new($product, 1);
      commerce_cart_product_add($user->uid, $line_item);      
    }
  }
}

/**
 * Implements hook_commerce_checkout_pane_info()
 * Добавляем новую панель. В ней будут выводиться дополнительные продукты
 */
function MYMODULE_commerce_checkout_pane_info() {
  $panes = array();
  // Custom checkout pane.
  $panes['MYMODULE_additional'] = array(
    'title' => 'Additional',
    'weight' => 11,
    'base' => 'MYMODULE_additional_pane',
    'fieldset' => TRUE,
  );
  return $panes;
}

/**
 * Implements base_settings_form().
 * Настройки панели
 */
function MYMODULE_additional_pane_settings_form($checkout_pane) {
  $form = array();

  return $form;
}

/**
 * Implements base_checkout_form()
 * Содержимое панели
 */
function MYMODULE_additional_pane_checkout_form($form, $form_state, $checkout_pane, $order) {

  $checkout_form = array();

  //добавляем дополнительные продукты в форму оформления заказа
  $product_options = products_added_to_checkout_page();

  $checkout_form['MYMODULE_additional'] = array(
    '#weight' => 10,
    '#type' => 'checkboxes',
    '#options' => $product_options,
  );

  return $checkout_form;
}

/*
 * Выдаёт список товаров в виде элементов-чекбоксов
 */
function products_added_to_checkout_page(){
  $products = array();

  // в продукте есть галка, если её поставить, то эти товары будут выбираться из базы данных
  $products = db_select('field_data_field_add_to_checkout', 'a')
  ->fields('a', array('entity_id'))
  ->condition('a.field_add_to_checkout_value', '1')
  ->execute()
  ->fetchAll();

  $pids = array();
  foreach ($products as $key => $pid) {
    $pids[] = $pid->entity_id;
  }

  $products_load = commerce_product_load_multiple($pids);

  $product_options = array();
  foreach ($products_load as $key => $product) {
    $images = field_get_items('commerce_product', $product,'field_commerce_product_image');
    $image = isset($images[0]) ? 
      theme('image_style',array('style_name' => 'checkout_70x70', 'path' => $images[0]['uri'])) : '';

    $price = commerce_product_calculate_sell_price($product);
    $price_display = commerce_currency_format($price['amount'], $price['currency_code'], $product);
    $output[$product->product_id] = '<span class="product-image">'.$image . '</span>' . 
      '<span class="product-title">' . $product->title . '</span>' .
      ' <span class="product-price">(' . $price_display . ')</span>';
  }

  return $output;
}
Ответ дан 24.04.2016 - 23:33
Аватар пользователя shu
shu
178
0

через hook_commerce_checkout_pane_info создайте кастомную панель, в которой будете выводить необходимые товары.

Ответ дан 24.04.2016 - 13:16

Вопрос был про то, КАК именно их добавить в корзину, сразу перед оплатой.

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

Как добавить блок с дополнительными товарами в оформление заказа?

Как добавить дополнительные товары при оформлении заказа в drupal commerce?

Не вижу упоминания корзины. Есть только вопрос про блок с дополнительными товарами.

Комментарий оставлен 25.04.2016 - 21:12