Magento 2: Override Magento \ Catalog \ Block \ Product \ View Block

8

Saya telah mengembangkan satu modul khusus dan saya telah mencoba untuk menimpa blok tampilan produk dengan mengikuti dua tautan ini. Mengganti Blok di Magento 2 dan DI & Memperluas Blok di Magento 2 tetapi ketika saya menekan halaman tampilan produk itu memberi saya 404 halaman. apa yang telah saya lakukan sejauh ini di bawah ini

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

Sesuai DI & Memperluas Blok pada tautan Magento 2, saya juga menyertakan semua parameter konstruk kelas induk di konstruktor Myproduct.php.

Adakah yang tahu di mana saya salah? atau apa cara yang benar untuk mengesampingkan ini?

chirag dodia
sumber
Anda akan menemukan solusi Anda ikuti tautannya. magento.stackexchange.com/questions/86497/...
Anand Ontigeri
@AnandOntigeri solusi itu juga tidak berfungsi dapatkah Anda menambahkan solusi di sini?
chirag dodia
TT\Helloworld\Block\Myproduct.php==> TT\Helloworld\Block\Myproduct(hapus .php)
bchatard
@ BriceC.that juga tidak berfungsi
chirag dodia
1
hapus C:\xampp\htdocs\Magento2\var\generation\TT\Helloworld\Block\Myproduct\Intercepto‌​r.phpdan komentari __constructmetode ini dan coba lagi tolong
bchatard

Jawaban:

5

Untuk melanjutkan

  • __constructmetode komentar (solusi sementara)
  • hapus yang Interceptordihasilkan (yang baru akan dihasilkan - perlu dihapus setelah setiap modifikasi __constructmetode)
  • dalam penggunaan tata letak Anda template="TT_Helloworld::myproduct.phtml"
bchatard
sumber
saya tidak mengerti apa alasan di balik menghapus metode __construct dari kelas saya?
chirag dodia
itu untuk debug, sekarang Anda dapat mencoba untuk menghapus komentar metode.
bchatard
2

Anda harus memasukkan \ TT \ Helloworld \ Helper \ Data $ helper sebelum array $ data = [] di __contruct

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
sumber