我有一个自由职业者代码块,显示特色产品的滑块,其中的选项卡对应于其中的子类别 .
.phtml文件在这里:http://pastebin.com/6jEexZxu
这里's an example of the page loading with only 20 or so SKU'(可能有点慢,这个安装根本没有优化):http://crunchconcepts.com.au/test_store/magento/
类别结构如下:
滑块(id = 3)
-
PS3
-
精选
-
最新添加
-
特价促销
-
Xbox
-
精选
-
最新添加
-
特价促销
...等等 . 这会自动为“Slider”的任何子类别加载一个新滑块,并为每个子子类别添加一个新选项卡 .
这种方法效果很好(虽然当商店只有100个左右的SKU时,点击下一个标签会按需加载产品会更好),但是当我们导入1000个测试SKU时,页面加载仅在访问主页时挂起 . 商店在所有其他页面和功能上运行良好,只有当从主页中删除滑块时,它才会恢复正常速度 .
它目前正在VPS上运行,当尝试重新调整滑块产品时,服务器负载可能会上升到7-8 .
任何人都可以看到为什么会发生这种情况,我能做些什么来解决这个问题?
自由职业者基本上已经停止回复电子邮件,因为他有钱,所以他的建议是不合时宜的!
Update:
好的,所以我想从头开始,我想我到了那里......或者,至少,我学到了很多东西!
<?php
$categoryId = 3; // a category id that you can get from admin
$category = Mage::getModel('catalog/category')->load($categoryId);
$parentCat = Mage::getModel('catalog/category')->load($categoryId);
$childCategories = $parentCat->getChildren(); //Child category IDs separated by commas
$children1 = explode(',', $childCategories);
foreach ($children1 as $subCat1){
echo "
";
$parentCat1 = Mage::getModel('catalog/category')->load($subCat1);
$childCategories1 = $parentCat1->getChildren(); //Child category IDs separated by commas
$mainCatName = $parentCat1->getName();
$children2 = explode(',', $childCategories1);
echo "
".$mainCatName;
foreach($children2 as $tabs){
$tab = Mage::getModel('catalog/category')->load($tabs);
echo "
".$tab->getName()."
";
$_category = Mage::getModel('catalog/category')->load($tabs);
$_productCollection = Mage::getResourceModel('catalog/product_collection')
->addStoreFilter()
->addCategoryFilter($_category)
->addAttributeToSelect(array('name','url','small_image'));
if(!empty($_productCollection))
{
foreach ($_productCollection as $_product):
echo $_product->getName(); //get product name
endforeach;
}else{
echo "nothing!";}
}
}
?>
我有这个,它显示了类别名称和ID,但每当我尝试加载产品时,它会加载商店中的每个产品!我尝试了其他几种方法,但它从随机类别中加载了错误的产品 . 救命!
2 回答
它很慢,因为您使用大量结果集运行多个查询,然后重复加载整个模型 .
这样的事情会稍微合适一些 .
然后,您可以遍历该产品集合 .
BUT it should really be bundled into its own extension 并给出了特定作业的块和模型 - 您可以以编程方式将变量传递给它,使代码模块化并可重复使用 .
那么这意味着你只需要1个模板文件就可以在你需要的地方做一些简单的事情
这种方法需要改变 . 像这样的代码不应该在phtml模板文件中 . 这需要重写为适当的Magento模块,Block类执行所有集合检索和过滤以获得您想要的内容 . 而phtml只显示您的产品滑块显示 . 此外,还可以添加适当的块缓存,以便在启用缓存时在有限时间内加载页面 .
几乎不需要在标准Magento实体(如产品)上执行原始SQL . Magento在资源模型中提供了一系列收集过滤器,可用于在给定一组条件的情况下检索产品及其信息 . 此外,需要特别注意测试此类代码,同时启用平面目录类别和产品,以确保您可以使用此模式,因为它可以提高大量SKU的Magento存储性能 .