Wie ändere ich das Seitenlayout der Produktdetails entsprechend der Produktpreisspanne?

7

Ich möchte product detail page layoutje nach Produkt spezifisch ändern. price rangeIch weiß, dass es möglich ist, es zu verwenden product_idund product_skuwie unten.

<catalog_product_view_id_productid>

Und

<catalog_product_view_sku_productsku>

Aber wie kann ich es konkret erreichen price range?

Manish Goswami
quelle

Antworten:

7

Sie können dies mit dem Plugin erhalten. Versuchen Sie es auf folgende Weise:

app / code / SR / MagentoStackExchange / etc / frontend / di.xml


<?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\Controller\Product\View">
        <plugin name="SR_MagentoStackExchange::product_view" type="SR\MagentoStackExchange\Plugin\Catalog\Controller\Product\View" sortOrder="1"/>
    </type>
</config>

app / code / SR / MagentoStackExchange / Plugin / Katalog / Controller / Produkt / View.php


<?php
namespace SR\MagentoStackExchange\Plugin\Catalog\Controller\Product;

use Magento\Framework\Controller\ResultInterface;
use Magento\Framework\App\RequestInterface;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\Exception\NoSuchEntityException;

class View
{
    /**
     * @var RequestInterface
     */
    private $request;

    /**
     * @var ProductRepositoryInterface
     */
    private $productRepository;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    /**
     * View constructor.
     *
     * @param RequestInterface $request
     * @param ProductRepositoryInterface $productRepository
     * @param StoreManagerInterface $storeManager
     */
    public function __construct(
        RequestInterface $request,
        ProductRepositoryInterface $productRepository,
        StoreManagerInterface $storeManager
    ) {
        $this->request = $request;
        $this->productRepository = $productRepository;
        $this->storeManager = $storeManager;
    }

    public function afterExecute(
        \Magento\Catalog\Controller\Product\View $subject,
        $resultPage
    ) {

        if ($resultPage instanceof ResultInterface) {
            $productId = (int) $this->request->getParam('id');
            if ($productId) {
                try {
                    $product = $this->productRepository->getById($productId, false, $this->storeManager->getStore()->getId());
                    if ($product->getFinalPrice() <= 34) {
                        $pageConfig = $resultPage->getConfig();
                        $pageConfig->setPageLayout('2columns-left');
                    }
                } catch (NoSuchEntityException $e) {

                }
            }
        }

        return $resultPage;
    }
}
Sohel Rana
quelle
Danke @Sohel Rana, es funktioniert, du bist großartig!
Manish Goswami