Hello, Magento 2.2.1
I am wanting to dynamically show featured items specific to whatever category page the user is viewing.
So, I have featured items showing in the left side column using a block. It has this code:
{{block class="Smartwave\Filterproducts\Block\Home\FeaturedList" name="featured_product" product_count="9" aspect_ratio="1" image_width="150" template="side_list.phtml"}}
I would like to instead do something like this:
{{block class="Smartwave\Filterproducts\Block\Home\FeaturedList" name="featured_product" product_count="9" aspect_ratio="1" image_width="150" category_id="<category_id_variable>" template="side_list.phtml"}}
The difference being passing a 'category_id=' variable that is the id of the current category page.
Maybe I am not quite understanding the best way to do that.. but open to thoughts!
Thanks.
Donovan
Bump... any ideas on this? I'm at a loss.
@dbrooke1007
As far i understand you want to get category id dynamically when user viewing category page.
So here you ca do. get current category registry and use that
protected $registry; public function __construct( \Magento\Framework\Registry $registry, ) { $this->registry = $registry; } public function getCurrentCategory() { $id = $this->registry->registry('current_category')->geId(); }
check complete reference
Thanks. I have added your code to the themes FeatureList.php file.
class FeaturedList extends \Magento\Catalog\Block\Product\ListProduct { protected $_collection; protected $categoryRepository; protected $_resource; // ddb added protected $registry; public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, \Magento\Catalog\Model\Layer\Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, \Magento\Framework\Url\Helper\Data $urlHelper, \Magento\Catalog\Model\ResourceModel\Product\Collection $collection, \Magento\Framework\App\ResourceConnection $resource, \Magento\Framework\Registry $registry,//ddb added array $data = [] ) { $this->categoryRepository = $categoryRepository; $this->_collection = $collection; $this->_resource = $resource; $this->registry = $registry; // ddb added parent::__construct($context, $postDataHelper, $layerResolver, $categoryRepository, $urlHelper, $registry, $data); } // ddb added public function getCurrentCategory() { $id = $this->registry->registry('current_category')->geId(); return $id; }
I then call it from another function:
$immediateCatID = getCurrentCategory();
I am getting this error:
PHP Fatal error: Uncaught TypeError: Argument 8 passed to Smartwave\Filterproducts\Block\Home\FeaturedList::__construct() must be an instance of Magento\Framework\Registry, array given, called in /home/jpadmin/public_html/store/generated/code/Smartwave/Filterproducts/Block/Home/FeaturedList/Interceptor.php on line 14 and defined in /home/jpadmin/public_html/store/app/code/Smartwave/Filterproducts/Block/Home/FeaturedList.php:21
@dbrooke1007 remove the var/cache var/generation folder will solved this issue.
Hi, though the solution was a bit different than yours (maybe because of the theme), this got me there. Thanks.