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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\ConfigurableProduct\Helper;
use Magento\Catalog\Model\Product\Image\UrlBuilder;
use Magento\Framework\App\ObjectManager;
use Magento\Catalog\Helper\Image as ImageHelper;
use Magento\Catalog\Api\Data\ProductInterface;
use Magento\Catalog\Model\Product\Image;
/**
* Class Data
* Helper class for getting options
* @api
* @since 100.0.2
*/
class Data
{
/**
* @var ImageHelper
*/
protected $imageHelper;
/**
* @var UrlBuilder
*/
private $imageUrlBuilder;
/**
* @param ImageHelper $imageHelper
* @param UrlBuilder $urlBuilder
*/
public function __construct(ImageHelper $imageHelper, UrlBuilder $urlBuilder = null)
{
$this->imageHelper = $imageHelper;
$this->imageUrlBuilder = $urlBuilder ?? ObjectManager::getInstance()->get(UrlBuilder::class);
}
/**
* Retrieve collection of gallery images
*
* @param ProductInterface $product
* @return Image[]|null
*/
public function getGalleryImages(ProductInterface $product)
{
$images = $product->getMediaGalleryImages();
if ($images instanceof \Magento\Framework\Data\Collection) {
/** @var $image Image */
foreach ($images as $image) {
$smallImageUrl = $this->imageUrlBuilder
->getUrl($image->getFile(), 'product_page_image_small');
$image->setData('small_image_url', $smallImageUrl);
$mediumImageUrl = $this->imageUrlBuilder
->getUrl($image->getFile(), 'product_page_image_medium');
$image->setData('medium_image_url', $mediumImageUrl);
$largeImageUrl = $this->imageUrlBuilder
->getUrl($image->getFile(), 'product_page_image_large');
$image->setData('large_image_url', $largeImageUrl);
}
}
return $images;
}
/**
* Get Options for Configurable Product Options
*
* @param \Magento\Catalog\Model\Product $currentProduct
* @param array $allowedProducts
* @return array
*/
public function getOptions($currentProduct, $allowedProducts)
{
$options = [];
$allowAttributes = $this->getAllowAttributes($currentProduct);
foreach ($allowedProducts as $product) {
$productId = $product->getId();
foreach ($allowAttributes as $attribute) {
$productAttribute = $attribute->getProductAttribute();
$productAttributeId = $productAttribute->getId();
$attributeValue = $product->getData($productAttribute->getAttributeCode());
$options[$productAttributeId][$attributeValue][] = $productId;
$options['index'][$productId][$productAttributeId] = $attributeValue;
}
}
return $options;
}
/**
* Get allowed attributes
*
* @param \Magento\Catalog\Model\Product $product
* @return array
*/
public function getAllowAttributes($product)
{
return $product->getTypeInstance()->getConfigurableAttributes($product);
}
}