Làm cách nào để thêm nút Mua ngay bây giờ Nút trong Magento 2.1? [đóng cửa]


7

Tôi cần trợ giúp để thêm nút "Mua ngay" trên trang chi tiết sản phẩm. Cảm ơn.


Bạn có muốn thay đổi "Thêm vào giỏ hàng" thành "Mua ngay" không? giả sử chỉ đổi tên.
Krishna ijjada

Tôi muốn thêm một nút khác (nút "Mua ngay") bên cạnh nút "Thêm vào giỏ hàng". Hai nút này là sự khác biệt. Cảm ơn
Minh Tâm Phạm

Và sự khác biệt này là gì? Chúng tôi nên giúp bạn như thế nào nếu bạn không giải thích những gì bạn cần?
Fabian Schmengler

1
Tôi đã phát triển mô-đun đơn giản để thêm nút mua ngay bây giờ, bạn có thể tải xuống từ đây github.com/prince108/Magento2-Buynow
Prince Patel

2
Tôi đã phát triển mô-đun đơn giản để thêm nút mua ngay, tải xuống tại đây: github.com/prince108/Magento2-Buynow
Prince Patel

Câu trả lời:


13

Dưới đây là mô-đun có thêm nút 'Mua ngay' để khách hàng trực tiếp thanh toán với sản phẩm được chọn trong giỏ hàng.

Thư mục mô-đun:

|   registration.php
|   
+---Controller
|   \---Cart
|           Add.php
|           
+---etc
|   |   module.xml
|   |   
|   \---frontend
|           routes.xml
|           sections.xml
|           
\---view
    \---frontend
        +---layout
        |       catalog_product_view.xml
        |       
        +---templates
        |       buynow.phtml
        |       
        \---web
            \---js
                    buy-now.js

Thêm.php

<?php

namespace AAllen\BuyNow\Controller\Cart;


class Add extends \Magento\Checkout\Controller\Cart\Add
{
    /**
     * Add product to shopping cart action
     *
     * @return \Magento\Framework\Controller\Result\Redirect
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
     */
    public function execute()
    {
        if (!$this->_formKeyValidator->validate($this->getRequest())) {
            return $this->resultRedirectFactory->create()->setPath('*/*/');
        }

        $params = $this->getRequest()->getParams();
        try {
            if (isset($params['qty'])) {
                $filter = new \Zend_Filter_LocalizedToNormalized(
                    ['locale' => $this->_objectManager->get('Magento\Framework\Locale\ResolverInterface')->getLocale()]
                );
                $params['qty'] = $filter->filter($params['qty']);
            }

            $product = $this->_initProduct();
            $related = $this->getRequest()->getParam('related_product');

            /**
             * Check product availability
             */
            if (!$product) {
                return $this->goBack();
            }

            // empty the cart.
            $this->cart->truncate();

            $this->cart->addProduct($product, $params);
            if (!empty($related)) {
                $this->cart->addProductsByIds(explode(',', $related));
            }

            $this->cart->save();

            /**
             * @todo remove wishlist observer \Magento\Wishlist\Observer\AddToCart
             */
            $this->_eventManager->dispatch(
                'checkout_cart_add_product_complete',
                ['product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse()]
            );

            if (!$this->_checkoutSession->getNoCartRedirect(true)) {
                $baseUrl = $this->_objectManager->get('\Magento\Store\Model\StoreManagerInterface')
                        ->getStore()->getBaseUrl();
                // redirect to checkout page
                return $this->goBack($baseUrl.'checkout/', $product);
            }
        } catch (\Magento\Framework\Exception\LocalizedException $e) {
            if ($this->_checkoutSession->getUseNotice(true)) {
                $this->messageManager->addNotice(
                    $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($e->getMessage())
                );
            } else {
                $messages = array_unique(explode("\n", $e->getMessage()));
                foreach ($messages as $message) {
                    $this->messageManager->addError(
                        $this->_objectManager->get('Magento\Framework\Escaper')->escapeHtml($message)
                    );
                }
            }

            $url = $this->_checkoutSession->getRedirectUrl(true);

            if (!$url) {
                $cartUrl = $this->_objectManager->get('Magento\Checkout\Helper\Cart')->getCartUrl();
                $url = $this->_redirect->getRedirectUrl($cartUrl);
            }

            return $this->goBack($url);

        } catch (\Exception $e) {
            $this->messageManager->addException($e, __('We can\'t add this item to your shopping cart right now.'));
            $this->_objectManager->get('Psr\Log\LoggerInterface')->critical($e);
            return $this->goBack();
        }
    }
}

tuyến đường

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="buynow" frontName="buynow">
            <module name="AAllen_BuyNow"/>
        </route>
    </router>
</config>

phân đoạn

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="buynow/cart/add">
        <section name="cart"/>
    </action>
</config>

catalog_product_view.xml

<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="product.info.addtocart">

