Magento 2.1に「今すぐ購入」ボタンを追加する方法 [閉まっている]


7

製品詳細ページに「今すぐ購入」ボタンを追加するのに助けが必要です。ありがとう。


「カートに追加」を「今すぐ購入」に変更しますか?名前を変更するだけと仮定します。
クリシュナイジャダ2016

「カートに追加」ボタンの横に「今すぐ購入」ボタンを追加したい。これら2つのボタンは違います。ありがとう
Minh Tam Pham

そして、この違いは何ですか?あなたが必要なものを説明しない場合、私たちはどのようにあなたを助けるべきですか?
Fabian Schmengler、2016

1
ここからダウンロードできる「今すぐ購入」ボタンを追加する簡単なモジュールを開発しました。github.com/ prince108 / Magento2
Prince Patel

2
「今すぐ購入」ボタンを追加する簡単なモジュールを開発しました。ここからダウンロードしてください:github.com/prince108/Magento2-Buynow
Prince Patel

回答:


13

選択した商品をカートでチェックアウトするために顧客を直接連れて行く「今すぐ購入」ボタンを追加するモジュールは次のとおりです。

モジュールディレクトリ:

|   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

Add.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();
        }
    }
}

routes.xml

<?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>

sections.xml

<?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;
        });
    }
});

カートに商品を追加するために使用するコントローラーの修正バージョンを作成することで機能します。[今すぐ購入]をクリックすると、[商品を追加]フォームのアクションがカスタムコントローラに切り替わり、アイテムがカートに正常に追加されると、チェックアウトページにリダイレクトされます。


ねえ、箱から出してmagento 2でモジュールを実装した後、「今すぐ購入」ボタンが表示され、buy-now.jsがデバッグでチェックした後に機能していますが、BuyNow / Controller / Add.phpに到達できません。xmlファイルを変更しようとしましたが、カスタムコントローラーではなくコアコントローラーを取得しています。
Goldy

1
こんにちは、とにいくつかの更新をbuy-now.js行いましたAdd.php。それらの変更を行って、もう一度試してください。
アーロン・アレン、

パーフェクト、ありがとう!。ところで、jsのフォームアクションに関する情報はどこで入手できますか。--sections.xml--にxsi:noNamespaceSchemaLocation = "urn:magento:module:Magento_Customer:etc / sections.xsd"があるのはなぜですか?
Goldy

上記のレイアウトに従ってモジュールを作成し、正常にインストールしましたが、製品ページにBuynowボタンが表示されていません。これを手伝ってください。
プッシュ

こんにちは私はそれが正常に動作しますが、クリックの上、それはチェックアウトページにリダイレクトし、その後追加するカートの変更になりましたボタンの追加]を購入しています。この従わmagento.stackexchange.com/questions/269987/...を
Magentoの2

1

あなたは基本的なモジュール作成を知っていると思います。以下の手順に従ってください:

  1. 新しいモジュールレイアウトを作成します。

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. テンプレートファイルを作成する

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

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

参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.