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’ из этой функции, но не могу заставить его работать.

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

0

Решение

Вы должны изменить вас 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 команды и проверить. Надеюсь, это должно сработать.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]