способы оплаты magento 2 скрыть кодом [дубликат]


Как скрыть экспресс-заказ PayPal в коде по следующему адресу:

Поставщик/magento/модуль-проверка/просмотр/интерфейс/шаблоны/onepage.phtml

<!-- ko template: getTemplate() --><!-- /ko -->

preview

Как это отладить ko.?

Случай:

Экспресс-проверка включена у администратора. Пример:

  • артикул товара: комиссионный продукт
  • если комиссионный товар добавлен в корзину: оплата через экспресс-кассу
  • остальное: показать все способы оплаты ожидайте экспресс-оплаты
Author: Siarhey Uchukhlebau, 2017-06-23

1 answers

Вы можете написать плагин:

Vendor/Module/etc/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <!-- Plugins -->
    <type name="Magento\Paypal\Model\Express">
        <plugin name="disable_paypal_express"
                type="Vendor\Module\Plugin\DisablePayPalExpress"
                sortOrder="10"
                disabled="false"/>
    </type>
</config>

Vendor/Module/Plugin/DisablePayPalExpress.php

<?php
namespace Vendor\Module\Plugin;

class DisablePayPalExpress
{
    /**
     * @var \Magento\Checkout\Model\Session|\Magento\Backend\Model\Session\Quote
     */
    protected $session;

    /** List of the skus for which this method should be disabled */
    protected $disabledForSku = [
        'commission-product',
        'another-sku',
        'Gloves'
    ];

    /**
     * @param \Magento\Checkout\Model\Session $checkoutSession
     * @param \Magento\Backend\Model\Session\Quote $backendQuoteSession
     * @param \Magento\Framework\App\State $state
     */
    public function __construct(
        \Magento\Checkout\Model\Session $checkoutSession,
        \Magento\Backend\Model\Session\Quote $backendQuoteSession,
        \Magento\Framework\App\State $state
    ) {
        if ($state->getAreaCode() == \Magento\Framework\App\Area::AREA_ADMINHTML) {
            $this->session = $backendQuoteSession;
        } else {
            $this->session = $checkoutSession;
        }
    }

    /**
     * @param \Magento\Paypal\Model\Express $subject
     * @param $result
     * @return bool
     */
    public function afterIsAvailable(
        \Magento\Paypal\Model\Express $subject,
        $result
    ) {
        /** @var \Magento\Quote\Model\Quote $quote */
        $quote = $this->session->getQuote();
        /** @var \Magento\Quote\Model\Quote\Item[] $quoteItems */
        $quoteItems = $quote->getAllItems();
        foreach ($quoteItems as $quoteItem) {
            if (in_array($quoteItem->getSku(), $this->disabledForSku)) {
                return false; // disable the method if we found product with specified sku
            }
        }

        return $result; // return default result
    }
}

Если вы возвращаете false, метод всегда должен быть отключен. Если вам нужна пользовательская проверка, просто добавьте ее в тело методов и используйте желаемый результат.

 1
Author: Siarhey Uchukhlebau, 2017-06-23 07:59:25