0

すべての単純な製品で MAP が有効になっている場合に、グループ製品 (検索、カタログなど) の価格が「開始: $XX.XX」と表示される Magento に問題があります。

「カートに追加して価格を表示」のような価格を表示したい

私はこれをコード内の 2 つの可能性のある場所まで追跡しました。

app/code/core/Mage/Catalog/Block/Product/Abstract.php の最初

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')
{
    $type_id = $product->getTypeId();
    if (Mage::helper('catalog')->canApplyMsrp($product)) {
        $realPriceHtml = $this->_preparePriceRenderer($type_id)
            ->setProduct($product)
            ->setDisplayMinimalPrice($displayMinimalPrice)
            ->setIdSuffix($idSuffix)
            ->toHtml();
        $product->setAddToCartUrl($this->getAddToCartUrl($product));
        $product->setRealPriceHtml($realPriceHtml);
        $type_id = $this->_mapRenderer;
    }

    return $this->_preparePriceRenderer($type_id)
        ->setProduct($product)
        ->setDisplayMinimalPrice($displayMinimalPrice)
        ->setIdSuffix($idSuffix)
        ->toHtml();
}

if ステートメントをコメントアウトするか、戻る前に $temp_id を msrp に設定するかを判断した場合、それは機能します (ただし、すべての製品で)

そのため、上記の関数にコードを追加して、関連するすべての製品で MAP が有効になっているかどうかを確認するか、関数 canApplyMsrp を変更して確認する必要があります。

アプリ/コード/コア/メイジ/カタログ/ヘルパー/Data.php

public function canApplyMsrp($product, $visibility = null, $checkAssociatedItems = true)
{
    if (!$this->isMsrpEnabled()) {
        return false;
    }

    if (is_numeric($product)) {
        $product = Mage::getModel('catalog/product')
            ->setStoreId(Mage::app()->getStore()->getId())
            ->load($product);
    }

    if (!$this->canApplyMsrpToProductType($product)) {
        return false;
    }

    $result = $product->getMsrpEnabled();
    if ($result == Mage_Catalog_Model_Product_Attribute_Source_Msrp_Type_Enabled::MSRP_ENABLE_USE_CONFIG) {
        $result = $this->isMsrpApplyToAll();
    }

    if (!$product->hasMsrpEnabled() && $this->isMsrpApplyToAll()) {
        $result = true;
    }

    if ($result && $visibility !== null) {
        $productVisibility = $product->getMsrpDisplayActualPriceType();
        if ($productVisibility == Mage_Catalog_Model_Product_Attribute_Source_Msrp_Type_Price::TYPE_USE_CONFIG) {
            $productVisibility = $this->getMsrpDisplayActualPriceType();
        }
        $result = ($productVisibility == $visibility);
    }

    if ($product->getTypeInstance(true)->isComposite($product)
        && $checkAssociatedItems
        && (!$result || $visibility !== null)
    ) {
        $resultInOptions = $product->getTypeInstance(true)->isMapEnabledInOptions($product, $visibility);
        if ($resultInOptions !== null) {
            $result = $resultInOptions;
        }
    }

    return $result;
}

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

関数 getPriceHTML を次のように変更します。

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')
{
    $type_id = $product->getTypeId();
    if (Mage::helper('catalog')->canApplyMsrp($product)) {
        $realPriceHtml = $this->_preparePriceRenderer($type_id)
            ->setProduct($product)
            ->setDisplayMinimalPrice($displayMinimalPrice)
            ->setIdSuffix($idSuffix)
            ->toHtml();
        $product->setAddToCartUrl($this->getAddToCartUrl($product));
        $product->setRealPriceHtml($realPriceHtml);
        $type_id = $this->_mapRenderer;
    }
    else if ($type_id == 'grouped')
    {
        $all_map = true;
        $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product);
        foreach ($associatedProducts as $simpleProduct)
        {
            if (!Mage::helper('catalog')->canApplyMsrp($simpleProduct)) {
                $all_map = false;
                break;
            }
        }
        if ($all_map)
        {
            $realPriceHtml = $this->_preparePriceRenderer($type_id)
                ->setProduct($product)
                ->setDisplayMinimalPrice($displayMinimalPrice)
                ->setIdSuffix($idSuffix)
                ->toHtml();
            $product->setAddToCartUrl($this->getAddToCartUrl($product));
            $product->setRealPriceHtml($realPriceHtml);
            $type_id = $this->_mapRenderer;
        }
    }

    return $this->_preparePriceRenderer($type_id)
        ->setProduct($product)
        ->setDisplayMinimalPrice($displayMinimalPrice)
        ->setIdSuffix($idSuffix)
        ->toHtml();
}

トリックを行ったようです。この手法で問題が発生することはありますか?

于 2013-02-28T15:16:32.053 に答える