[英]Add the drupal commerce products to cart without page reload programmatically
如何执行以下任务:
我有2个div,在第一个div中,我有产品名称并添加链接,如果用户单击添加链接,则应在第二个div中添加相关产品。
在底部的第二个div中,我已添加到购物车按钮,因此在单击购物车按钮时,所有添加的产品都应在drupal Commerce中添加到购物车页面。
仅供参考,请检查以下链接:-
http://buildabagpartyfavours.ca/pages/build-your-own-goodie-bag
如果有人使用Drupal 8,并且想解决这个问题,可以这样:
如果您具有产品版本ID $ var_id,则可以使用“ use-ajax”类创建“ a”标签:
<a href="/add/product/'.$var_id.'" class="use-ajax -add-to-cart">Add to cart</a>
在routing.yml中,您必须使用控制器添加以下路径:
path: '/add/product/{pid}'
_controller: Drupal\MY_MODULE\Controller\ShopProductController::addToCart
并且您必须使用ajax响应创建控制器:
namespace Drupal\MY_MODULE\Controller;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\Entity\OrderItem;
use Drupal\commerce_order\Entity\Order;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;
use Drupal\Core\Ajax\CssCommand;
class ShopProductController {
public function addToCart($pid) {
$ajax_response = new AjaxResponse();
#### ADD TO CART ####
// variation_id of product.
if (isset($pid) && !empty($pid)) {
$store_id = 1;
$order_type = 'default';
$variation_id = $pid;
$entity_manager = \Drupal::entityManager();
$cart_manager = \Drupal::service('commerce_cart.cart_manager');
$cart_provider = \Drupal::service('commerce_cart.cart_provider');
// Drupal\commerce_store\Entity\Store::load($store_id);
$store = $entity_manager->getStorage('commerce_store')->load($store_id);
$product_variation = $entity_manager->getStorage('commerce_product_variation')->load($variation_id);
// order type and store
$cart = $cart_provider->getCart($order_type, $store);
if (!$cart) {
$cart = $cart_provider->createCart($order_type, $store);
}
//Create new order item
$order_item = $entity_manager->getStorage('commerce_order_item')->create(array(
'type' => 'default',
'purchased_entity' => (string) $variation_id,
'quantity' => 1,
'unit_price' => $product_variation->getPrice(),
));
$order_item->save();
$cart_manager->addOrderItem($cart, $order_item);
$ajax_response->addCommand(new HtmlCommand('.-add-to-cart', '<span class="-added">Added</span>'));
}
return $ajax_response;
}
}
让您的按钮触发一些AJAX调用,传递产品ID,并在AJAX回调脚本的另一侧收集产品ID,从中创建订单项并将其添加到购物车( https://www.drupal.org/node/1288414 ) 。
AJAX调用完成后,您将不得不调用另一个来更新购物车块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.