Magento 2使用偏好覆盖块
-
13-12-2019 - |
题
我需要帮助块覆盖。 我已成功使用首选项覆盖块,但是当我在构造方法中添加核心注册表时,它显示以下错误:
Recoverable Error: Argument 2 passed to Magento\Catalog\Block\Product\ProductList\Toolbar::__construct() must be an instance of Magento\Catalog\Model\Session, array
.
这是我的代码:
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;
}
}
.
如果我删除注册表和此行,则覆盖正在工作。
解决方案
看起来像工具栏块有很多依赖的问题,但你不通过他们的
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Session $catalogSession,
\Magento\Catalog\Model\Config $catalogConfig,
ToolbarModel $toolbarModel,
\Magento\Framework\Url\EncoderInterface $urlEncoder,
ProductList $productListHelper,
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
array $data = []
)
.
但使用“偏好要求”来覆盖类,这根本是坏主意。更好的使用插件或布局取决于您需要的内容。