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?


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"

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.