Magento 2: Ghi đè Magento \ Catalog \ Block \ Product \ View Block


8

Tôi đã phát triển một mô-đun tùy chỉnh và tôi đã cố gắng ghi đè khối chế độ xem sản phẩm bằng cách theo hai liên kết này Ghi đè Khối trong Magento 2 và DI & Mở rộng Khối trên Magento 2 nhưng khi tôi nhấn trang xem sản phẩm, trang này sẽ cung cấp cho tôi trang 404. những gì tôi đã làm cho đến nay là dưới đây

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

Theo DI & Mở rộng liên kết Khối trên Magento 2, tôi cũng đã bao gồm tất cả tham số cấu trúc lớp cha trong trình xây dựng Myproduct.php.

có ai biết tôi sai ở đâu không? hoặc cách chính xác để ghi đè này là gì?


bạn sẽ tìm thấy giải pháp của bạn theo liên kết. magento.stackexchange.com/questions/86497/ từ
— Anand Onigeri

@AnandOntigeri giải pháp đó cũng không hoạt động bạn có thể thêm giải pháp ở đây không?
— chirag dodia

TT\Helloworld\Block\Myproduct.php==> TT\Helloworld\Block\Myproduct(xóa .php)
— bchatard

@ BriceC.that cũng không hoạt động
— chirag dodia

1
xóa C:\xampp\htdocs\Magento2\var\generation\TT\Helloworld\Block\Myproduct\Intercepto‌​r.phpvà nhận xét __constructphương pháp và thử lại xin vui lòng
— bchatard

Câu trả lời:


5

Để tiếp tục

  • __constructphương pháp bình luận (giải pháp tạm thời)
  • loại bỏ Interceptorđược tạo (cái mới sẽ được tạo - cần phải được loại bỏ sau mỗi lần sửa đổi __constructphương thức)
  • trong cách sử dụng bố trí của bạn template="TT_Helloworld::myproduct.phtml"

tôi không hiểu lý do đằng sau loại bỏ phương thức __construct khỏi lớp của tôi là gì?
— chirag dodia

đó là để gỡ lỗi, bây giờ bạn có thể cố gắng bỏ ghi chú phương thức.
— bchatard

2

bạn cần nhập \ TT \ Helloworld \ Helper \ Data $ helper trước mảng $ data = [] trong __conturation

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.