Magento 2: Перемістити кнопку замовлення місця з оплати на бічну панель на сторінці оформлення замовлення?


13

Я хочу перенести кнопку замовлення місця з оплати на бічну панель на сторінці оформлення замовлення.

введіть тут опис зображення

Хто-небудь може дати мені пропозицію?

Редагувати : Чи це можливо навіть (за умови надання відповіді / підходу) ?

З мого дослідження, у кожного способу оплати є свій .html шаблон, включаючи власну кнопку. Ця кнопка не завантажується із шаблону knockout.js. Наприклад, частина "безкоштовного" способу оплати:

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

Хоча спосіб оплати «чек / грошовий переказ» виглядає приблизно так (лише відмінності є, enable: (getCode() == isChecked())але ей, все ще існують відмінності, і немає «1 всемогутньої кнопки загального замовлення місця»:

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

Надана відповідь рухає лише згуртування, що призводить до подібного:

введіть тут опис зображення


Привіт - ти знайшов розумний спосіб зробити це врешті? Спасибі
Том Бурман

Як ви знайшли успіх у валідації положень та положень прапорець?
Кондор

Відповіді:


6

У мене була аналогічна вимога змінити кнопку замовлення місця внизу блоку підсумків. Оскільки для кожного способу оплати призначена кнопка замовлення місця. Я створив спеціальну кнопку замовлення місця поруч із блоком зведення замовлення. При натисканні на кнопку я запустив кнопку замовлення обраного способу оплати.

Крок 1:

Створіть checkout_index_index.xmlфайл у

app / code / VendorName / PlaceOrder / view / frontend / layout 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>

Крок 2:

Створіть файл summary.htmlна шляху

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

Крок 3:

Створіть файл summary.jsна шляху

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

        });
    }
);

Крок 4:

Щоб приховати кнопку замовлення місця за замовчуванням, використовуйте файл CSS наступним чином

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

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

Додано скріншот!

введіть тут опис зображення


Привіт @Haritha, я спробував ваше рішення, але воно не працює. Кнопка не відображається на сторінці оформлення замовлення. Чи можете ви мені допомогти в цьому?

Вітаю, Mayank Zalavadia, чи можете ви перевірити, чи завантажений ваш користувальницький модуль після модуля Magento_Checkout у програмі / etc / config.php
Haritha

Я вже перевіряю це і зараз він працює, але я не в змозі додати кнопку замовлення місця, як ви згадуєте на своєму скріншоті. Він відображається лише в резюме. Чи можете ви допомогти мені перемістити кнопку замовлення місця там, де ви згадуєте на екрані екрана.

Чи можете ви поділитися своїм скріншотом?
Харіта

nimb.ws/5EdgS2 перевірити скріншот

1

Усі ці відповіді не є повними, оскільки для реєстраційного модуля відсутній файл register.php

Це найкраща відповідь, яку я знайшов.

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

Ось повний модуль, який потрібно розмістити лише у додатку / коді та запустити php bin / magento setup: команда оновлення

Сподіваюся, що це допоможе !!!


дякую, це працює для мене.
sarvesh Dineshkumar Patel

0

спочатку вам потрібно створити checkout_index_index.xml у вашій темі, потім потрібно відключити елемент перед замовленням на замовлення у рядку 314:

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

з:

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

Тоді вам потрібно знову додати цей елемент у кінці свого Checkout, після кнопки замовлення місця, наприклад:

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

Потім скопіюйте у ваш шаблон за замовчуванням (html) після замовлення місця:

<!-- ko foreach: getRegion('after-place-agreements') -->
<!-- ko template: getTemplate() --><!-- /ko -->
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.