カテゴリーエンティティにはいくつか開発の上で便利なメソッドが用意されています。
例えば、getParent()は自分の直接の親カテゴリーを取得することができますし、getDescendants()は自分の子供カテゴリーを全て取得することができます。

それでは、あるカテゴリーの最も上位のカテゴリー(ルートカテゴリ)を取得するにはどうすれば良いでしょうか?

答えは、getParent()メソッドでひたすら遡る!です。
このメソッドをEccube\Entity\Categoryに用意しておくと、twigで{% set RootCategory = Category.RootCategory %}のような形で
ルートを取得することができ、非常に便利です。

自分が最も上位のカテゴリーの場合には、自分をそのままreturnします。
src/Resource/Eccube/Entity/Category.phpにメソッド追加

    /**
     * あるカテゴリーの一番上位のカテゴリーを取得するメソッド
     * @see https://umebius.com/eccube/get_root_category_from_one_category/
     * @return Category|null
     */
    public function getRootCategory()
    {
        $Category = $this;

        $max = 10;
        while ($max--) {
            if (!$Category->getParent()) {
                return $Category;
            }
            $Category = $Category->getParent();
        }

        return null;
    }

EC-CUBEを運営・開発されている方はぜひお試しください!

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