我正在尝试使用 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>';
}
我可以获取每个产品名称和网址的数据。名称显示正确,但 url 我得到的 url 与循环中每个产品的第一个产品的 url 相同。但是循环很好。
我尝试了getUrlPath()
它也得到了相同的网址
如果我直接传递 id(不在循环中),那么我可以得到正确的 url。喜欢
$model = Mage::getModel('catalog/product')->load(2);
echo $model->getProductUrl();
这是任何缓存问题..?(但缓存已禁用)。这些事情让我生气。
如果在下面的代码中使用,那么我可以得到正确的网址(循环),
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();
}
}
这没有任何意义。我尝试重新索引,检查平面目录 ->它没有启用。但我找不到原因是什么。我检查了管理员 ->目录 -> Url 重写为空 - 没有数据。也许这就是原因。
请问谁能说出原因?
嗨,
埃拉瓦拉桑
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>";
}