9
9
10
10
use Magento \Catalog \Api \Data \ProductInterface ;
11
11
use Magento \Catalog \Model \Product ;
12
- use Magento \ConfigurableProduct \Model \ResourceModel \Product \Type \Configurable \Product \CollectionFactory ;
13
- use Magento \ConfigurableProduct \Model \ResourceModel \Product \Type \Configurable \Product \Collection as ChildCollection ;
14
12
use Magento \Catalog \Model \ProductFactory ;
13
+ use Magento \ConfigurableProduct \Model \ResourceModel \Product \Type \Configurable \Product \Collection as ChildCollection ;
14
+ use Magento \ConfigurableProduct \Model \ResourceModel \Product \Type \Configurable \Product \CollectionFactory ;
15
15
use Magento \Framework \EntityManager \MetadataPool ;
16
16
use Magento \Framework \Api \SearchCriteriaBuilder ;
17
17
use Magento \CatalogGraphQl \Model \Resolver \Products \DataProvider \Product as DataProvider ;
@@ -143,7 +143,6 @@ private function fetch() : array
143
143
144
144
$ linkField = $ this ->metadataPool ->getMetadata (ProductInterface::class)->getLinkField ();
145
145
foreach ($ this ->parentProducts as $ product ) {
146
-
147
146
$ attributeData = $ this ->getAttributesCodes ($ product );
148
147
/** @var ChildCollection $childCollection */
149
148
$ childCollection = $ this ->childCollectionFactory ->create ();
@@ -169,24 +168,20 @@ private function fetch() : array
169
168
}
170
169
171
170
/**
172
- * Get attributes codes
171
+ * Get attributes code
173
172
*
174
- * @param Product $currentProduct
173
+ * @param \Magento\Catalog\Model\ Product $currentProduct
175
174
* @return array
176
175
*/
177
176
private function getAttributesCodes (Product $ currentProduct ): array
178
177
{
179
178
$ attributeCodes = [];
180
- $ attributes = $ currentProduct ->getAttributes ();
181
- foreach ($ attributes as $ key => $ attribute ) {
182
- $ isVisible = (int )$ attribute ->getIsVisibleOnFront ();
183
- if (!$ isVisible ) {
184
- continue ;
185
- }
186
- if (!in_array ($ key , $ attributeCodes )) {
187
- continue ;
179
+ $ allowAttributes = $ currentProduct ->getTypeInstance ()->getConfigurableAttributes ($ currentProduct );
180
+ foreach ($ allowAttributes as $ attribute ) {
181
+ $ productAttribute = $ attribute ->getProductAttribute ();
182
+ if (!\in_array ($ productAttribute ->getAttributeCode (), $ attributeCodes )) {
183
+ $ attributeCodes [] = $ productAttribute ->getAttributeCode ();
188
184
}
189
- $ attributeCodes [] = $ key ;
190
185
}
191
186
192
187
return $ attributeCodes ;
0 commit comments