Magento 2: переопределить Magento\Review\Block\Product\View не работает

Я пытаюсь переопределить блок обзора вида продукта в Magento 2, но не могу заставить его работать.

Приложение / код /[пакет]/CombineReviews/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="[Package]_CombineReviews" setup_version="1.0.0" />
</config>

Приложение / код /[пакет]/CombineReviews/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Review\Block\Product\View" type="[Package]\CombineReviews\Block\Magento\Review\Product\View" />
</config>

Приложение / код /[пакет]/CombineReviews/Block/Magento/Review/Product/View.php

namespace [Package]\CombineReviews\Block\Magento\Review\Product;

class View extends \Magento\Review\Block\Product\View {
/**
 * Review collection
 *
 * @var ReviewCollection
 */
protected $_reviewsCollection;

/**
 * Review resource model
 *
 * @var \Magento\Review\Model\ResourceModel\Review\CollectionFactory
 */
protected $_reviewsColFactory;

/**
 * @param \Magento\Catalog\Block\Product\Context $context
 * @param \Magento\Framework\Url\EncoderInterface $urlEncoder
 * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
 * @param \Magento\Framework\Stdlib\StringUtils $string
 * @param \Magento\Catalog\Helper\Product $productHelper
 * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig
 * @param \Magento\Framework\Locale\FormatInterface $localeFormat
 * @param \Magento\Customer\Model\Session $customerSession
 * @param ProductRepositoryInterface $productRepository
 * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
 * @param \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory
 * @param array $data
 * @SuppressWarnings(PHPMD.ExcessiveParameterList)
 */
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,
    \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory,
    array $data = []
) {
    $this->_reviewsColFactory = $collectionFactory;
    parent::__construct(
        $context,
        $urlEncoder,
        $jsonEncoder,
        $string,
        $productHelper,
        $productTypeConfig,
        $localeFormat,
        $customerSession,
        $productRepository,
        $priceCurrency,
        $data
    );
}

/**
 * Render block HTML
 *
 * @return string
 */
protected function _toHtml()
{
    $this->getProduct()->setShortDescription(null);

    return parent::_toHtml();
}

/**
 * Replace review summary html with more detailed review summary
 * Reviews collection count will be jerked here
 *
 * @param \Magento\Catalog\Model\Product $product
 * @param bool $templateType
 * @param bool $displayIfNoReviews
 * @return string
 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
 */
public function getReviewsSummaryHtml(
    \Magento\Catalog\Model\Product $product,
    $templateType = false,
    $displayIfNoReviews = false
) {
    return $this->getLayout()->createBlock(
        'Magento\Review\Block\Rating\Entity\Detailed'
    )->setEntityId(
        $this->getProduct()->getId()
    )->toHtml() . $this->getLayout()->getBlock(
        'product_review_list.count'
    )->assign(
        'count',
        $this->getReviewsCollection()->getSize()
    )->toHtml();
}

/**
 * Get collection of reviews
 *
 * @return ReviewCollection
 */
public function getReviewsCollection()
{
    if (null === $this->_reviewsCollection) {
        $this->_reviewsCollection = $this->_reviewsColFactory->create()->addStoreFilter(
            $this->_storeManager->getStore()->getId()
        )->addStatusFilter(
            \Magento\Review\Model\Review::STATUS_APPROVED
        )->addEntityFilter(
            'product',
            3
            //$this->getProduct()->getId()
        )->setDateOrder();
    }
    return $this->_reviewsCollection;
}

/**
 * Force product view page behave like without options
 *
 * @return bool
 */
public function hasOptions()
{
    return false;
}
}

В функцию ReviewCollection я внес небольшую модификацию:

)->addEntityFilter(
    'product',
    3
    //$this->getProduct()->getId()

Эта модификация работает из основных файлов, но не из моего пользовательского модуля. Я также пытался вернуть 'test' из этой функции, но не могу заставить его работать.

Есть кто-то, кто видит проблему?

1 ответ

Вы должны изменить вас app/code/[Package]/CombineReviews/etc/module.xml с помощью следующего кода.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="[Package]_CombineReviews" setup_version="1.0.0" schema_version="1.0.0">
        <sequence>
            <module name="Magento_Review" />
        </sequence>
    </module>
</config>

Измените путь к файлу app/code/[Package]/CombineReviews/Block/Magento/Review/Product/View.php на app/code/[Package]/CombineReviews/Block/Product/View.php.

Бежать setup: upgrade а также static-content: deploy команды и проверить. Надеюсь, это должно сработать.

Другие вопросы по тегам