2

現在の製品の親カテゴリを取得するカスタム モデル/ブロックがあります。

class Namespace_Module_Model_Product extends Mage_Catalog_Model_Product
{
    public function someFunction()
    {
        $category = $this->getCategory();
        ...
    }
}

このカスタム ブロックは、製品のページで使用されます。これは、製品がその親カテゴリ (例: ) を介してアクセスされる場合に完全に機能しますdomain.com/some-category/my-product.html。ただし、製品に直接アクセスした場合 (検索など)、URL が のようdomain.com/my-product.htmlになっている場合は機能しません。カテゴリを取得するために使用できるすべての関数はMage_Catalog_Model_Product、製品がどのカテゴリにも割り当てられていないかのように、空の値を返します。

私の質問は、その製品がそのカテゴリを介してアクセスされていない場合でも、製品のカテゴリを取得するグローバルな方法は何ですか?

4

1 に答える 1

7

First step: Adjust your expectation slightly — a product in Magento isn't limited to a single category. Therefore, "a global way to retrieve a product's category" should be "a global way to retrieve a list of any categories the product is in".

You'll need to to

  1. Get a reference to a product object

  2. Use that product object to get a category collection

  3. Run through the collection and pull out the category information you want

If you're on the product page, you can grab the current product from the registry.

$product = Mage::registry('product');

and then grab a category collection with

$c       = $product->getCategoryCollection()
->addAttributeToSelect('*');

The addAttributeToSelect method ensures you get all the fields you need.

Finally, you can get the individual categories themselves with

foreach($c as $category)
{
    var_dump($category->getData());
    var_dump($category->getName());
}

You could also grab the first category with

$category = $c->getFirstItem();
var_dump($category->getData());
var_dump($category->getName());
于 2013-03-31T23:01:43.720 に答える