Dans la page d'affichage par défaut, magento affiche le prix le plus bas des produits associés.
Je dois afficher le prix le plus élevé des produits associés. N'importe qui a une idée de l'emplacement de la logique. Comment personnaliser ce comportement.
mise à jour:
Magento \ ConfigurableProduct \ Pricing \ Price \ ConfigurablePriceResolver
/**
* @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
* @return float
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
{
$price = null;
foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
$productPrice = $this->priceResolver->resolvePrice($subProduct);
$price = $price ? min($price, $productPrice) : $productPrice;
}
if (!$price) {
throw new \Magento\Framework\Exception\LocalizedException(
__('Configurable product "%1" do not have sub-products', $product->getName())
);
}
return (float)$price;
}
J'essaie de remplacer ce fichier principal, mais cela ne fonctionne pas.
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver" type="Kensium\Catalog\Pricing\Price\ConfigurablePriceResolver" />
<?php
namespace Kensium\Catalog\Pricing\Price;
class ConfigurablePriceResolver extends \Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver
{
/**
* @param \Magento\Framework\Pricing\SaleableInterface|\Magento\Catalog\Model\Product $product
* @return float
* @throws \Magento\Framework\Exception\LocalizedException
*/
public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
{
$price = null;
$assPrice=array();
foreach ($this->configurable->getUsedProducts($product) as $subProduct) {
$productPrice = $this->priceResolver->resolvePrice($subProduct);
$assPrice[]=$productPrice;
$price = $price ? min($price, $productPrice) : $productPrice;
}
if (!$price) {
throw new \Magento\Framework\Exception\LocalizedException(
__('Configurable product "%1" do not have sub-products', $product->getName())
);
}
return (float)(max($assPrice));
//return (float)$price;
}
}
magento2
configurable-product
price
sivakumar
la source
la source
Réponses:
Vous devez faire un plugin pour cela pour afficher le prix maximum à l'intérieur de la page de détail, ci-dessous est un module étape par étape pour votre besoin,
Chemin de fichier, application / code / Fournisseur / Nom du module /
Fichier d'enregistrement, application / code / fournisseur / nom de module / registration.php
app / code / Vendor / Modulename / etc / module.xml
app / code / Vendor / Modulename / etc / frontend / di.xml
application / code / fournisseur / nom de module / prix / ConfigurablePrice.php
Dans ce fichier, vous devez pluginize resolveprice () fonction
exécuter la commande
supprimer le dossier var et archiver le frontend
la source
Tu vois
\Magento\ConfigurableProduct\Pricing\Price\ConfigurablePriceResolver::resolvePrice
. C'est la méthode resposible pour le calcul du prix du produit configurable basé sur le prix enfant.Vous pouvez le pluginiser et implémenter votre algorithme.
la source