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

时间:2015-03-12 11:51:33

标签: php magento url-rewriting

我尝试使用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重写为空 - 没有数据。可能是这个原因。

任何人都能说出原因吗?

1 个答案:

答案 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>";
}