Loader.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Helper\Product\Options;
  7. use Magento\Catalog\Api\Data\ProductInterface;
  8. use Magento\ConfigurableProduct\Api\Data\OptionInterface;
  9. use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
  10. use Magento\ConfigurableProduct\Api\Data\OptionValueInterfaceFactory;
  11. use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
  12. /**
  13. * Class Loader
  14. */
  15. class Loader
  16. {
  17. /**
  18. * @var OptionValueInterfaceFactory
  19. */
  20. private $optionValueFactory;
  21. /**
  22. * @var JoinProcessorInterface
  23. */
  24. private $extensionAttributesJoinProcessor;
  25. /**
  26. * ReadHandler constructor
  27. *
  28. * @param OptionValueInterfaceFactory $optionValueFactory
  29. * @param JoinProcessorInterface $extensionAttributesJoinProcessor
  30. */
  31. public function __construct(
  32. OptionValueInterfaceFactory $optionValueFactory,
  33. JoinProcessorInterface $extensionAttributesJoinProcessor
  34. ) {
  35. $this->optionValueFactory = $optionValueFactory;
  36. $this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor;
  37. }
  38. /**
  39. * @param ProductInterface $product
  40. * @return OptionInterface[]
  41. */
  42. public function load(ProductInterface $product)
  43. {
  44. $options = [];
  45. /** @var Configurable $typeInstance */
  46. $typeInstance = $product->getTypeInstance();
  47. $attributeCollection = $typeInstance->getConfigurableAttributeCollection($product);
  48. $this->extensionAttributesJoinProcessor->process($attributeCollection);
  49. foreach ($attributeCollection as $attribute) {
  50. $values = [];
  51. $attributeOptions = $attribute->getOptions();
  52. if (is_array($attributeOptions)) {
  53. foreach ($attributeOptions as $option) {
  54. /** @var \Magento\ConfigurableProduct\Api\Data\OptionValueInterface $value */
  55. $value = $this->optionValueFactory->create();
  56. $value->setValueIndex($option['value_index']);
  57. $values[] = $value;
  58. }
  59. }
  60. $attribute->setValues($values);
  61. $options[] = $attribute;
  62. }
  63. return $options;
  64. }
  65. }