3

商品コレクションで商品のURLを取得するのに行き詰まっています。設定された注目の製品の製品コレクションを取得するためのこのコードがあります。

 $_productCollection = Mage::getModel('catalog/product')
                  ->setStoreId(Mage::app()->getStore()->getId())
                  ->getCollection();

 $_productCollection->addAttributeToFilter('feat_enabled', 1);
 $_productCollection->setVisibility(array(2,3,4));
 $_productCollection->addUrlRewrite();
 $_productCollection->groupByAttribute('entity_id');
 $_productCollection->load();

foreach($_productCollection as $_product){  
       $_product->load($_product->getId());
   if($_product->getIsSalable()){
          $_name = ltrim(rtrim($_product->getName()));
          $_url =  $_product->getProductUrl();
       }
}   

ここで私が間違っているのは、各ループで$ _urlがエコーされない場合、返されるURLが不足していることです。カテゴリ名とサブカタログ名はありません。正しいURLは次のとおりです。

index.php / category / subcategory / itemname.html

しかし、現在それは戻るだけです

  index.php/itemname.html

URL以外の正しいデータを返します。アイテムをカテゴリとサブカテゴリに割り当てたかどうかを管理者に再確認しました。割り当てたことを確認しました。

Upon further research, I have found the code below that is very close to what i need.
$_categories = $_product->getCategoryIds();
$_category = Mage::getModel('catalog/category')->load($_categories[0]);
$_url = Mage::getUrl($_category->getUrlPath()).basename($_product->getProductUrl());

ここでの問題は、$_url値が次のようになったことです

index.php / category / subcategory.html / itemname.html

サブカテゴリ名には.htmlが含まれています。URLに.htmlは必要ないので、クリックするとアイテムが正しいページにリダイレクトされます。

これを修正するアイデアはありますか?

4

5 に答える 5

4

これに関する問題は、製品が複数のカテゴリに表示される可能性があることです。

したがって、どの方法でアプローチするかに関係なく、あるレベルで、どこかにカテゴリを含める必要があります。

したがって、これを行う最もクリーンな方法は、addurlRewriteメソッドを使用してカテゴリ ID を渡すことです。getProductUrMagento は、カテゴリ ID と製品 ID に一致する書き換えをチェックします。書き換えが見つかった場合は、 l 呼び出しで探している適切な URL を取得します。例として、カテゴリ ID 10 を使用すると、次のようになります。

$collection = Mage::getResourceModel('catalog/product_collection')
                ->addUrlRewrite(10);

各製品が 1 つのカテゴリにしか表示されないことがわかっている場合は、次のようにして最初のカテゴリ ID を取得することで、これをもう少し柔軟にすることができます。

したがって、このメソッドを使用した完全な例は次のようになります。

$categoryId = array_shift($_product->getCategoryIds());
$collection = Mage::getResourceModel('catalog/product_collection')
                ->addUrlRewrite($categoryId);
于 2012-06-12T15:13:04.097 に答える
1

同じ商品が複数のカテゴリに存在する可能性があるため、これは予想される動作です。

于 2012-06-12T14:32:06.980 に答える
0

すばらしい解決策をありがとう。ただし、ルート カテゴリとそれ以上の深さカテゴリが含まれている場合は機能しません。あなたのソリューションにいくつかのコードを追加しました:

   $cat_count=count($_categories);

   if($cat_count>0){
       if($_categories[0]==2) // here 2 is root category id
       $cat_count=$cat_count-1;
       else
       $cat_count=$cat_count-2;
   }


    $_categories = $_product->getCategoryIds();

    $_category = Mage::getModel('catalog/category')->load($_categories[$cat_count]); 

    $caturl=explode('.html', $_category->getUrlPath());      

    $_url = Mage::getUrl($caturl[0]).basename($_product->getProductUrl()); 
于 2013-07-27T07:23:24.533 に答える
-1

私と同じ問題を抱えている人のために。この方法で問題を修正しました。

 foreach($_productCollection as $_product){ 
        $_categories = $_product->getCategoryIds();
        $_category = Mage::getModel('catalog/category')->load($_categories[0]);          
        $caturl=explode('.html', $_category->getUrlPath());            
        $_url = Mage::getUrl($caturl[0]).basename($_product->getProductUrl()); 
 }  

カテゴリの URL に .html を含める必要があるため、カテゴリの URL パスで .html を展開します。

これがうまく修正されているかどうかはわかりませんが、これは私にとってはうまくいきます。

于 2012-06-12T14:54:54.980 に答える