我尝试使用getmodel()
获取产品数据。我的代码是,
//$product_ids = $this->getproducts();
$product_ids = array(0=>1, 1=>2, 2=>3);
echo'<pre>';
$model = Mage::getModel('catalog/product');
foreach($product_ids as $id) {
$data = $model->load($id);
echo $id;
echo '<br>';
echo $data->getProductUrl();
echo '<br>';
echo $data->getName();
echo '<br>';
}
我可以获取每个产品名称和网址的数据。名称已正确显示,但网址我获得了循环中每个产品的第一个产品的相同网址。但循环很好。
我尝试使用getUrlPath()
它也获得相同的网址
如果我直接传递id(不在循环中),那么我可以获得正确的url。像
$model = Mage::getModel('catalog/product')->load(2);
echo $model->getProductUrl();
是否有任何缓存问题..? (但禁用缓存)。这些事让我很生气。
如果在代码下方使用,那么我可以获得正确的url(循环),
foreach($product_ids_ids as $id) {
$_item = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('product_url')
->addAttributeToSelect('name')
->addAttributeToFilter('entity_id', $id)
->load();
foreach($_item as $product){
echo $product->getProductUrl();
echo $product->getName();
}
}
这没有任何意义。我尝试了reindex,检查了平面目录 - &gt;它未启用。但我无法找出原因。我检查了管理员 - &gt;目录 - &gt; Url重写为空 - 没有数据。可能是这个原因。
任何人都能说出原因吗?
答案 0 :(得分:1)
您好Elavarasan
Its because you are using something horrible like below as loop goes on:
Mage::getModel('catalog/product')->load(1)->load(2)->load(3);
这是我粗略写的,但它应该有效。试试吧。
$product_ids = array(
0=>1,
1=>2,
2=>3,
3=>4,
4=>5
);
//Why to load product object each time? Instead get collection, only one database call.
$productCollection = Mage::getModel("catalo/product")->getCollection();
$productCollection->addAttributeToFilter('entity_id',array('in'=>$product_ids));
foreach($productCollection as $_product) {
echo "<pre>";
echo "<br/>Id : ".$_product->getId();
echo "<br/>Name : ".$_product->getProductUrl();
echo "<br/>Url : ".$_product->getName();
echo "</pre>";
}