magentoの遅延なしに、製品の画像ギャラリーを即座にロードするにはどうすればよいですか?


11

これは私と一緒に裸の私の最初のクエシトンです:)

問題:magento 2で使用されているフォトラマギャラリーにより、ユーザーエクスペリエンスが遅くなります。製品イメージが「インスタント」でない場合、キャッシュされた静的magento 2がどれだけ速く実行されるかは問題ではありません。

https://www.ninewest.co.uk/sandals/high-heel/allclear-black-snake-print-nine-west

上記のリンク(magentoブログに表示されているストア)に移動すると、そのリンクが開いていることがわかり、読み込みアイコンが表示され、画像が読み込まれます。それは恐ろしいことです。

すぐに読み込まれるはずです。バムみたい。完了、特に全ページキャッシュとopcacheが有効になっています。

この動作を変更する方法はありますか?すぐにロードするには?

ユーザーにとって、これはページで最も重要な「要素」です。そして、それは最新のものとしてロードされます。

誰もこれについて不平を言っていないのか分かりません。

これはeコマースです。重要なのは「写真」だけです。それはユーザーが気にすることです。彼らが製品ページをクリックする理由は、「画像をよりよく見るためです。個人的に私にとってそれは本当に私を悩ませます。理由もなく、私は超怒り、そして自分が狂っているかどうか自分に尋ねますか?

事前のおかげで、私はそのようなことがどうして起こり得るのか混乱しています。

私のmagento 1では、即座にロードされます。


同意します。フォトラマの読み込み中に、少なくともベース画像を表示することができます。そのためのモジュールを作成する必要があります。
アーロンアレン

機能改善リクエストに追加しました。モバイルではさらに悪い。しかし面白いのは、モバイルでfotoramaのWebサイトにアクセスすると、それらの大きな画像ギャラリーの読み込みがmagentoの読み込みよりも速いことです。更新を行うと、ほぼ瞬時に更新されます。問題はmagentoにあります。
ファンシーマン2016

きっと今までにこれを修正する必要がありますか?まだ非常に遅いので、質問をしていただきありがとうございます。これをチェックして、何かが変わるかどうか確認します。
アンディジョーンズ2017年

時々このコマンドは機能します:php bin / magento catalog:images:resize
Saphal Jha

「ジャンプコンテンツの修正。ローダーはギャラリーと同じサイズである必要があります」とはどういう意味ですか?製品よりもロードした画像が最初に小さく、大きく表示されるという問題があります
Akbar Mo

回答:


10

JSのロード中に製品のベースイメージが表示されるようにする簡単なソリューションを次に示します。テーマに次のファイルを作成します {theme_dir}/Magento_Catalog/templates/product/view/gallery.phtml

<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
    <div data-role="loader" class="loading-mask">
        <div class="loader">

            <img src="<?php echo $block->getGalleryImages()->getFirstItem()->getData('medium_image_url') ?>" style="max-width: 100%; max-height: 100%">

            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
        </div>
    </div>
</div>
<!--Fix for jumping content. Loader must be the same size as gallery.-->
<script>
    var config = {
            "width": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
            "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
            "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
            "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height'); ?>
        },
        thumbBarHeight = 0,
        loader = document.querySelectorAll('[data-gallery-role="gallery-placeholder"] [data-role="loader"]')[0];

    if (config.navtype === 'horizontal') {
        thumbBarHeight = config.thumbheight;
    }

    loader.style.paddingBottom = ( config.height / config.width * 100) + "%";
</script>
<script type="text/x-magento-init">
    {
        "[data-gallery-role=gallery-placeholder]": {
            "mage/gallery/gallery": {
                "mixins":["magnifier/magnify"],
                "magnifierOpts": <?php /* @escapeNotVerified */ echo $block->getMagnifier(); ?>,
                "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>,
                "options": {
                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/nav"); ?>",
                    <?php if (($block->getVar("gallery/loop"))): ?>
                        "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/loop"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/keyboard"))): ?>
                        "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/keyboard"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/arrows"))): ?>
                        "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/arrows"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/allowfullscreen"))): ?>
                        "allowfullscreen": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/allowfullscreen"); ?>,
                    <?php endif; ?>
                    <?php if (($block->getVar("gallery/caption"))): ?>
                        "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/caption"); ?>,
                    <?php endif; ?>
                    "width": "<?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>",
                    "thumbwidth": "<?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'width'); ?>",
                    <?php if ($block->getImageAttribute('product_page_image_small', 'height') || $block->getImageAttribute('product_page_image_small', 'width')): ?>
                        "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
                        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                    <?php endif; ?>
                    <?php if ($block->getImageAttribute('product_page_image_medium', 'height') || $block->getImageAttribute('product_page_image_medium', 'width')): ?>
                        "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/transition/duration")): ?>
                        "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/duration"); ?>,
                    <?php endif; ?>
                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>",
                    <?php if (($block->getVar("gallery/navarrows"))): ?>
                        "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>,
                    <?php endif; ?>
                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
                },
                "fullscreen": {
                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/nav"); ?>",
                    <?php if ($block->getVar("gallery/fullscreen/loop")): ?>
                        "loop": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
                    <?php endif; ?>
                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
                    <?php if ($block->getVar("gallery/transition/navarrows")): ?>
                        "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navarrows"); ?>,
                    <?php endif; ?>
                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navtype"); ?>",
                    <?php if ($block->getVar("gallery/fullscreen/arrows")): ?>
                        "arrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/fullscreen/caption")): ?>
                        "showCaption": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
                    <?php endif; ?>
                    <?php if ($block->getVar("gallery/fullscreen/transition/duration")): ?>
                        "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
                    <?php endif; ?>
                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
                },
                "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?>
            }
        }
    }
</script>

お役に立てれば。


アーロン、ありがとう!帰宅したら、今夜はやってみます!心から感謝する!
ファンシーマン2016

アーロンやってみました。できます。それは素晴らしい一時的な解決策ですが、ギャラリーの読み込み速度を修正できればいいのですが。読み込みが非常に遅い理由がわかりません。写真サイトでは、それはより大きなギャラリーであり、即座に読み込まれます。あなたはあなたのモバイルfotorama.ioで試すことさえできます、あなたはそれがはるかに速く、画像がはるかに大きいのを見ることができます。
ファンシーマン2016

@Aaron Allenが投稿またはコード内のコメントで何をしたか説明してください。
LucScu 2016年

1
最初のimg要素の行を追加しました。
アーロンアレン

これはMagento EE 2.1.7で動作しました。
スペアサイクル2017

1

Aaron Allenの答えは素晴らしかったので、カスタムセットアップでそれを行う方法を理解するために使用しました。

私がしなければならなかったすべてはインラインCSSで画像を追加し、パディングボトムをローディングマスクに100%追加することでした。

...
<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
    <div data-role="loader" class="loading-mask" style="padding-bottom:100%;">
        <div class="loader">
            <img src="<?php echo $_product->getData('img_url'); ?>" style="max-width: 100%; max-height: 100%; display: block;">
            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
        </div>
    </div>
</div>
...

上記の答えと非常に似ていますが、2セント追加したいと思いました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.