0

I'm trying to override a private function in Magento\ConfigurableProduct\Model\Product\Type\Configurable.

I want to remove the line:

->addFilterByRequiredOptions()

private function getConfiguredUsedProductCollection(\Magento\Catalog\Model\Product $product)
{
    $collection = $this->getUsedProductCollection($product);
    $collection
        ->setFlag('has_stock_status_filter', true)
        ->addAttributeToSelect($this->getCatalogConfig()->getProductAttributes())
        ->addFilterByRequiredOptions()
        ->setStoreId($product->getStoreId());
    $requiredAttributes = ['name', 'price', 'weight', 'image', 'thumbnail', 'status', 'media_gallery'];
    foreach ($requiredAttributes as $attributeCode) {
        $collection->addAttributeToSelect($attributeCode);
    }
    foreach ($this->getUsedProductAttributes($product) as $usedProductAttribute) {
        $collection->addAttributeToSelect($usedProductAttribute->getAttributeCode());
    }
    $collection->addMediaGalleryData();
    $collection->addTierPriceData();
    return $collection;
}

Any idea how to achieve this?

4
  • What class? I cant find this snippet in code. Nov 14, 2017 at 19:55
  • Sorry, Magento\ConfigurableProduct\Model\Product\Type\Configurable Nov 14, 2017 at 20:05
  • There is no such a method in this class nor in the whole magento 2. Are we talking about core magento 2? If so then what version? Nov 14, 2017 at 20:09
  • you can find it here github.com/magento/magento2/blob/… Nov 14, 2017 at 20:12

1 Answer 1

0

Ah, i see 2.0-develop branch. I do not want to talk about sense of overriding PRIVATE method in such an old instance of magento but in general, to override any class you must add in di.xml new preference eg.

<preference for="Magento\ConfigurableProduct\Model\Product\Type\Configurable" type="Vendor\Module\YourClass" />

Then extend parent class and override requested method. Of course, since you are trying to override something that is private in very core class of product type which does not even exists in current version of magento, you will encounter problems with another private methods in this class not even mentioning eventual upgrading to newest version.

In general, what you try to do makes no sense at all at least in context of given details.

1
  • 1
    Thanks for your answer. i was clear in my question "override a private function" . Overriding a public function is not an issue for me. Nov 14, 2017 at 21:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.