Como adicionar o botão "Comprar agora" no Magento 2.1? [fechadas]

7

Preciso de ajuda para adicionar o botão "Comprar agora" na página de detalhes do produto. Obrigado.

Minh Tam Pham
fonte
Deseja alterar "Adicionar ao carrinho" para "Comprar agora"? assumir apenas renomear.
precisa saber é o seguinte
Quero adicionar outro botão (botão "Comprar agora") ao lado do botão "Adicionar ao carrinho". Esses dois botões são diferentes. Obrigado
Minh Tam Pham
E qual é essa diferença? Como devemos ajudá-lo se você não explica o que precisa?
Fabian Schmengler
1
Eu desenvolvi módulo simples de adicionar comprar agora botão que você pode baixar aqui github.com/prince108/Magento2-Buynow
Príncipe Patel
2
Eu desenvolvi módulo simples de adicionar comprar agora botão, baixar aqui: github.com/prince108/Magento2-Buynow
Príncipe Patel

Respostas:

13

Aqui está um módulo que adiciona um botão 'Comprar agora' que leva o cliente diretamente ao checkout com o produto escolhido no carrinho.

Diretório do módulo:

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

seções.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;
        });
    }
});

Ele funciona criando uma versão modificada do controlador usada para adicionar um produto ao carrinho. Ao clicar em 'Comprar agora', a ação do formulário 'adicionar produto' é alternada para o controlador personalizado, que é redirecionado para a página de checkout se o item for adicionado com sucesso ao carrinho.

Aaron Allen
fonte
Ei, depois de implementar o módulo no magento 2, posso ver o botão "Comprar agora" e o buy-now.js está funcionando após a verificação com depuração, mas não consigo acessar o BuyNow / Controller / Add.php. Eu tento alterar os arquivos xml, mas ainda assim eu recebo o controlador de núcleo em vez do personalizado.
Goldy
1
Olá, fiz algumas atualizações para buy-now.jse Add.php. Faça essas alterações e tente novamente.
Aaron Allen
PERFEITO, obrigado! . A propósito, de onde você obtém as informações sobre a ação do formulário nos js? e por que existe xsi: noNamespaceSchemaLocation = "urn: magento: module: Magento_Customer: etc / seções.xsd" em --sections.xml--?
Goldy
Eu criei o módulo conforme o layout acima e instalei com sucesso, mas o botão buynow não está aparecendo na página do produto, você pode me ajudar por isso.
Tush
Oi eu seguir esta é funcionando bem, mas ao clicar comprar agora botão Adicionar ao carrinho mudança de adicionar então redirecionar para a página de checkout magento.stackexchange.com/questions/269987/...
Magento 2
1

Estou assumindo que você conhece a criação básica do módulo. Siga as etapas abaixo:

  1. Crie um novo layout de módulo.

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. Crie um arquivo de modelo

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

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

Referência

Krishna ijjada
fonte