我有一个包含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后端不会崩溃,一次加载所有图像。
答案 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注入风险。