Magento 2: Überschreiben Sie Magento \ Catalog \ Block \ Product \ View Block

8

Ich habe ein benutzerdefiniertes Modul entwickelt und versucht, den Produktansichtsblock zu überschreiben, indem ich diesen beiden Links folge: Block in Magento 2 überschreiben und DI & Block in Magento 2 erweitern, aber wenn ich auf die Produktansichtseite klicke, erhalte ich eine 404-Seite. Was ich bisher getan habe, ist unten

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();
}

Wie pro DI & ein Block - Erweiterung auf Magento 2 Link habe ich auch alle übergeordnete Klasse Konstrukt Parameter in Myproduct.php constructer enthalten.

Weiß jemand, wo ich falsch liege? oder wie kann man das richtig überschreiben?

Chirag Dodia
quelle
Sie finden Ihre Lösung, folgen Sie dem Link. magento.stackexchange.com/questions/86497/…
Anand Ontigeri
@AnandOntigeri diese Lösung funktioniert auch nicht Kannst du hier eine Lösung hinzufügen?
Chirag Dodia
TT\Helloworld\Block\Myproduct.php==> TT\Helloworld\Block\Myproduct(entfernen .php)
Chatchat
@ BriceC.das funktioniert auch nicht
Chirag Dodia
1
Entfernen C:\xampp\htdocs\Magento2\var\generation\TT\Helloworld\Block\Myproduct\Intercepto‌​r.phpund kommentieren Sie die __constructMethode und versuchen Sie es erneut
bchatard

Antworten:

5

Wieder aufzunehmen

  • Kommentarmethode __construct(temporäre Lösung)
  • entfernen Interceptorgeneriert (neue wird generiert - muss nach jeder Änderung der __constructMethode entfernt werden)
  • in Ihrem Layout verwenden template="TT_Helloworld::myproduct.phtml"
bchatard
quelle
Ich verstehe nicht, warum die Methode __construct aus meiner Klasse entfernt wurde.
Chirag Dodia
Es war für das Debuggen, Sie können jetzt versuchen, die Methode zu kommentieren.
Chatchat
2

Sie müssen \ TT \ Helloworld \ Helper \ Data $ helper eingeben, bevor Array $ data = [] im __contruct angezeigt wird

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
quelle