Question

I am using event ( catalog_product_collection_load_before )for check PLP page layered navigation attributes selected or not, my observer,

app\code\Zero\DescBlock\Observer\Data.php

<?php

namespace Zero\DescBlock\Observer;

use Magento\Framework\Event\ObserverInterface;
use Magento\Catalog\Model\Layer\Resolver as LayerResolver;
use Psr\Log\LoggerInterface;

class Data implements ObserverInterface
{
    /**
     * @var \Magento\Catalog\Model\Layer\Category
     */
    protected $catalogLayer;
    
    /**
     * @var \Psr\Log\LoggerInterface
     */
    private $logger;

    /**
     * @param LayerResolver $layerResolver,
     */
    public function __construct(
        LayerResolver $layerResolver,
        LoggerInterface $logger
    ) {
        $this->catalogLayer = $layerResolver->get();
        $this->logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        
        // Get selected filters
        $layer         = $this->catalogLayer;
        $activeFilters = $layer->getState()->getFilters();
        
        // checking variable activeFilters using log
        $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/custom.log');  
        $logger = new \Zend\Log\Logger();  
        $logger->addWriter($writer);  
        $logger->info('Your log details: ' .$activeFilters); 

    }
}

Log not return anything.

Any help thanks?

Was it helpful?

Solution

Try this :-

app/code/Vendor/Module/etc/frontend/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <!-- event catalog_product_collection_load_after -->
    <event name="catalog_product_collection_load_after">
        <observer name="rk_rathod_product_available"
                  instance="Vendor\Module\Observer\CollectionObserver"/>
    </event>
</config>

app/code/Vendor/Module/Observer/CollectionObserver.php

<?php
namespace Vendor\Module\Observer;

use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

/**
 * Class CollectionObserver
 * @package Vendor\Module\Observer
 */
class CollectionObserver implements ObserverInterface
{
    /**
     * @var \Magento\Catalog\Model\Layer\Resolver
     */
    protected $layerResolver;

    /**
     * CollectionObserver constructor.
     * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
     */
    public function __construct(

        \Magento\Catalog\Model\Layer\Resolver $layerResolver
    ) {
        $this->layerResolver = $layerResolver;
    }

    /**
     * @param Observer $observer
     */
    public function execute(Observer $observer)
    {
        $layer = $this->layerResolver->get();
        $activeFilters = $layer->getState()->getFilters();
        foreach ($activeFilters as $filter)
        {
           $filterLabel = $filter->getLabel();
           $filterValue = $filter->getValue();
           $writer = new \Zend\Log\Writer\Stream(BP . '/var/log/custom.log');  
           $logger = new \Zend\Log\Logger();  
           $logger->addWriter($writer);  
           $logger->info('Filter Label: ' .$filterLabel); 
           $logger->info('Filter Value: ' .$filterValue);
        }
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top