Magento2 使用ConfigProviderInterface在结账页面显示自定义变量数据

Posted by

如何在 Magento 2 的结帐中传递自定义数据。在结帐页面中,有时我们需要传递一些自定义数据才能在结帐页面上显示或添加数据。因此,我们需要使用 Magento\Checkout\Model\CompositeConfigProvider 类在结帐页面上传递自定义变量。

首先,让我们假设你有一个简单的模块。然后在app\code\Cg\PayOp\etc\di.xml 文件中添加以下代码:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\CompositeConfigProvider">
        <arguments>
            <argument name="configProviders" xsi:type="array">
                <item name="payop_provider" xsi:type="object">Cg\PayOp\Model\ConfigProvider</item>
            </argument>
        </arguments>
    </type>
</config>

之后,您需要创建 app\code\Cg\PayOp\Model\ConfigProvider.php 文件并粘贴以下代码以添加自定义值:

<?php
declare(strict_types=1);

namespace Cg\PayOp\Model;

use Magento\Checkout\Model\ConfigProviderInterface;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;
use Magento\Framework\UrlInterface;

class ConfigProvider implements ConfigProviderInterface
{
/**
* @var
*/
protected $_scopeConfig;

/**
* @var Data
*/
protected $_dataHelper;

/**
* @var UrlInterface
*/
protected $_urlBuilder;

/**
* @param ScopeConfigInterface $scopeConfig
* @param Data $dataHelper
*/
public function __construct(
ScopeConfigInterface $scopeConfig,
UrlInterface $urlBuilder
){
$this->_scopeConfig = $scopeConfig;
$this->_urlBuilder = $urlBuilder;
}

/**
* @param $key
* @return mixed
*/
public function getConfigValue($key)
{
$pathConfig = "payment/payop/". $key;
return $this->_scopeConfig->getValue($pathConfig, ScopeInterface::SCOPE_STORE);
}

/**
* @return array
*/
public function getConfig()
{
// TODO: Implement getConfig() method.
$configArray = [];
$logo = '';
$logoFile = $this->getConfigValue('logo');
if(strlen($logoFile) > 0){
$logo = '../pub/media/sales/store/logo/' . $logoFile;
}
$configArray['payment']['payop']['logo'] = $logo;
$configArray['payment']['payop']['description'] = $this->getConfigValue('description');
$configArray['payment']['payop']['redirectUrl'] = $this->getRedirectUrl();
return $configArray;
}
/**
* @return string
*/
public function getRedirectUrl()
{
return $this->_urlBuilder->getUrl('payop/index/pay');
}

}

在这里,您需要在自定义文件中实现Magento\Checkout\Model\ConfigProviderInterface接口,以在结帐配置中传递自定义值。

现在,您需要刷新缓存,然后,您可以使用以下方式在结帐页面上的 JS 文件中访问此值:

window.checkoutConfig