Magento getProductUrl函数为所有产品获取相同的URL


Magento getProductUrl function getting same url for all products

我正在尝试使用 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>";
}