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 2DI & 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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.