เราจะโหลดคลังรูปภาพสินค้าทันทีโดยไม่ล่าช้าในวีโอไอพีได้อย่างไร


11

นี่เป็นคำถามแรกของฉันที่เปิดเผยกับฉัน :)

ปัญหา: แกลเลอรี่ fotorama ที่ใช้ใน magento 2 ทำให้ผู้ใช้มีประสบการณ์เฉื่อย ไม่สำคัญว่าวีโอไอพีแคชแบบคงที่จะทำงานเร็วแค่ไหนหากรูปผลิตภัณฑ์ไม่ใช่ "ทันที"

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

หากคุณไปที่ลิงก์ด้านบน (ร้านค้าแสดงในบล็อกวีโอไอพี) คุณจะเห็นร้านเปิดขึ้นจากนั้นจะแสดงไอคอนโหลดแล้วโหลดภาพ มันช่างน่ากลัว

ควรโหลดทันที เช่นเดียวกับ bamm เสร็จสิ้นพิเศษเมื่อใช้แคชแบบเต็มหน้าและเปิดใช้งาน opcache

มีวิธีในการเปลี่ยนพฤติกรรมนี้หรือไม่? โหลดทันทีหรือไม่

สำหรับผู้ใช้มันเป็น "องค์ประกอบ" ที่สำคัญที่สุดในหน้า และมันโหลดเป็นรุ่นล่าสุด

ฉันไม่เข้าใจว่าไม่มีใครบ่นเกี่ยวกับเรื่องนี้

นี่คือ E commerce สิ่งเดียวที่สำคัญคือ "รูปภาพ" มันเป็นสิ่งที่ผู้ใช้ใส่ใจ เหตุผลที่พวกเขาคลิกบนหน้าผลิตภัณฑ์คือ "ดูภาพได้ดีขึ้นสำหรับฉันโดยส่วนตัวแล้วมันทำให้ฉันเป็นโรคจิตจริง ๆ ด้วยเหตุผลใดก็ตามที่ฉันโกรธสุด ๆ แล้วก็ถามตัวเองว่าฉันบ้าเหรอ?

ขอบคุณล่วงหน้าฉันแค่สับสนว่าสิ่งนี้จะเกิดขึ้นได้อย่างไร

สำหรับวีโอไอพีของฉันมันโหลดได้ทันที


เห็นด้วยอย่างน้อยพวกเขาอาจมีภาพฐานปรากฏขึ้นในขณะที่โหลด fotorama ฉันจะต้องสร้างโมดูลเพื่อทำเช่นนั้น
Aaron Allen

พวกเขาได้เพิ่มลงในคำขอการปรับปรุงคุณลักษณะ บนมือถือมันยิ่งแย่ลง แต่สิ่งที่ตลกคือเมื่อคุณไปที่เว็บไซต์ fotorama บนมือถือโหลดของแกลเลอรี่ภาพขนาดใหญ่เหล่านั้นจะเร็วขึ้นและเป็นวีโอไอพี เมื่อคุณรีเฟรชมันเกือบจะทันที ปัญหาอยู่กับคุณภาพเยี่ยม
Fancyman

ตอนนี้ต้องแก้ไขอย่างแน่นอนเหรอ? มันยังช้ามากขอบคุณที่ถามคำถามฉันจะตรวจสอบเรื่องนี้ต่อเพื่อดูว่ามีอะไรเปลี่ยนแปลงหรือเปล่าฮ่าฮ่า
jones

บางครั้งคำสั่งนี้จะใช้งานได้: แคตตาล็อก php / magento: ภาพ: ปรับขนาด
Saphal Jha

หมายความว่าอย่างไรและจะทำอย่างไร "แก้ไขเพื่อกระโดดเนื้อหา Loader จะต้องมีขนาดเท่ากับแกลเลอรี" ฉันพบปัญหาหนึ่งคือเมื่อโหลดผลิตภัณฑ์ของฉันมากกว่าภาพแสดงขนาดเล็กและใหญ่เป็นอันดับแรก
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 เป็นแกลเลอรีที่ใหญ่ขึ้นและโหลดได้ทันที คุณสามารถลองใช้ fotorama.io บนมือถือของคุณคุณจะเห็นว่ามันเร็วขึ้นมากและภาพก็ใหญ่ขึ้น
Fancyman

@Aaron Allen โปรดอธิบายสิ่งที่คุณทำกับความคิดเห็นในโพสต์หรือในรหัส
LucScu

1
ฉันเพิ่มบรรทัดสำหรับimgองค์ประกอบแรก
Aaron Allen

สิ่งนี้ใช้ได้กับฉันใน Magento EE 2.1.7
sparecycle

1

คำตอบของแอรอนอัลเลนนั้นยอดเยี่ยมมากและฉันก็ใช้มันเพื่อหาวิธีการตั้งค่าแบบกำหนดเองของฉัน

สิ่งที่ฉันต้องทำก็แค่เพิ่มภาพที่มี css แบบอินไลน์และเพิ่ม padding-bottom: 100% ไปยัง loading-mask

...
<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.