Question

J'ai besoin d'aide concernant le blocage des blocs. J'ai réussi à remplacer un bloc à l'aide des préférences, mais lorsque j'ajoute un registre de base de la méthode de construction, il affiche l'erreur suivante:

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

Ceci est mon 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;
    }
}

Si je supprimais le registre et cette ligne, la dérogation fonctionne.

Était-ce utile?

La solution

ressemble à un problème que le bloc de la barre d'outils a de nombreuses dépendances, mais vous ne passez pas leur

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

mais utilisez des "préférences" pour écraser les classes c'est une mauvaise idée du tout.Meilleure utilisation des plugins ou une mise en page dépend de ce dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top