Magento 2: Переопределение ценовой модели с помощью плагина


Мне нужно переопределить Price.php Модель с плагином. Я создал PricePlugin в папке плагинов.

<vendor>/<module>/Plugin/Product/View/Options/PricePlugin.php

PricePlugin.php :

<?php
namespace <vendor>\<module>\Plugin\Product\View\Options;

use \Magento\Catalog\Model\Config\Source\Product\Options\Price;

/**
 * Class AbstractOptions
 * @package <vendor>\<module>\Plugin\Product\View\Options
 */
class PricePlugin
{
    const VALUE_FIXED = 'fixed';
    const VALUE_PERCENT = 'percent';

    /**
     * @param Price $price
     * @return array
     */
    public function toOptionArray(Price $price)
    {
        return [
            ['value' => self::VALUE_FIXED, 'label' => __('Fixed')],
            ['value' => self::VALUE_FIXED, 'label' => __('Per Character')],
            ['value' => self::VALUE_PERCENT, 'label' => __('Percent')],
        ];
    }
}

Di.xml

<type name="Magento\Catalog\Model\Config\Source\Product\Options\Price">
    <plugin name="VENDOR_MODULE_Model_Price" type="<Vendor>\<Module>\Plugin\Product\View\Options\PricePlugin" sortOrder="1" />
</type>
Author: Kevinzie, 2018-09-12

1 answers

Вы почти на месте, плагины можно использовать тремя способами: после, до и вокруг. Вам просто нужно предварительно добавить любой из этих трех методов к методу, который вы хотите изменить.

Так что меняйся

Tooptionarray(Цена $цена)

До

Последующий запрос (Цена $цена)

Также вы можете манипулировать результатом с помощью переопределяемого метода, как вы это сделали, например

public function aftertoOptionArray(Price $price)
    {
        return [
            ['value' => self::VALUE_FIXED, 'label' => __('Fixed')],
            ['value' => self::VALUE_FIXED, 'label' => __('Per Character')],
            ['value' => self::VALUE_PERCENT, 'label' => __('Percent')],
        ];
    }

Вы можете изменить его на

public function aftertoOptionArray(Price $price, $OptionsArray)
    {
        // $OptionsArray here holds the values from the method toOptionArray() so you can simply add your value here which is ['value' => self::VALUE_FIXED, 'label' => __('Per Character')] into that array .
    }

Надеюсь, это поможет

 4
Author: Rahul Makwana, 2018-09-12 10:12:10