Magento 2:Magento \ Catalog \ Block \ Product \ Viewブロックを上書き


8

私は1つのカスタムモジュールを開発し、これら2つのリンクMagento 2でのブロックの上書き とDI&Magento 2でのブロックの拡張をたどって製品ビューブロックを上書きしようとしましたが、製品ビューページにアクセスすると、404ページが表示されます。これまでに行ったことは以下のとおりです

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

Magento 2リンクでのDIとブロックの拡張に従って、Myproduct.phpコンストラクターにすべての親クラスコンストラクターパラメーターも含めました。

誰かがどこが間違っているか知っていますか?またはこれを上書きする正しい方法は何ですか?


あなたはあなたの解決策がリンクに従っているのを見つけるでしょう。magento.stackexchange.com/questions/86497/...
アナンドOntigeri

@AnandOntigeriそのソリューションも機能しない場合は、ここにソリューションを追加できますか?
chirag dodia 16年

TT\Helloworld\Block\Myproduct.php==> TT\Helloworld\Block\Myproduct(削除.php
bchatard

@ BriceC.thatも機能しない
chirag dodia

1
メソッドを削除C:\xampp\htdocs\Magento2\var\generation\TT\Helloworld\Block\Myproduct\Intercepto‌​r.phpしてコメントし、__constructもう一度試してください
bchatard

回答:


5

再開します

  • コメント__construct方法(一時的な解決策)
  • Interceptor生成された削除(新しいものが生成されます- __constructメソッドを変更するたびに削除する必要があります)
  • あなたのレイアウトで template="TT_Helloworld::myproduct.phtml"

私のクラスから__constructメソッドを削除する理由は何ですか?
chirag dodia 16年

これはデバッグ用でした。メソッドのコメントを外してみてください。
bchatard

2

__contructの配列$ data = []の前に\ TT \ Helloworld \ Helper \ Data $ helperを入力する必要があります

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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.