I want to fetch a recently viewed products collection in the observer and by using that collection I want to add my custom product in that collection.

Following Things That I Want To Achieve.

  1. On click of a product when it opens a product detail page that product id should be stored in session->Completed

  2. After that, I want to add those products which are stored in session in recently viewed product collection when the user creates a new account display those products in the recently viewed product widget.->Incomplete

The main Thing Is that I want to display guest user recently viewed product to a new customer when the guestuser creates a new account

Following Is Observer File

 namespace Namespace\RecentProducts\Session;
 class ProductData 

protected $_coreSession;
public function __construct(

    \Magento\Framework\Session\SessionManagerInterface $coreSession

    $this->_coreSession = $coreSession;

public function setValue($value){

public function getValue(){
return $this->_coreSession->getMessage();

public function unSetValue(){
return $this->_coreSession->unsMessage();



Following is my session file where I am calling observers methods


namespace Namespace\RecentProducts\Observer\Product;

use Magento\Framework\Event\Observer;

use Magento\Framework\Event\ObserverInterface;

class Data implements ObserverInterface


public function execute(Observer $observer)


    $product = $observer->getProduct();

    $originalName = $product->getName();

    $imgdata = $product->getImage();

    $catid = $product->getCategoryId();

    $entid = $product->getEntityId();

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

/*-------begining of code to set data to session----------*/
$SessionCollection =  $objectManager->get('Magneto\RecentProducts\Session\ProductData');
$value = $SessionCollection->getValue();
$newValue = explode(",",$value);
            $newdata = $value.",".$entid;



    echo $value;



Following is events.xml file

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">

<event name="catalog_controller_product_view">

    <observer name="RecentProductData" instance="Magneto\RecentProducts\Observer\Product\Data" />



1 Answer 1


You can use this code in your observer :

Method 1 :

 * Layout
 * @var \Magento\Framework\View\LayoutInterface

 protected $_layout;

 public function __construct(
    \Magento\Framework\View\LayoutInterface $layout
 ) {
     $this->_layout = $layout;

public function getMyCollection() {
    $block =  $this->_layout->getBlockSingleton(\Magento\Reports\Block\Product\Viewed::class)->getItemsCollection();
    return $block;

Method 2 :

You need to load ItemCollection() after get collection like below way :

protected $recentlyViewed;

public function __construct(
    \Magento\Reports\Block\Product\Viewed $recentlyViewed
) {
    $this->recentlyViewed = $recentlyViewed;

public function execute() {
    $collection = $this->recentlyViewed->getItemsCollection()->load();
    echo "<pre>";
  • Thanks for your answer but not working Mar 18, 2019 at 7:35
  • I have used your second method it returns blank array Mar 18, 2019 at 7:56
  • I tried. It's working perfectly. Please make sure you have collection of recent view product or not and refresh statistics of that grid. Mar 18, 2019 at 8:36
  • Yes I have a collection of recent product and also refresh the statistics default recent product is working when i show them using widget but in array it returns blank' Mar 18, 2019 at 8:54
  • Any system or error log? Mar 18, 2019 at 12:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.