Es kann vorkommen, dass Sie die Klasse Magento\ConfigurableProduct\Helper\Product\Options\Loader.php überschreiben möchten.
Das kann z.B. dann nötig sein, wenn Sie das Call to undefined method Magento\Catalog\Model\Product\Type\Simple\Interceptor::getConfigurableAttributeCollection() Problem lösen müssen. Am besten eignet sich dafür eine eigene Magento 2 Extension, in welcher Sie dann die Loader Klasse überschreiben.
Gehen Sie wie folgt vor:
Fügen Sie den folgenden Inhalt in die di.xml Ihrer Extension ein:
1 2 3 4 |
<?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\ConfigurableProduct\Helper\Product\Options\Loader" type="Vendor\Module\ConfigurableProduct\Helper\Product\Options\Loader" /> </config> |
Erstellen Sie nun die Klasse Loader.php in folgendem Pfad: Vendor/Module/ConfigurableProduct/Helper/Product/Options/Loader.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Vendor\Module\ConfigurableProduct\Helper\Product\Options; use Magento\Catalog\Api\Data\ProductInterface; use Magento\ConfigurableProduct\Api\Data\OptionInterface; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\ConfigurableProduct\Api\Data\OptionValueInterfaceFactory; use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface; /** * Class Loader */ class Loader extends \Magento\ConfigurableProduct\Helper\Product\Options\Loader { /** * @var OptionValueInterfaceFactory */ private $optionValueFactory; /** * @var JoinProcessorInterface */ private $extensionAttributesJoinProcessor; /** * ReadHandler constructor * * @param OptionValueInterfaceFactory $optionValueFactory * @param JoinProcessorInterface $extensionAttributesJoinProcessor */ public function __construct( OptionValueInterfaceFactory $optionValueFactory, JoinProcessorInterface $extensionAttributesJoinProcessor ) { $this->optionValueFactory = $optionValueFactory; $this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor; } /** * @param ProductInterface $product * @return OptionInterface[] */ public function load(ProductInterface $product) { $options = []; /** @var Configurable $typeInstance */ $typeInstance = $product->getTypeInstance(); // ###### Loader fix start for: Call to undefined method Magento\Catalog\Model\Product\Type\Simple\Interceptor::getConfigurableAttributeCollection() if (get_class($typeInstance) == 'Magento\Catalog\Model\Product\Type\Simple\Interceptor' || get_class($typeInstance) == 'Magento\Bundle\Model\Product\Type'){ return null; } // ###### Loader fix end $attributeCollection = $typeInstance->getConfigurableAttributeCollection($product); $this->extensionAttributesJoinProcessor->process($attributeCollection); foreach ($attributeCollection as $attribute) { $values = []; $attributeOptions = $attribute->getOptions(); if (is_array($attributeOptions)) { foreach ($attributeOptions as $option) { /** @var \Magento\ConfigurableProduct\Api\Data\OptionValueInterface $value */ $value = $this->optionValueFactory->create(); $value->setValueIndex($option['value_index']); $values[] = $value; } } $attribute->setValues($values); $options[] = $attribute; } return $options; } } |
Fertig!
Im obigen Beispiel wurde die load Funktion angepasst um das Problem Call to undefined method Magento\Catalog\Model\Product\Type\Simple\Interceptor::getConfigurableAttributeCollection() zu beheben. Dazu wurde in der Loader.php Klasse folgender Code eingefügt:
1 2 3 4 5 |
// ###### Loader fix start for: Call to undefined method Magento\Catalog\Model\Product\Type\Simple\Interceptor::getConfigurableAttributeCollection() if (get_class($typeInstance) == 'Magento\Catalog\Model\Product\Type\Simple\Interceptor' || get_class($typeInstance) == 'Magento\Bundle\Model\Product\Type'){ return null; } // ###### Loader fix end |