Beim Durchsuchen des Codes des Moduls von magento 2.0.7 catalogrules
stieß ich auf eine Klasse Magento\CatalogRule\Model\Product\PriceModifier
, die Magento\Catalog\Model\Product\PriceModifier\Composite
als Argument über di.xml
das catalogrules
Modul an class übergeben wurde .
Jetzt PriceModifier
hat das eine Methode namens, modifyPrice
die 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, modifyPrice
durchlaufen die Schleifen alle Modifikatoren und rufen ihre jeweilige modifyPrice
Methode 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.
In di.xml definieren
und erstellen Sie eine Modifikatorklasse wie unten
quelle
Preismodifikatoren werden während der Katalogpreisindizierung angewendet. Um Ihren Modifikator hinzuzufügen, deklarieren Sie ihn
di.xml
wie folgt:und erstellen Sie dann eine implementierende Klasse
Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceModifierInterface
.quelle