Magento 2: Mover botão de pedido de local do pagamento para a barra lateral na página de checkout?

13

Quero mover o botão de pedido do local do pagamento para a barra lateral na página de checkout.

insira a descrição da imagem aqui

Alguém pode me dar uma sugestão?

Edit : Isso é possível (com a resposta / abordagem fornecida) ?

Da minha pesquisa, todo método de pagamento tem seu próprio modelo .html, incluindo um botão. Este botão não é carregado a partir de um modelo knockout.js. Por exemplo, parte do método de pagamento "gratuito":

    <div class="checkout-agreements-block">
        <!-- ko foreach: $parent.getRegion('before-place-order') -->
            <!-- ko template: getTemplate() --><!-- /ko -->
        <!--/ko-->
    </div>
    <div class="actions-toolbar">
        <div class="primary">
            <button class="action primary checkout"
                    type="submit"
                    data-bind="
                    click: placeOrder,
                    attr: {title: $t('Place Order')},
                    css: {disabled: !isPlaceOrderActionAllowed()}
                    ">
                <span data-bind="i18n: 'Place Order'"></span>
            </button>
        </div>
    </div>

Enquanto o método de pagamento "cheque / ordem de pagamento" se parece com este (apenas as diferenças são, enable: (getCode() == isChecked())mas ei, ainda existem diferenças e não há "1 botão geral de pedido geral":

  <div class="checkout-agreements-block">
        <!-- ko foreach: $parent.getRegion('before-place-order') -->
            <!-- ko template: getTemplate() --><!-- /ko -->
        <!--/ko-->
    </div>
    <div class="actions-toolbar">
        <div class="primary">
            <button class="action primary checkout"
                    type="submit"
                    data-bind="
                    click: placeOrder,
                    attr: {title: $t('Place Order')},
                    css: {disabled: !isPlaceOrderActionAllowed()},
                    enable: (getCode() == isChecked())
                    "
                    disabled>
                <span data-bind="i18n: 'Place Order'"></span>
            </button>
        </div>
    </div>

A resposta fornecida apenas move os acordos que resultam em algo como isto:

insira a descrição da imagem aqui

TUYEN TRAN THANH
fonte
Oi - você encontrou uma maneira razoável de fazer isso no final? Obrigado
Tom Burman
Como você obteve sucesso na validação da caixa de seleção dos termos e condições?
Condor

Respostas:

6

Eu tinha o requisito semelhante de alterar o botão de pedido de lugar na parte inferior do bloco de resumo. Como existe um botão de pedido de lugar atribuído a cada forma de pagamento. Criei um botão de pedido de local personalizado ao lado do bloco de resumo do pedido. Ao clicar no botão, ativei o botão de ordem do lugar do método de pagamento selecionado.

Passo 1:

Crie um checkout_index_index.xmlarquivo no

caminho app / code / VendorName / PlaceOrder / view / frontend / layout

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="checkout" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <css src="VendorName_PlaceOrder::css/place_order_button.css"/>
    </head>
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="sidebar" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="summary" xsi:type="array">
                                            <item name="component" xsi:type="string">VendorName_PlaceOrder/js/view/summary</item>
                                            <item name="config" xsi:type="array">
                                                <item name="template" xsi:type="string">VendorName_PlaceOrder/summary</item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

Passo 2:

Crie um arquivo summary.htmlno caminho

app / code / VendorName / PlaceOrder / view / frontend / web / template

<div class="opc-block-summary" data-bind="blockLoader: isLoading">
    <span data-bind="i18n: 'Order Summary'" class="title"></span>
    <!-- ko foreach: elems() -->
        <!-- ko template: getTemplate() --><!-- /ko -->
    <!-- /ko -->
</div>
<!-- ko if: (isVisible()) -->
<div class="actions-toolbar-trigger" id="place-order-trigger-wrapper">
    <button type="button" class="button action primary" id="place-order-trigger" value="Place Order" >
        <span>Place Order</span>
    </button>
</div>
<!-- /ko -->

Etapa 3:

Crie um arquivo summary.jsno caminho

app / code / VendorName / PlaceOrder / view / frontend / web / js / view

define(
    [
        'jquery',
        'ko',
        'Magento_Checkout/js/view/summary',
        'Magento_Checkout/js/model/step-navigator',
    ],
    function(
        $,
        ko,
        Component,
        stepNavigator
    ) {
        'use strict';

        return Component.extend({

            isVisible: function () {
                return stepNavigator.isProcessed('shipping');
            },
            initialize: function () {
                $(function() {
                    $('body').on("click", '#place-order-trigger', function () {
                        $(".payment-method._active").find('.action.primary.checkout').trigger( 'click' );
                    });
                });
                var self = this;
                this._super();
            }

        });
    }
);

Passo 4:

Para ocultar o botão de ordem do local padrão, use o arquivo CSS da seguinte maneira

app / code / VendorName / PlaceOrder / view / frontend / web / css / place_order_button.css

.payment-method-content .actions-toolbar{
    display: none;
}

Em anexo está a captura de tela!

insira a descrição da imagem aqui

Haritha
fonte
Olá @Haritha, tentei sua solução, mas ela não está funcionando. O botão não aparece na página de checkout. Você pode por favor me ajudar nisso?
Olá Mayank Zalavadia, Você pode verificar se o seu módulo personalizado é carregado após o Magento_Checkout Module em app / etc / config.php #
Haritha
Eu já verifiquei isso e agora está funcionando, mas não consigo adicionar o botão Fazer pedido, como você menciona na captura de tela. Ele é exibido apenas no resumo. Você pode, por favor, me ajudar a mover o botão Fazer pedido no mesmo lugar que você menciona na captura de tela.
Você pode compartilhar sua captura de tela?
Haritha
Captura de tela da verificação do nimb.ws/5EdgS2
1

Todas essas respostas não estão completas porque falta o arquivo registration.php para o módulo de registro

Esta é a melhor resposta que encontrei.

https://github.com/davidroberto/magento2-place_order_sidebar

Aqui está o módulo completo que você precisa apenas colocar em App / code e executar o comando php bin / magento setup: upgrade command

Espero que esta ajuda !!!

Драган Драган
fonte
obrigado, funciona para mim.
Sarvesh Dineshkumar Patel
0

no início, você precisa criar checkout_index_index.xml no seu tema e desabilitar o item antes da ordem do local na linha 314:

 <item name="before-place-order" xsi:type="array">

com:

<item name="before-place-order" xsi:type="array">
      <item name="componentDisabled" xsi:type="boolean">true</item>
</item>

Em seguida, é necessário adicionar novamente esse elemento no final do seu Checkout, após o botão de pedido, como este:

<item name="after-place-agreements" xsi:type="array">
<item name="component" xsi:type="string">uiComponent</item>
<item name="displayArea" xsi:type="string">after-place-agreements</item>
<item name="dataScope" xsi:type="string">before-place-order</item>
<item name="provider" xsi:type="string">checkoutProvider</item>
<item name="config" xsi:type="array">
    <item name="template" xsi:type="string">Magento_Checkout/payment/before-place-order</item>
</item>
<item name="children" xsi:type="array">
    <item name="agreementss" xsi:type="array">
        <item name="component" xsi:type="string">Magento_CheckoutAgreements/js/view/checkout-agreements</item>
        <item name="sortOrder" xsi:type="string">100</item>
        <item name="displayArea" xsi:type="string">after-place-agreements</item>
        <item name="dataScope" xsi:type="string">checkoutAgreements</item>
        <item name="provider" xsi:type="string">checkoutProvider</item>
    </item>
</item>

Em seguida, copie seu modelo padrão (html) após a ordem do lugar:

<!-- ko foreach: getRegion('after-place-agreements') -->
<!-- ko template: getTemplate() --><!-- /ko -->
Magento Learner
fonte