Domanda

Ho bisogno di aiuto per quanto riguarda il blocco prevalente. Ho ignorato con successo un blocco utilizzando le preferenze, ma quando aggiungo il registro di base nel metodo di costruzione, mostra il seguente errore:

Recoverable Error: Argument 2 passed to Magento\Catalog\Block\Product\ProductList\Toolbar::__construct() must be an instance of Magento\Catalog\Model\Session, array 
.

Questo è il mio codice:

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;
    }
}
.

Se rimuovo il registro e questa linea, l'override sta funzionando.

È stato utile?

Soluzione

Sembra un problema che il blocco della barra degli strumenti ha molte dipendenze, ma non passa il loro

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 = []
)
.

Ma usa "preferenze" per sovrascrivere le classi è affatto idea.Meglio utilizzare plugin o layout dipende da ciò di cui hai bisogno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top