Magento 2.4.2:
I completely rebuilt the way magento displays configurable products. All working fine except I cannot get fotorama to display the images of another product.
The fotorama instance is generated as usual (magento core):
<script type="text/x-magento-init">
{
"[data-gallery-role=gallery-placeholder]": {
"mage/gallery/gallery": {
"mixins":["magnifier/magnify"],
"magnifierOpts": <?= /* @noEscape */ $block->getMagnifier() ?>,
"data": <?= /* @noEscape */ $block->getGalleryImagesJson() ?>,
"options": <?= /* @noEscape */ $block->getGalleryOptions()->getOptionsJson() ?>,
"fullscreen": <?= /* @noEscape */ $block->getGalleryOptions()->getFSOptionsJson() ?>,
"breakpoints": <?= /* @noEscape */ $block->getBreakpoints() ?>
}
}
}
"data" is holding the json encoded image data which looks like this:
Array
(
[0] => stdClass Object
(
[thumb] => https://www.example.com/media/catalog/product/cache/90c100ed90aca17de04ff1ba4c4442ea/s/c/sc-12neu_2.jpg
[img] => https://www.example.com/media/catalog/product/cache/6d42eae753db076e9ad0d26a0f89b2c2/s/c/sc-12neu_2.jpg
[full] => https://www.example.com/media/catalog/product/cache/ce44fae85f650a7a849418326db3f5ae/s/c/sc-12neu_2.jpg
[caption] => Test Product
[position] => 1
[isMain] => 1
[type] => image
[videoUrl] =>
)
[1] => stdClass Object
(
[thumb] => https://www.example.com/media/catalog/product/cache/90c100ed90aca17de04ff1ba4c4442ea/s/c/sc-32aw_4_1.jpg
[img] => https://www.example.com/media/catalog/product/cache/6d42eae753db076e9ad0d26a0f89b2c2/s/c/sc-32aw_4_1.jpg
[full] => https://www.example.com/media/catalog/product/cache/ce44fae85f650a7a849418326db3f5ae/s/c/sc-32aw_4_1.jpg
[caption] => Test Product
[position] => 2
[isMain] =>
[type] => image
[videoUrl] =>
)
[2] => stdClass Object
(
[thumb] => https://www.example.com/media/catalog/product/cache/90c100ed90aca17de04ff1ba4c4442ea/s/c/sc-32aw2_4_1.jpg
[img] => https://www.example.com/media/catalog/product/cache/6d42eae753db076e9ad0d26a0f89b2c2/s/c/sc-32aw2_4_1.jpg
[full] => https://www.example.com/media/catalog/product/cache/ce44fae85f650a7a849418326db3f5ae/s/c/sc-32aw2_4_1.jpg
[caption] => Test Product
[position] => 3
[isMain] =>
[type] => image
[videoUrl] =>
)
)
For each of the child products I generated the json encoded image array in the exact same way. On click I would like to replace the existing gallery with the images of those child products:
<script>
require([
'jquery'
], function ($) {
$(function () {
let $placeholder = $('.gallery-placeholder');
let gallery = null;
$placeholder.on('gallery:loaded', function () {
gallery = $placeholder.data('gallery');
});
$('.radio .item').on('click', function(){
$('.radio .item').removeClass('selected');
$(this).addClass('selected');
if (gallery) {
let images = $(this).find('script').html();
if (images) {
// this should replace the existing images...
gallery.updateData(images);
}
}
});
});
});
</script>
But nothing happens. No images replaced and no error message. I have checked that the gallery object exists and that the images are all there and properly json encoded.
Does anybody know how to actually replace the images?
Thank you