当前位置: 技术文章>> 如何在Magento 2中显示特定类别的付款方式

文章标题:如何在Magento 2中显示特定类别的付款方式
  • 文章分类: Magento
  • 27366 阅读
系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》

本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。


在Magento 2中显示特定类别的付款方式的步骤:

步骤1:首先,在 以下文件路径的etc文件夹中创建一个事件.xml文件

app\code\Vendor\Extension\etc

现在添加代码,如下所述。

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="payment_method_is_active">
        <observer name="payment_method_is_active" instance="Vendor\Extension\Observer\ActivePaymentMethod" />
    </event>
</config>

步骤2:在第二步中,在 模型文件夹中创建ActivePaymentMethod.php文件,路径如下

app\code\Vendor\Extension\Observer

然后添加代码,如下所示。

<?php
namespace Vendor\Extension\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Catalog\Api\ProductRepositoryInterface;
class ActivePaymentMethod implements ObserverInterface
{
    protected $_cart;
    protected $_checkoutSession;
    protected $productRepository;
    public function __construct(
        \Magento\Checkout\Model\Cart $cart,
        \Magento\Checkout\Model\Session $checkoutSession,
        ProductRepositoryInterface $productRepository
    )
    {
        $this->_cart = $cart;
        $this->_checkoutSession = $checkoutSession;
        $this->productRepository = $productRepository;
    }
    /**
     * Execute observer
     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return void
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $quote = $this->getCheckoutSession()->getQuote();
        $categoryID = "Add your category ID";
        $items = $quote->getAllItems();
        $flag = false;
        foreach($items as $item)
        {
            $product = $this->getProduct($item->getProductId());
            $categoryIds = $product->getCategoryIds();
            if(in_array($categoryID, $categoryIds))
            {
                $flag = true; 
                break;
            }
        }
 
        if($flag == false && $observer->getEvent()->getMethodInstance()->getCode()=="Enter Your Payment Method Code")
        {
            $checkResult = $observer->getEvent()->getResult();
            $checkResult->setData('is_available', false); 
        }
    }
    public function getProduct($productId)
    {
        return $product = $this->productRepository->getById($productId);
    }
    public function getCart()
    {        
        return $this->_cart;
    }
    public function getCheckoutSession()
    {
        return $this->_checkoutSession;
    }
}

结论:

这样,您可以在Magento 2中显示特定类别的付款方式。


推荐文章