Magento 2: Substituir Magento \ Catálogo \ Bloco \ Produto \ Visualizar Bloco

8

Eu desenvolvi um módulo personalizado e tentei substituir o bloco de visualização do produto seguindo estes dois links Substituindo o bloco no Magento 2 e DI e estendendo um bloco no Magento 2, mas quando atingi a página de visualização do produto, obtive uma página 404. o que eu fiz até agora está abaixo

di.xml

  <?xml version="1.0"?>
   <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
       <preference for="Magento\Catalog\Block\Product\View" type="TT\Helloworld\Block\Myproduct"/>
   </config>

Myproduct.php

<?php
namespace TT\Helloworld\Block;

use Magento\Framework\View\Element\Template;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Catalog\Model\Product;
class Myproduct extends \Magento\Catalog\Block\Product\View
{

protected $_helper;

protected $_objectManager;

public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Framework\Url\EncoderInterface $urlEncoder,
        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
        \Magento\Framework\Stdlib\StringUtils $string,
        \Magento\Catalog\Helper\Product $productHelper,
        \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
        \Magento\Framework\Locale\FormatInterface $localeFormat,
        \Magento\Customer\Model\Session $customerSession,
        ProductRepositoryInterface $productRepository,
        \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
        array $data = [],
        \TT\Helloworld\Helper\Data $helper  
) {
    parent::__construct($context, $urlEncoder, $jsonEncoder, $string, $productHelper, $productTypeConfig, $localeFormat, $customerSession, $productRepository, $priceCurrency, $data,$helper);

    $this->_helper = $helper;

}

protected function _toHtml()
{
    $this->setModuleName($this->extractModuleName('Magento\Catalog\Block\Product\View'));
    return parent::_toHtml();
}

Conforme DI & Extending a Block on Magento 2, eu também incluí todos os parâmetros de construção da classe pai no construtor Myproduct.php.

alguém sabe onde eu estou errado? ou qual é a maneira correta de substituir isso?

chirag dodia
fonte
você encontrará sua solução, siga o link. Veja como é fácil fazer o download
blackberry)
@AnandOntigeri essa solução também não está funcionando, você pode adicionar solução aqui?
Chirag dodia #
TT\Helloworld\Block\Myproduct.php==> TT\Helloworld\Block\Myproduct(remover .php)
bchatard
@ BriceC.that também não funciona
chirag dodia
11
remover C:\xampp\htdocs\Magento2\var\generation\TT\Helloworld\Block\Myproduct\Intercepto‌​r.phpe comentar o __constructmétodo e tente novamente por favor
bchatard

Respostas:

5

Para retomar

  • __constructmétodo de comentário (solução temporária)
  • remover Interceptorgerado (um novo será gerado - precisa ser removido após cada modificação do __constructmétodo)
  • no seu layout use template="TT_Helloworld::myproduct.phtml"
bchatard
fonte
não entendo qual é a razão por trás do método remove __construct da minha classe?
chirag dodia
foi para depuração, agora você pode tentar descomentar o método.
bchatard
2

você precisa inserir o assistente \ TT \ Helloworld \ Helper \ Data $ antes da matriz $ data = [] no contrato __

public function __construct(
    \Magento\Catalog\Block\Product\Context $context,
    \Magento\Framework\Url\EncoderInterface $urlEncoder,
    \Magento\Framework\Json\EncoderInterface $jsonEncoder,
    \Magento\Framework\Stdlib\StringUtils $string,
    \Magento\Catalog\Helper\Product $productHelper,
    \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
    \Magento\Framework\Locale\FormatInterface $localeFormat,
    \Magento\Customer\Model\Session $customerSession,
    ProductRepositoryInterface $productRepository,
    \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
    \TT\Helloworld\Helper\Data $helper ,
    array $data = []
) {
    parent::__construct($context, $urlEncoder, $jsonEncoder, $string, $productHelper, $productTypeConfig, $localeFormat, $customerSession, $productRepository, $priceCurrency, $data,$helper);
santhoshnsscoe
fonte