web-dev-qa-db-ja.com

カートに複数のアイテムを追加する

Drupal 7、Ubercart 3.0の場合、一度にカートに複数の製品を追加するフォームを作成するのに役立つモジュールまたは詳細なハウツーがありますか?

3
user5668

これを行う1つの方法は、ビューの一括操作モジュールを使用することです。最近コミットされたパッチがあり、ここに「カートに追加」アクションを提供します http://drupal.org/node/15537

ビューが作成されたら(フィールドのみ)、コンテンツVBOフィールドを追加し、そこから[カートに追加]アクションを選択できます。理論的には、カートへのリダイレクトは、フォームが送信されたときに適用されるビューを呼び出すときに?destination = cartパラメータを含めることで実行できます。ただし、現時点では、選択されているすべてのアイテムではなく、1つのアイテムとリダイレクトのみが追加されているようです。

3
natuk

これはあなたを助けるはずです。以下のコードは、テンプレートファイルまたは関数に配置できます。ただし、関数で使用する場合は、フォームを返し、レンダリングされたHTMLに追加する必要があります。

$form = drupal_get_form('multi_add_form');    

function multi_add_form() {
  $form = array();

  // Make the products array in the form a tree.
  $form['products'] = array(
    '#tree' => TRUE,
  );

  // Use an array of product nids to build the form.
  $nids = array(1, 2);

  // Add a quantity field for each product. from 0 to 10
  foreach ($nids as $nid) {
    $node = node_load($nid);

       $x = 0;
   $options = array();
   while ($x <= 10) {
      $options[$x] = $x;
      $x++;
   }


    $form['products'][$nid]['qty'] = array(
      '#type' => 'select',
      '#options' => $options,
      '#title' => t('Amount'),
      '#default_value' => 0,
    );
  }

  // Add an add to cart button.
  $form['add_to_cart'] = array(
    '#type' => 'submit',
    '#value' => t('Add to cart'),
  );

  return $form;
}

function multi_add_form_submit($form, &$form_state) {
  // Loop through the products array.
  foreach ($form_state['values']['products'] as $key => $value) {
    // The key is the product nid, the value holds the qty.
    if ($value['qty'] > 0) {
      // Add the item to the cart if the quantity was increased.
      uc_cart_add_item($key, $value['qty']);
    }
  }

  // Display a message and redirect to the cart.
  drupal_set_message(t('Your cart has been updated.'));

  $form_state['redirect'] = 'cart';
}

print drupal_render($form);
1
DD dev