Magento 2: Verwendung von priceModifiers

8

Beim Durchsuchen des Codes des Moduls von magento 2.0.7 catalogrulesstieß ich auf eine Klasse Magento\CatalogRule\Model\Product\PriceModifier, die Magento\Catalog\Model\Product\PriceModifier\Compositeals Argument über di.xmldas catalogrulesModul an class übergeben wurde .

Jetzt PriceModifierhat das eine Methode namens, modifyPricedie den vorhandenen Preis des Produkts übernimmt und mithilfe eines eigenen Mechanismus ändert und den neuen Preis zurückgibt.

Ich habe versucht, diese Funktionalität zu testen, um zu überprüfen, ob sie funktioniert, indem ich dasselbe in meinem benutzerdefinierten Modul nachahmte, aber die Methode wird nicht aufgerufen.

Ich versuchte mich tiefer damit zu beschäftigen und mir das anzuschauen Magento\Catalog\Model\Product\PriceModifier\Composite

<?php
/**
 * Composite price modifier can be used.
 * Any module can add its price modifier to extend price modification from other modules.
 *
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Catalog\Model\Product\PriceModifier;

use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\PriceModifierInterface;
use Magento\Framework\ObjectManagerInterface;

class Composite implements PriceModifierInterface
{
    /**
     * @var \Magento\Framework\ObjectManagerInterface
     */
    protected $objectManager;

    /**
     * @var array
     */
    protected $modifiers;

    /**
     * @param ObjectManagerInterface $objectManager
     * @param array $modifiers
     */
    public function __construct(ObjectManagerInterface $objectManager, array $modifiers = [])
    {
        $this->objectManager = $objectManager;
        $this->modifiers = $modifiers;
    }

    /**
     * Modify price
     *
     * @param mixed $price
     * @param Product $product
     * @return mixed
     */
    public function modifyPrice($price, Product $product)
    {
        foreach ($this->modifiers as $modifierClass) {
            $price = $this->objectManager->get($modifierClass)->modifyPrice($price, $product);
        }
        return $price;
    }
}

Wie wir sehen können, modifyPricedurchlaufen die Schleifen alle Modifikatoren und rufen ihre jeweilige modifyPriceMethode auf und geben den modifizierten Preis zurück.

Aber die Methode wird von keinem Ort aus aufgerufen. Ich muss wissen, ob dieser Code von irgendwoher verwendet wird oder ob es sich nur um einen nicht verwendeten Code handelt. Und falls es nicht verwendet wird, haben wir einen alternativen Mechanismus, um den Preis des Produkts mit einem ähnlichen Ansatz zu ändern? Jeder Vorschlag wird geschätzt.

Taral Patoliya
quelle

Antworten:

0

Ich stolpere gestern über dieses Dokument

http://devdocs.magento.com/guides/v2.0/architecture/behavior/pricing.html

Scheint ein gut gehütetes Geheimnis zu sein.

Ich habe alle Preise mit ein wenig Code erfolgreich geändert.

Sie müssen nur ein zusätzliches Plugin für die Endpreismethode hinzufügen, um den Preis zu sparen und den richtigen Weg zum Angebot zu finden.

Ich werde nächste Woche einen Blog darüber mit einem Beispielmodul fertigstellen.

Bohrturm
quelle
Nun, anscheinend ist die Funktionalität jetzt weg!
Erfan
0

In di.xml definieren

<?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\Catalog\Model\Product\PriceModifier\Composite">
        <arguments>
            <argument name="modifiers" xsi:type="array">
                <item name="custom_price" xsi:type="string">CompanyName\ModuleName\Model\Product\PriceModifier</item>
            </argument>
        </arguments>
    </type>
</config>

und erstellen Sie eine Modifikatorklasse wie unten

<?php


namespace CompanyName\ModuleName\Model\Product;


use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\PriceModifierInterface;

class PriceModifier implements PriceModifierInterface
{

    /**
     * Modify price
     *
     * @param mixed $price
     * @param Product $product
     * @return mixed
     */
    public function modifyPrice($price, Product $product)
    {
        return 50;
    }
}
Dharmesh Hariyani
quelle
0

Preismodifikatoren werden während der Katalogpreisindizierung angewendet. Um Ihren Modifikator hinzuzufügen, deklarieren Sie ihn di.xmlwie folgt:

    <type name="Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\BasePriceModifier">
        <arguments>
            <argument name="priceModifiers" xsi:type="array">
                <item name="yourPriceModifier" xsi:type="object">Your\Module\Model\Product\PriceModifier</item>
            </argument>
        </arguments>
    </type>

und erstellen Sie dann eine implementierende Klasse Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceModifierInterface.

user487772
quelle