            <block class="Magento\Framework\View\Element\Template" template="AAllen_BuyNow::buynow.phtml"/>
        </referenceBlock>
        <referenceBlock name="product.info.addtocart.additional">

            <block class="Magento\Framework\View\Element\Template" template="AAllen_BuyNow::buynow.phtml"/>
        </referenceBlock>
    </body>
</page>

buynow.phtml

<button type="submit" title="<?php /* @escapeNotVerified */ echo __('Buy Now') ?>" id="buy-now" class="action buynow primary" data-mage-init='
{
    "AAllen_BuyNow/js/buy-now": {
        "form": "#product_addtocart_form"
    }
}
'>
    <span><?php /* @escapeNotVerified */ echo __('Buy Now') ?></span>
</button>

buy-now.js

define([
    'jquery'
], function ($) {
    "use strict";

    return function (config, element) {

        $(element).click(function () {
            var form = $(config.form);

            // change form action
            var baseUrl = form.attr('action'),
                buyNowUrl = baseUrl.replace('checkout/cart/add', 'buynow/cart/add');

            form.attr('action', buyNowUrl);

            form.trigger('submit');

            // set form action back
            form.attr('action', baseUrl);

            return false;
        });
    }
});

Nó hoạt động bằng cách tạo một phiên bản sửa đổi của bộ điều khiển được sử dụng để thêm sản phẩm vào giỏ hàng. Khi nhấp vào 'Mua ngay', hành động của biểu mẫu 'thêm sản phẩm' được chuyển sang bộ điều khiển tùy chỉnh, sau đó chuyển hướng đến trang thanh toán nếu mặt hàng được thêm thành công vào giỏ hàng.


Xin chào, Sau khi triển khai mô-đun tại magento 2, tôi có thể thấy nút "Mua ngay" và buy-now.js đang hoạt động sau khi kiểm tra với gỡ lỗi nhưng tôi không thể truy cập MuaNow / Trình điều khiển / Add.php. Tôi cố gắng thay đổi các tập tin xml nhưng tôi vẫn nhận được bộ điều khiển lõi thay vì tập tin tùy chỉnh.
Goldy

1
Xin chào, tôi đã thực hiện một vài cập nhật buy-now.jsAdd.php. Thực hiện những thay đổi và thử lại.
Aaron Allen

HOÀN HẢO, cảm ơn bạn! . Nhân tiện, bạn lấy thông tin về hành động biểu mẫu trên js ở đâu? và tại sao lại có xsi: noNamespaceSchemaLocation = "urn: magento: module: Magento_Customer: etc / part.xsd" trên --sections.xml--?
Goldy

Tôi đã tạo mô-đun theo bố cục ở trên & được cài đặt thành công, nhưng nút buynow không hiển thị trên trang sản phẩm, bạn có thể vui lòng hỗ trợ tôi cho việc này không.
Tush

Xin chào, tôi làm theo cách này hoạt động tốt nhưng khi nhấp vào nút mua ngay Thêm vào thay đổi giỏ hàng để thêm sau đó nó chuyển hướng đến trang thanh toán magento.stackexchange.com/questions/269987/ Lỗi
Magento 2

1

Tôi giả sử rằng bạn biết việc tạo mô-đun cơ bản. Thực hiện theo các bước dưới đây:

  1. Tạo một bố cục mô-đun mới.

Vendor/Module/view/frontend/layout/catalog_product_view.xml

<?xml version="1.0"?>
<body>
    <referenceContainer name="product.info.social">
        <block class="Vendor\Module\Block\Product\View\Extra"
            name="product.view.extra"
            template="Vendor_Module::product/view/extra.phtml"
            after="-">
        </block>
    </referenceContainer>
</body>
  1. Tạo một tệp mẫu

Vendor/Module/view/frontend/templates/product/view/extra.phtml

<h3><?php echo 'Custom Button'; ?></h3>

Tài liệu tham khảo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.