Я пытаюсь перезаписать блок в модуле magento / sales в Magento2, чтобы перезаписать новую коллекцию. Ниже приведен оригинальный модуль продаж ядра. Я использую Magento 2.2.4.
protected function _prepareCollection()
{
$attributes = $this->_catalogConfig->getProductAttributes();
/* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
$collection = $this->_productFactory->create()->getCollection();
$collection->setStore(
$this->getStore()
)->addAttributeToSelect(
$attributes
)->addAttributeToSelect(
'sku'
)->addStoreFilter()->addAttributeToFilter(
'type_id',
$this->_salesConfig->getAvailableProductTypes()
)->addAttributeToSelect(
'gift_message_available'
);
$this->setCollection($collection);
return parent::_prepareCollection();
}
Я пытаюсь добиться того, чтобы $ this-> setCollection ($ collection) установил другую коллекцию на основе разных условий. , Ниже моя перезапись для этого.
protected function _prepareCollection()
{
$attributes = $this->_catalogConfig->getProductAttributes();
$collection = $this->_productFactory->create()->getCollection();
$collection->setStore(
$this->getStore()
)->addAttributeToSelect(
$attributes
)->addAttributeToSelect(
'sku'
)->addStoreFilter()->addAttributeToFilter(
'type_id',
$this->_salesConfig->getAvailableProductTypes()
)->addAttributeToSelect(
'gift_message_available'
);
$customerGroupId = $this->getCustomerGroupId();
if ($customerGroupId == '1') {
$this->debug_to_console('I am Trade.');
$tradeCollection = $this->getTradeCollection($collection);
$this->setCollection($tradeCollection);
}
if ($customerGroupId == '3') {
$this->debug_to_console('I am Retail.');
$retailCollection = $this->getRetailCollection($collection);
$this->setCollection($retailCollection);
}
return parent::_prepareCollection();
}
Я хочу установить коллекцию на основе различных групп клиентов, а $ tradeCollection и $ retailCollection фактически устанавливают коллекцию правильно. Если я использую return $ this, он покажет правильную коллекцию, но если я использую return parent :: _ prepareCollection (), он все равно возвращает исходную коллекцию.
Однако у parent :: _ prepareCollection () есть фильтрация и сортировать functin с коллекцией, поэтому я должен использовать parent :: _ prepareCollection () вместо использования return $ this, потому что return $ this не имеет фильтрации и сортировки.
Итак, как мне использовать правильные collection, которые являются $ retailCollection и $ tradeCollection, и возвращают их обратно в parent :: _ prepareCollection (), так что он будет отображаться с правильной коллекцией с функцией фильтрации и сортировки?