Як ми можемо миттєво завантажувати галерею зображень продуктів без затримки в магенто?


11

це мій перший вопросин голий зі мною :)

Проблема: Галерея фоторам, що використовується в магенто 2, робить користувацький досвід млявим. Не має значення, наскільки швидко проходить кешований статичний magento 2, якщо зображення продукту не "миттєве".

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

Якщо ви переходите до вищезазначеного посилання (у магазині, розміщеному на блозі magento), ви бачите, що він відкривається, він показує значок завантаження, а потім завантажує зображення. Це жахливо.

Він повинен завантажуватися миттєво. Як бамбук. Готово, спеціально із увімкненим кешем на повній сторінці та опкаш.

Чи є спосіб змінити таку поведінку? Щоб завантажити його миттєво?

Для користувача це найважливіший "елемент" на сторінці. і він завантажується як останній .

Я не розумію, як ніхто на це не скаржиться.

Це електронна комерція, єдине, що має значення, - це "фотографії". Користувач піклується про це. Причина, по якій вони клацають на сторінці продукту, полягає в тому, щоб "краще побачити зображення. Особисто для мене це справді клопоче мене. Без жодної причини я стаю супер злим і тоді я запитую себе, якщо я божевільний?

Заздалегідь дякую, я просто заплутався, як таке може статися.

На моєму magento 1 воно завантажується миттєво.


Домовились, вони могли принаймні відображати базове зображення під час завантаження фоторами. Мені доведеться створити модуль для цього.
— Аарон Аллен

Вони додали його до запиту на покращення. На мобільному - це ще гірше. Але найсмішніше - коли ви переходите на веб-сайт фоторами на мобільних пристроях, ці великі галереї зображень завантажуються швидше, ніж магенто. Коли ви робите оновлення, це майже миттєво. Проблема полягає в магенто.
— Fancyman

Напевно, має бути виправлення для цього до цього часу? Його все ще дуже повільно, дякую, що задали питання, я буду постійно перевіряти це, щоб побачити, чи щось колись зміниться.
— Енді Джонс

Іноді ця команда спрацює: php bin / magento каталог: 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>

Сподіваюсь, це допомагає.


Спасибі Аарон! Я спробую сьогодні ввечері, як тільки я додому! Дуже цінуй!
— Fancyman

Аарон, я спробував це. Це працює. Це приємне тимчасове рішення, але я б хотів, щоб вони могли виправити швидкість завантаження галереї. Я не розумію, чому це завантажується так повільно. На сайті фоторама це більша галерея, і вона завантажується миттєво. Ви навіть можете спробувати на своєму мобільному fotorama.io, ви можете бачити, що це набагато швидше, а зображення набагато більше.
— Fancyman

@Aaron Allen, будь ласка, поясніть, що ви зробили з коментарем у публікації чи в коді.
— LucScu

1
Я додав рядок для першого imgелемента.
— Аарон Аллен

Це працювало для мене на Magento EE 2.1.7.
— запчастини

1

Відповідь Аарона Аллена була чудовою, і я використовував її, щоб зрозуміти, як це зробити для мого налаштування.

Все, що мені потрібно було зробити, це додати зображення з деяким вбудованим css та додати padding-bottom: 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 центи.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.