diff --git a/vendor/magento/module-catalog/Block/Product/ImageFactory.php b/vendor/magento/module-catalog/Block/Product/ImageFactory.php
index 6d692a7486c..371a6302121 100644
--- a/vendor/magento/module-catalog/Block/Product/ImageFactory.php
+++ b/vendor/magento/module-catalog/Block/Product/ImageFactory.php
@@ -12,9 +12,13 @@ use Magento\Catalog\Model\View\Asset\ImageFactory as AssetImageFactory;
use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\Image\ParamsBuilder;
use Magento\Catalog\Model\View\Asset\PlaceholderFactory;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\Framework\App\ObjectManager;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\View\ConfigInterface;
use Magento\Catalog\Helper\Image as ImageHelper;
+use Magento\Store\Model\Store;
+use Magento\Store\Model\StoreManagerInterface;
/**
* Create imageBlock from product and view.xml
@@ -48,25 +52,33 @@ class ImageFactory
*/
private $viewAssetPlaceholderFactory;
+ /**
+ * @var ScopeConfigInterface
+ */
+ private ScopeConfigInterface $scopeConfig;
+
/**
* @param ObjectManagerInterface $objectManager
* @param ConfigInterface $presentationConfig
* @param AssetImageFactory $viewAssetImageFactory
* @param PlaceholderFactory $viewAssetPlaceholderFactory
* @param ParamsBuilder $imageParamsBuilder
+ * @param ScopeConfigInterface|null $scopeConfig
*/
public function __construct(
ObjectManagerInterface $objectManager,
ConfigInterface $presentationConfig,
AssetImageFactory $viewAssetImageFactory,
PlaceholderFactory $viewAssetPlaceholderFactory,
- ParamsBuilder $imageParamsBuilder
+ ParamsBuilder $imageParamsBuilder,
+ ScopeConfigInterface $scopeConfig = null
) {
$this->objectManager = $objectManager;
$this->presentationConfig = $presentationConfig;
$this->viewAssetPlaceholderFactory = $viewAssetPlaceholderFactory;
$this->viewAssetImageFactory = $viewAssetImageFactory;
$this->imageParamsBuilder = $imageParamsBuilder;
+ $this->scopeConfig = $scopeConfig ?? ObjectManager::getInstance()->get(ScopeConfigInterface::class);
}
/**
@@ -164,7 +176,11 @@ class ImageFactory
$data = [
'data' => [
'template' => 'Magento_Catalog::product/image_with_borders.phtml',
- 'image_url' => $imageAsset->getUrl(),
+ 'image_url' => $imageAsset->getUrl() .
+ (
+ $this->scopeConfig->isSetFlag(Store::XML_PATH_STORE_IN_URL) ?
+ '?' . StoreManagerInterface::PARAM_NAME . '=' . $product->getStore()->getCode() : ''
+ ),
'width' => $imageMiscParams['image_width'],
'height' => $imageMiscParams['image_height'],
'label' => $this->getLabel($product, $imageMiscParams['image_type'] ?? ''),
diff --git a/vendor/magento/module-catalog/Block/Product/View/Gallery.php b/vendor/magento/module-catalog/Block/Product/View/Gallery.php
index b6878b98b4a..22b3cebf08e 100644
--- a/vendor/magento/module-catalog/Block/Product/View/Gallery.php
+++ b/vendor/magento/module-catalog/Block/Product/View/Gallery.php
@@ -8,7 +8,6 @@ namespace Magento\Catalog\Block\Product\View;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Helper\Image;
-use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\Product\Gallery\ImagesConfigFactoryInterface;
use Magento\Catalog\Model\Product\Image\UrlBuilder;
use Magento\Framework\Data\Collection;
@@ -16,6 +15,8 @@ use Magento\Framework\DataObject;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Json\EncoderInterface;
use Magento\Framework\Stdlib\ArrayUtils;
+use Magento\Store\Model\Store;
+use Magento\Store\Model\StoreManagerInterface;
/**
* Product gallery block
@@ -129,15 +130,20 @@ class Gallery extends AbstractView
*/
public function getGalleryImagesJson()
{
+ $storeFlag = '';
+ if ($this->_scopeConfig->isSetFlag(Store::XML_PATH_STORE_IN_URL)) {
+ $storeFlag = '?' . StoreManagerInterface::PARAM_NAME . '=' . $this->getProduct()->getStore()->getCode();
+ }
+
$imagesItems = [];
/** @var DataObject $image */
foreach ($this->getGalleryImages() as $image) {
$mediaType = $image->getMediaType();
$imageItem = new DataObject(
[
- 'thumb' => $image->getData('small_image_url'),
- 'img' => $image->getData('medium_image_url'),
- 'full' => $image->getData('large_image_url'),
+ 'thumb' => $image->getData('small_image_url') . $storeFlag,
+ 'img' => $image->getData('medium_image_url') . $storeFlag,
+ 'full' => $image->getData('large_image_url') . $storeFlag,
'caption' => $image->getLabel() ?: $this->getProduct()->getName(),
'position' => $image->getData('position'),
'isMain' => $this->isMainImage($image),
@@ -148,7 +154,7 @@ class Gallery extends AbstractView
foreach ($this->getGalleryImagesConfig()->getItems() as $imageConfig) {
$imageItem->setData(
$imageConfig->getData('json_object_key'),
- $image->getData($imageConfig->getData('data_object_key'))
+ $image->getData($imageConfig->getData('data_object_key')) . $storeFlag
);
}
$imagesItems[] = $imageItem->toArray();
diff --git a/vendor/magento/module-catalog/ViewModel/Product/Gallery.php b/vendor/magento/module-catalog/ViewModel/Product/Gallery.php
new file mode 100644
index 00000000000..e4f6ae66483
--- /dev/null
+++ b/vendor/magento/module-catalog/ViewModel/Product/Gallery.php
@@ -0,0 +1,60 @@
+block->getGalleryImages()->getItems();
+ $mainImage = current(array_filter($images, function ($img) {
+ return $this->block->isMainImage($img);
+ }));
+
+ if (!empty($images) && empty($mainImage)) {
+ $mainImage = $this->block->getGalleryImages()->getFirstItem();
+ }
+
+ if ($mainImage) {
+ $mainImageData = $mainImage->getData('medium_image_url');
+ } else {
+ return $this->block->getData('imageHelper')
+ ?->getDefaultPlaceholderUrl('image');
+ }
+
+ if ($this->scopeConfig->isSetFlag(Store::XML_PATH_STORE_IN_URL)) {
+ $mainImageData .= '?' . StoreManagerInterface::PARAM_NAME. '=' . $this->storeManager->getStore()->getCode();
+ }
+
+ return $mainImageData;
+ }
+}
diff --git a/vendor/magento/module-catalog/view/frontend/layout/catalog_product_view.xml b/vendor/magento/module-catalog/view/frontend/layout/catalog_product_view.xml
index 33fbf789817..bb1a5d4ea68 100644
--- a/vendor/magento/module-catalog/view/frontend/layout/catalog_product_view.xml
+++ b/vendor/magento/module-catalog/view/frontend/layout/catalog_product_view.xml
@@ -129,6 +129,7 @@
Magento\Catalog\Block\Product\View\GalleryOptions
Magento\Catalog\Helper\Image
+ Magento\Catalog\ViewModel\Product\Gallery
diff --git a/vendor/magento/module-catalog/view/frontend/templates/product/view/gallery.phtml b/vendor/magento/module-catalog/view/frontend/templates/product/view/gallery.phtml
index c4c9a734c25..6fe66337fb6 100644
--- a/vendor/magento/module-catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/vendor/magento/module-catalog/view/frontend/templates/product/view/gallery.phtml
@@ -13,22 +13,9 @@
?>
getGalleryImages()->getItems();
-$mainImage = current(array_filter($images, function ($img) use ($block) {
- return $block->isMainImage($img);
-}));
-
-if (!empty($images) && empty($mainImage)) {
- $mainImage = $block->getGalleryImages()->getFirstItem();
-}
-
-$helper = $block->getData('imageHelper');
-$mainImageData = $mainImage ?
- $mainImage->getData('medium_image_url') :
- $helper->getDefaultPlaceholderUrl('image');
- $imageWidth = $block->getImageAttribute('product_page_image_medium', 'width');
- $imageHeight = $block->getImageAttribute('product_page_image_medium', 'height');
-
+$imageWidth = $block->getImageAttribute('product_page_image_medium', 'width');
+$imageHeight = $block->getImageAttribute('product_page_image_medium', 'height');
+$mainImageData = $block->getViewModel()->getMainProductImage();
?>