Wie füge ich die Schaltfläche "Jetzt kaufen" in Magento 2.1 hinzu? [geschlossen]


7

Ich benötige Hilfe zum Hinzufügen der Schaltfläche "Jetzt kaufen" auf der Produktdetailseite. Vielen Dank.


Möchten Sie "In den Warenkorb" in "Jetzt kaufen" ändern? Angenommen, einfach umbenennen.
Krishna Ijjada

Ich möchte neben der Schaltfläche "In den Warenkorb" eine weitere Schaltfläche (Schaltfläche "Jetzt kaufen") hinzufügen. Diese beiden Tasten sind unterschiedlich. Vielen Dank
Minh Tam Pham

Und was ist dieser Unterschied? Wie sollen wir Ihnen helfen, wenn Sie nicht erklären, was Sie brauchen?
Fabian Schmengler

1
Ich habe ein einfaches Modul entwickelt, um die Schaltfläche "Jetzt kaufen" hinzuzufügen, die Sie hier herunterladen können. Github.com/prince108/Magento2-Buynow
Prince Patel

2
Ich habe ein einfaches Modul entwickelt, um die Schaltfläche "Jetzt kaufen" hinzuzufügen. Laden Sie es hier herunter: github.com/prince108/Magento2-Buynow
Prince Patel

Antworten:


13

Hier ist ein Modul, das eine Schaltfläche "Jetzt kaufen" hinzufügt, mit der der Kunde direkt zur Kasse mit dem ausgewählten Produkt im Warenkorb gelangt.

Modulverzeichnis:

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

route.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>

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

Dazu wird eine modifizierte Version des Controllers erstellt, mit der ein Produkt in den Warenkorb gelegt wird. Wenn Sie auf "Jetzt kaufen" klicken, wird die Aktion des Formulars "Produkt hinzufügen" auf den benutzerdefinierten Controller umgeschaltet, der dann zur Checkout-Seite umleitet, wenn der Artikel erfolgreich in den Warenkorb gelegt wurde.


Hey, nachdem ich das Modul bei Magento 2 sofort implementiert habe, kann ich die Schaltfläche "Jetzt kaufen" sehen und die Datei buy-now.js funktioniert nach Überprüfung mit Debug, aber ich kann BuyNow / Controller / Add.php nicht erreichen. Ich versuche, die XML-Dateien zu ändern, aber ich bekomme immer noch den Core-Controller anstelle des benutzerdefinierten.
Goldy

1
Hallo, ich habe ein paar Updates für buy-now.jsund gemacht Add.php. Nehmen Sie diese Änderungen vor und versuchen Sie es erneut.
Aaron Allen

Perfekt, danke! . Übrigens, woher bekommen Sie die Informationen über die Formularaktion auf dem js? und warum gibt es xsi: noNamespaceSchemaLocation = "urn: magento: module: Magento_Customer: etc / section.xsd" auf --sections.xml--?
Goldy

Ich habe das Modul wie oben beschrieben erstellt und erfolgreich installiert, aber die Schaltfläche "Buynow" wird auf der Produktseite nicht angezeigt. Können Sie mir bitte dabei helfen?
Tush

Hallo, ich folge dem, es funktioniert einwandfrei, aber wenn Sie auf die Schaltfläche Jetzt kaufen klicken, ändern Sie es in den Warenkorb, um es hinzuzufügen, und leiten Sie es dann zur Checkout-Seite weiter. Magento.stackexchange.com/questions/269987/…
Magento 2

1

Ich gehe davon aus, dass Sie die grundlegende Modulerstellung kennen. Befolgen Sie die folgenden Schritte:

  1. Erstellen Sie ein neues Modullayout.

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. Erstellen Sie eine Vorlagendatei

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

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

Referenz

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.