1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\ConfigurableProduct\Model;
- use Magento\Catalog\Model\Product;
- use Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute;
- /**
- * Class ConfigurableAttributeData
- * @api
- * @since 100.0.2
- */
- class ConfigurableAttributeData
- {
- /**
- * Get product attributes
- *
- * @param Product $product
- * @param array $options
- * @return array
- */
- public function getAttributesData(Product $product, array $options = [])
- {
- $defaultValues = [];
- $attributes = [];
- foreach ($product->getTypeInstance()->getConfigurableAttributes($product) as $attribute) {
- $attributeOptionsData = $this->getAttributeOptionsData($attribute, $options);
- if ($attributeOptionsData) {
- $productAttribute = $attribute->getProductAttribute();
- $attributeId = $productAttribute->getId();
- $attributes[$attributeId] = [
- 'id' => $attributeId,
- 'code' => $productAttribute->getAttributeCode(),
- 'label' => $productAttribute->getStoreLabel($product->getStoreId()),
- 'options' => $attributeOptionsData,
- 'position' => $attribute->getPosition(),
- ];
- $defaultValues[$attributeId] = $this->getAttributeConfigValue($attributeId, $product);
- }
- }
- return [
- 'attributes' => $attributes,
- 'defaultValues' => $defaultValues,
- ];
- }
- /**
- * @param Attribute $attribute
- * @param array $config
- * @return array
- */
- protected function getAttributeOptionsData($attribute, $config)
- {
- $attributeOptionsData = [];
- foreach ($attribute->getOptions() as $attributeOption) {
- $optionId = $attributeOption['value_index'];
- $attributeOptionsData[] = [
- 'id' => $optionId,
- 'label' => $attributeOption['label'],
- 'products' => isset($config[$attribute->getAttributeId()][$optionId])
- ? $config[$attribute->getAttributeId()][$optionId]
- : [],
- ];
- }
- return $attributeOptionsData;
- }
- /**
- * @param int $attributeId
- * @param Product $product
- * @return mixed|null
- */
- protected function getAttributeConfigValue($attributeId, $product)
- {
- return $product->hasPreconfiguredValues()
- ? $product->getPreconfiguredValues()->getData('super_attribute/' . $attributeId)
- : null;
- }
- }
|