Thanh toán vận chuyển xác thực trường ẩn bổ sung


7

Tôi đã thêm trường ẩn vào phần vận chuyển của thanh toán. Nếu trường hiển thị - xác thực hoạt động, nhưng nếu tôi ẩn nó - bất kỳ xác thực nào bị thiếu.

Cần ngăn không cho đi xa hơn từ vận chuyển đến thanh toán bằng cách nhấp vào nút "Tiếp theo" và hiển thị một số thông báo lỗi hoặc cảnh báo cho người dùng.

Có cách nào để thực hiện điều này thông qua LayoutProcessor?

Hoặc để mở rộng xác nhận magento trong mô-đun của tôi cho mục đích này?

Các phiên bản khác cũng sẽ hữu ích.

CẬP NHẬT: Có lẽ điều này sẽ hữu ích cho câu trả lời. Ngay bây giờ đang cố gắng thực hiện xác nhận tương tự như trường email khi thanh toán. Ý tưởng là tiếp theo. Tạo biểu mẫu tùy chỉnh (như trường email nằm trong biểu mẫu riêng) và xác thực nó theo tài liệu này http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_form.html#template

<?php

namespace Modules\Deliverydate\Model\Checkout;

class LayoutProcessorPlugin
{

    /**
     * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
     * @param array $jsLayout
     * @return array
     */
    public function afterProcess(
        \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
        array  $jsLayout
    ) {

        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
        ['shippingAddress']['children']['shipping-address-fieldset']['children']['delivery_slot'] = [
            'component' => 'Magento_Ui/js/form/element/abstract',
            'config' => [
                'customScope' => 'shippingAddress',
                'template' => 'ui/form/field',
//                'elementTmpl' => 'ui/form/element/date',
                'options' => [],
                'id' => 'enteredSlot'
            ],
            'dataScope' => 'shippingAddress.enteredSlot',
            'label' => 'Delivery Slot',
            'provider' => 'checkoutProvider',
            'visible' => false,
            'validation' => [
//                'required-entry' => true,
                'validate-no-empty' => true,
            ],
            'sortOrder' => 1,
            'id' => 'enteredSlot'
        ];

        return $jsLayout;
    }
}

Đó chính xác là phiên bản Magento của bạn?
Khoa TruongDinh 8/8/2016

@KhoaTruongDinh 2.1.0
trắng

Tôi đã tạo một hộp kiểm ở dạng vận chuyển và nó hiển thị cho người dùng đã đăng nhập nhưng đối với khách bị ẩn và tôi không có bất kỳ vấn đề nào với xác nhận. Tôi đã theo dõi oyenetwork.com/articles/ trên để tùy chỉnh biểu mẫu của mình. Quá trình này sử dụng LayoutProcessor để tùy chỉnh. hy vọng điều đó có ích
Ekta Puri

nếu không xin vui lòng, cung cấp thêm một số chi tiết
Ekta Puri

@EktaPuri thanx. Cũng theo "Oye", nhưng có một chút nhiệm vụ khác nhau. Người dùng chọn ngày giao hàng bằng cách chọn một trong các nút có nghĩa là anh ta xác định phạm vi ngày và giờ (có nghĩa là tôi đề nghị người dùng tập hợp các ngày và phạm vi thời gian khả dụng). Tôi cần xử lý dữ liệu này và xác nhận nó. Đó là lý do tại sao tôi quyết định đưa dữ liệu vào trường ẩn (hoặc trường) và sau đó xử lý nó. Và về "hiển thị cho người dùng đã đăng nhập": khi người dùng đã thêm địa chỉ hợp lệ của mình vào hệ thống - trường hiển thị trở nên vô hình. Vì vậy, cần thiết phải diễn ra ruộng ở đây [ 'shippingAddress'] [ 'con'] [ 'shippingAdditional'] [ 'con'] [ 'DELIVERY_DATE']
trắng imp

Câu trả lời:


4

Bạn chỉ có thể tạo phần tử của riêng bạn với quy trình xác nhận được sửa đổi cho mục đích này. Trong phần mở rộng của bạn tạo một tệp mới view/base/web/js/form/element/custom.jsvới nội dung sau:

define([
    'Magento_Ui/js/form/element/abstract',
    'Magento_Ui/js/lib/validation/validator'
], function (Abstract, validator) {
    'use strict';

    return Abstract.extend({
        validate: function () {
            var value   = this.value(),
                result  = validator(this.validation, value, this.validationParams),
                message = result.message,
                isValid = result.passed;

            this.error(message);
            this.bubble('error', message);

            if (!isValid) {
                this.source.set('params.invalid', true);
                alert('Please, specify a delivery date');
            }

            return {
                valid: isValid,
                target: this
            };
        }
    });
});

Sau đó, trong LayoutProcessorPlugin thay đổi giá trị 'thành phần' thành phần tử mới được tạo:

'component' => 'Modules_Deliverydate/js/form/element/custom'

Theo cách đó, bạn có thể mở rộng phần tử Trừu tượng và sửa đổi phương thức "xác thực" bằng cách xóa kiểm tra mức độ hiển thị của trường, v.v. Trong ví dụ này, thông báo lỗi được hiển thị dưới dạng cảnh báo nhưng bạn có thể sử dụng bất cứ điều gì bạn muốn. Hy vọng nó sẽ giúp.


Ba Tư, thanx rất nhiều! Rất gan!
trắng

Bạn có biết làm thế nào để xác thực hoạt động khi người dùng đăng nhập không? Hình thức vận chuyển được thay thế bằng khối địa chỉ với các tham số đã được thiết lập, nhưng các trường ẩn hiện tại trang và không có xác nhận nào xảy ra. Có vẻ như xác nhận vắng mặt ở tất cả.
trắng

Ngoài ra, bạn có thể thấy tệp "nhà cung cấp / magento / mô-đun-ui / view / cơ sở / web / js / form / Element / trừu tượng", ở đó bạn có thể thấy cách thức hoạt động của nó trong lõi & bạn luôn có thể ghi đè lên nó theo yêu cầu.
Kapil Yadav
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.