mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
84 lines
2.6 KiB
PHP
84 lines
2.6 KiB
PHP
<?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;
|
|
}
|
|
}
|