将drupal commerce产品添加到购物车,无需以编程方式重新加载页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将drupal commerce产品添加到购物车,无需以编程方式重新加载页面相关的知识,希望对你有一定的参考价值。

如何实施以下任务: -

我有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: DrupalMY_MODULEControllerShopProductController::addToCart

您必须使用ajax响应创建控制器:

    namespace DrupalMY_MODULEController;

    use Drupalcommerce_orderEntityOrderInterface;
    use Drupalcommerce_orderEntityOrderItem;
    use Drupalcommerce_orderEntityOrder;
    use DrupalCoreAjaxAjaxResponse;
    use DrupalCoreAjaxhtmlCommand;
    use DrupalCoreAjaxCssCommand;

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');

            // Drupalcommerce_storeEntityStore::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调用完成后,您将不得不再调用另一个,以更新购物车块。

以上是关于将drupal commerce产品添加到购物车,无需以编程方式重新加载页面的主要内容,如果未能解决你的问题,请参考以下文章

Drupal Commerce 以模态显示结帐

Drupal Commerce 产品图像未显示在查看模式节点:产品列表中

xml 在PHPStorm中运行Drupal Commerce测试的配置。添加到$ PROJECT / .idea / runConfigurations。化合物“商业测试跑步者”将l

Drupal 7 Commerce Frontpage VIEW 不显示产品

如何使 Drupal Commerce 配置实体可修改

WordPress Woocommerce中具有单独价格的产品项目