我的产品页面中有自定义功能,其中很多产品都显示在表格中。现在我有一个带有产品SKU的数组,并使用foreach函数循环它们以使用下面的代码获取详细信息
$url = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getProductUrl();//get product page url of ech product
$productName = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getName();//get product name
$productPrice = Mage::getModel('catalog/product')->loadByAttribute('sku', $productSku)->getFinalPrice();//get product price
$qtyStock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId())->getQty();
问题是,我的页面加载时间是25秒。有没有办法在一个电话或一组电话中获取我在我的阵列中的所有产品详细信息,因为我需要减少调用次数以改善我的页面加载时间。
答案 0 :(得分:2)
有一种更加简单,更不用说更有效的加载多种产品的方式。您可以按集合加载:
<?php
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*') // You can filter by attributes if required.
->addAttributeToFilter('type_id', 'simple') // You can change to configurable or bundle or grouped, etc.
->addFieldToFilter('attribute_set_id', 11); // If you want to get products that are a certain attribute set.
?>
然后,您可以使用foreach
循环浏览每个产品并以这种方式获取数据:
<?php
foreach($products as $product) {
echo "Name: " . $product->getName();
echo "Price: " . $product->getPrice();
// etc, etc
?>
此处有关集合的更多信息:http://devdocs.magento.com/guides/m1x/magefordev/mage-for-dev-8.html(向下滚动到模型集合)。
编辑 - 要按SKU过滤,您可以获得您想要的确切SKU:
->addAttributeToFilter('sku', array('in' => array('customsku-101', 'customsku-101', 'customsku-102')))
或者您可以获得以某个字符串开头的SKU:
->addAttributeToFilter('sku', array('like' => 'customsku-%'));
或以某个字符串结尾(%
是通配符):
->addAttributeToFilter('sku', array('like' => '%-customsku'));