現在のカテゴリオブジェクトから最上位の親カテゴリを取得する方法は?


14

現在のカテゴリオブジェクトからトップレベルの親カテゴリ(デフォルトカテゴリの直後)を取得するにはどうすればよいですか?その親カテゴリのカテゴリ名とカテゴリURLをサブカテゴリに表示する必要があります。

  • デフォルトのカテゴリ
    • 猫A
      • 猫B
        • 猫C

Cat Aの名前とURL Cat BおよびCat Cオブジェクトを取得するにはどうすればよいですか?

回答:


22

$category->getPath()ツリーのルートから現在のカテゴリまでのすべてのカテゴリのIDをスラッシュ(/)で区切って返します。次に例を示します1/2/56/124/543。最初のものは「ルートのルート」です。2つ目はカタログルート(デフォルトカテゴリ)です。残りは単純なカテゴリです。だから、あなたはこのようなことをすることができます。

$path = $category->getPath();
$ids = explode('/', $path);
if (isset($ids[2])){
    $topParent = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($ids[2]);
}
else{
    $topParent = null;//it means you are in one catalog root.
}

これで、次のような名前とURLを取得できます。

if ($topParent){
    $name = $topParent->getName();
    $url = $topParent->getUrl();
}

ありがとうマリウス!タイプミスがありましたが、getId()修正しました。完璧に機能しています。
MagExt

涼しい。タイプミスについてごめんなさい。修正してくれてありがとう。
マリウス

こんにちは。カテゴリツリーの公式magentoドキュメントを参照してください。
MengT

@Mariusカテゴリのパスを取得すると、すべてのカテゴリに1/2 / <各カテゴリID>と表示されます。デフォルトのカテゴリIDは2です。その後、この1は何ですか。
バタフライ

1
@invissibleあなたは正しい。
マリウス

15

これを試して

$level = $this->getCurrentCategory()->getParentCategory()->getLevel();
if($level > 1){                 
    echo $this->getCurrentCategory()->getParentCategory()->getName();
    }
    else{
    echo $this->escapeHtml($_category->getName());
    }

このコードをコピーして貼り付けてください:)


こんにちは。あなたの答えをありがとう、しかしあなたは5ヶ月遅れています:)
MagExt

9
Magentoスタックへようこそ。まだカバーされていない良い答えがあれば、古い質問に答えるのは正しいことです。回答はコミュニティの利益のためであり、OPのためだけではありません。がんばり続ける!:)
マクナブ

レベル3以上の場合、最初の親が返されますが、質問は一番上の親であるため、この答えは間違っています。
-gnysek

これは完全なソリューションではありませんが、目的のレベルに達するまでループする可能性があります。正しい方向に私を押した。
ドミノ

4

現在のカテゴリでgetParentCategories()を使用してから、array_popを呼び出して最後の要素を取得できます。2回実行して、最後から2番目の要素を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.