如何使用分页显示magento媒体库中的所有图像?

时间:2014-09-26 09:21:46

标签: php magento pagination

我有一个包含100多张图片的分组产品,我们在后端有一个图像标记模块。现在的问题是,每当有100多个图像的产品出现时,后端会因为同时加载所有图像而崩溃。我尝试使用分页,但分页与SQL查询一起使用,但我们现在使用的代码是

$galleryData = $product->getData('media_gallery');
foreach ($galleryData['images'] as &$image) 
{      
    $thumbImgTag = $thumbImgTag . '<input type="hidden" name="image_url_' . $img_counter . 
    '" id="image_url_' . $img_counter . '" value="' . str_replace('/', '~^~', $image['file']) .'" />';

    $thumbImgTag = $thumbImgTag . '<img class="input_image" src="'. 
    Mage::getModel('catalog/product_media_config')->getMediaUrl( $image['file'] ) . 
    '" height="100px" width="163px" id="image_thumb_' . $img_counter . '" />';

    $img_counter++;
}

这是我们用来获取所有图像的代码,我想添加一个分页或其他逻辑,以便我的magento后端不会崩溃,一次加载所有图像。

1 个答案:

答案 0 :(得分:1)

始终使用$ galleryData = $ product-&gt; getData(&#39; media_gallery&#39;); Magento开始将所有图像加载到收集中,这将是一个痛点,你应该避免它。

您可以通过sql查询选择与产品相关的前10个图像,最好的方法是通过Post命令加载图库的XMLHttpRequestwindow。

您可以将脚本放入media.phtml模板:

<script>
                  function showImages(str)
                  {
                  document.getElementById("yourimageblock").innerHTML="<span class=\"ajax-loader\"><img src=\"http://'.$_SERVER[HTTP_HOST].'/img/loading.gif\"> Loading ...</span>";

                  if (str.length==0)
                    { 
                    document.getElementById("yourimageblock").innerHTML="";                      
                    return;
                    }
                  if (window.XMLHttpRequest)
                    {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp=new XMLHttpRequest();
                    }
                  else
                    {// code for IE6, IE5
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                    }
                  xmlhttp.onreadystatechange=function()
                    {
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                      {
                      document.getElementById("yourimageblock").innerHTML=xmlhttp.responseText;
                      }
                    }

                  xmlhttp.open("GET","<?php echo $this->getUrl('') ?>/pathtoincludefile/yourfile.php?str="+str+"&sku="+<?php $_product->getSku() ?>,true);
                  xmlhttp.send();
                  }
</script>

使用GET命令编写/pathtoincludefile/yourfile.php,当str为数字页面时,显示来自页面$ _GET [&#34; str&#34;]的具体图像,并且$ _GET [&#34; sku&#34; ]是被查看的项目。

这个解决方案很优雅,因为图像将作为子脚本加载,它们会点慢页面加载速度。

你也可以在这里放置一个加载图像(旋转loading.gif),你只需要1个新的php文件yourfile.php,你可以逐页列出所有图像。

切换到下一页时(onclick="showImages(<?php echo $_GET["str"]+1 ?>)")从脚本函数再次调用函数将再次开始加载图像,您不需要更改页面的URL。

此外,您应该在yourfile.php中保护GET变量,以避免mysql注入风险。