如何在 Magento2 中扩展 galley.phtml?

How to extend galley.phtml in Magento2?

我想在自定义模块的 PDP 部分的 gallery.phtml 中添加自定义代码。 我试过这个=> 在 catalog_product_view.xml

中称为默认块
<referenceBlock name="product.info.media.image">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Ajith_Mymodule::product/view/gallery.phtml</argument>
            </action>
        </referenceBlock>

加载 gallery.phtml 有和没有默认代码,对我来说没有什么效果。 我是在尝试正确的方法还是有人告诉我这样做的想法?

此方法正常工作

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

/**
 * Product media data template
 *
 * @var $block \Magento\Catalog\Block\Product\View\Gallery
 */
?>

<?php
$images = $block->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');

?>

<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
    <img
        alt="main product photo"
        class="gallery-placeholder__image"
        src="<?= /* @noEscape */ $mainImageData ?>"
    />
</div>

<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() ?>
            }
        }
    }
</script>

在我们的自定义模板中调用它

如果我们看一下:

vendor/magento/module-product-video/Observer/ChangeTemplateObserver.php

我们可以看到该模板将通过观察者事件添加。所以,我们需要在我们的模块中禁用这个观察者事件。然后,尝试添加我们的自定义模板。

Vendor/Module/etc/events.xml

<event name=""catalog_product_gallery_prepare_layout"">
        <observer name=""change_template"" disabled=""true""/>
        <observer name=""custom_change_template"" instance=""Vendor\Module\Observer\ChangeTemplateObserver"" />
</event>

Vendor/Module/Observer/ChangeTemplateObserver.php

<?php
namespace Vendor\Module\Observer;
use Magento\Framework\Event\ObserverInterface;
class ChangeTemplateObserver implements ObserverInterface
{
   public function execute(\Magento\Framework\Event\Observer $observer)
   {
     $observer->getBlock()->setTemplate('Vendor_Module::helper/gallery.phtml');
   }
}