I need help regarding block overriding.
I have successfully overridden a block using preferences, but when I add core registry in the construct method it's showing the following error:
Recoverable Error: Argument 2 passed to Magento\Catalog\Block\Product\ProductList\Toolbar::__construct() must be an instance of Magento\Catalog\Model\Session, array
This is my code:
namespace Vendername\Modulename\Block;
use Magento\Framework\View\Element\Template;
use Magento\Framework\Registry;
class Toolbar extends \Magento\Catalog\Block\Product\ProductList\Toolbar
{
protected $_registry;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
Registry $registry,
array $data = []
) {
$this->_registry = $registry;
parent::__construct($context, $data);
}
public function getCurrentMode()
{
$category = $this->_registry->registry('current_category');
print_r($category->getId());
exit;
$mode = $this->_getData('_current_grid_mode');
if ($mode) {
return $mode;
}
$defaultMode = $this->_productListHelper->getDefaultViewMode($this->getModes());
$mode = $this->_toolbarModel->getMode();
if (!$mode || !isset($this->_availableMode[$mode])) {
$mode = $defaultMode;
}
$this->setData('_current_grid_mode', $mode);
return $mode;
}
}
If I remove registry and this line, override is working.
Best Answer
Looks like problem that Toolbar block has many dependencies, but you dont pass their
But use "preferences" to overwrite classes it is bad idea at all. Better use plugins or layout depends on what you need.