Skip to main content
Commonmark migration
Source Link

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check whether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

#Edit

Edit

This is the contents of the di.xml file:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\CatalogWidget\Block\Product\ProductsList" type="Vendor\Namespace\Block\Product\ProductsList" />
</config>

This is the contents of the ProductsList.php file:

<?php
namespace Vendor\Namespace\Block\Product;

class ProductsList extends \Magento\CatalogWidget\Block\Product\ProductsList
{
    protected $_httpContext;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
        \Magento\CatalogWidget\Model\Rule $rule,
        \Magento\Widget\Helper\Conditions $conditionsHelper,
        array $data = []
    ) {
        $this->_httpContext = $httpContext;
        parent::__construct(
            $context,
            $productCollectionFactory,
            $catalogProductVisibility,
            $httpContext,
            $sqlBuilder,
            $rule,
            $conditionsHelper,
            $data
        );
    }

    protected function _construct()
    {
        parent::_construct();
        // Tested, but does not work
        // $this->setTemplate('Vendor_Namespace::product/widget/content/grid.phtml');
    }

    public function isCustomerLoggedIn()
    {
        return $this->_httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
    }
}

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check whether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

#Edit

This is the contents of the di.xml file:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\CatalogWidget\Block\Product\ProductsList" type="Vendor\Namespace\Block\Product\ProductsList" />
</config>

This is the contents of the ProductsList.php file:

<?php
namespace Vendor\Namespace\Block\Product;

class ProductsList extends \Magento\CatalogWidget\Block\Product\ProductsList
{
    protected $_httpContext;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
        \Magento\CatalogWidget\Model\Rule $rule,
        \Magento\Widget\Helper\Conditions $conditionsHelper,
        array $data = []
    ) {
        $this->_httpContext = $httpContext;
        parent::__construct(
            $context,
            $productCollectionFactory,
            $catalogProductVisibility,
            $httpContext,
            $sqlBuilder,
            $rule,
            $conditionsHelper,
            $data
        );
    }

    protected function _construct()
    {
        parent::_construct();
        // Tested, but does not work
        // $this->setTemplate('Vendor_Namespace::product/widget/content/grid.phtml');
    }

    public function isCustomerLoggedIn()
    {
        return $this->_httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
    }
}

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check whether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

Edit

This is the contents of the di.xml file:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\CatalogWidget\Block\Product\ProductsList" type="Vendor\Namespace\Block\Product\ProductsList" />
</config>

This is the contents of the ProductsList.php file:

<?php
namespace Vendor\Namespace\Block\Product;

class ProductsList extends \Magento\CatalogWidget\Block\Product\ProductsList
{
    protected $_httpContext;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
        \Magento\CatalogWidget\Model\Rule $rule,
        \Magento\Widget\Helper\Conditions $conditionsHelper,
        array $data = []
    ) {
        $this->_httpContext = $httpContext;
        parent::__construct(
            $context,
            $productCollectionFactory,
            $catalogProductVisibility,
            $httpContext,
            $sqlBuilder,
            $rule,
            $conditionsHelper,
            $data
        );
    }

    protected function _construct()
    {
        parent::_construct();
        // Tested, but does not work
        // $this->setTemplate('Vendor_Namespace::product/widget/content/grid.phtml');
    }

    public function isCustomerLoggedIn()
    {
        return $this->_httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
    }
}
Tweeted twitter.com/StackMagento/status/1018435902421569536
Bumped by Community user
Bumped by Community user
Bumped by Community user
added 1974 characters in body
Source Link

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check wetherwhether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

#Edit

This is the contents of the di.xml file:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\CatalogWidget\Block\Product\ProductsList" type="Vendor\Namespace\Block\Product\ProductsList" />
</config>

This is the contents of the ProductsList.php file:

<?php
namespace Vendor\Namespace\Block\Product;

class ProductsList extends \Magento\CatalogWidget\Block\Product\ProductsList
{
    protected $_httpContext;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
        \Magento\CatalogWidget\Model\Rule $rule,
        \Magento\Widget\Helper\Conditions $conditionsHelper,
        array $data = []
    ) {
        $this->_httpContext = $httpContext;
        parent::__construct(
            $context,
            $productCollectionFactory,
            $catalogProductVisibility,
            $httpContext,
            $sqlBuilder,
            $rule,
            $conditionsHelper,
            $data
        );
    }

    protected function _construct()
    {
        parent::_construct();
        // Tested, but does not work
        // $this->setTemplate('Vendor_Namespace::product/widget/content/grid.phtml');
    }

    public function isCustomerLoggedIn()
    {
        return $this->_httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
    }
}

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check wether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check whether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?

#Edit

This is the contents of the di.xml file:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\CatalogWidget\Block\Product\ProductsList" type="Vendor\Namespace\Block\Product\ProductsList" />
</config>

This is the contents of the ProductsList.php file:

<?php
namespace Vendor\Namespace\Block\Product;

class ProductsList extends \Magento\CatalogWidget\Block\Product\ProductsList
{
    protected $_httpContext;

    public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        \Magento\Framework\App\Http\Context $httpContext,
        \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
        \Magento\CatalogWidget\Model\Rule $rule,
        \Magento\Widget\Helper\Conditions $conditionsHelper,
        array $data = []
    ) {
        $this->_httpContext = $httpContext;
        parent::__construct(
            $context,
            $productCollectionFactory,
            $catalogProductVisibility,
            $httpContext,
            $sqlBuilder,
            $rule,
            $conditionsHelper,
            $data
        );
    }

    protected function _construct()
    {
        parent::_construct();
        // Tested, but does not work
        // $this->setTemplate('Vendor_Namespace::product/widget/content/grid.phtml');
    }

    public function isCustomerLoggedIn()
    {
        return $this->_httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
    }
}
Source Link

How to extend Catalog Widget block?

I'm trying to hide prices and "add to shopping cart" for guests.

To do that I need to check wether the customer is logged in or not. There are no predefined methods in the Catalog Widget block so I need to extend the class via preference.

I've successfully extended the block Magento\Catalog\Block\Product\ListProduct but Magento\CatalogWidget\Block\Product\ProductsList is trickier.

When I try it, I get main.CRITICAL: Invalid template file: 'product/widget/content/grid.phtml' in module: 'Vendor_Namespace' block's name: 'product\productslist_0' in system.log.

Any solutions to this?