0

CakePHP 2.2

ツリー動作を使用して、カテゴリのネストされた垂直メニューを作成しました。これらのカテゴリには製品があります。私が達成したいのは、指定されたカテゴリの製品数を含むカテゴリ名の横にあります。次に例を示します。

Automobile (100) > SUV (35)
                 > Pickup (25)
                 > Berline (40)

カテゴリの横に、そのカテゴリ内の製品数が表示されます。

私はオンラインでチェックして、このチュートリアルを見つけました: http://mrphp.com.au/blog/fun-tree-behaviour-cakephp 「データの検索」の最後の部分に、それを達成する方法を示す行があります:

 // count the posts in the given category and all subchildren recursively
        $id = 123;
        $postCount = $this->Category->postCount($id); 
        debug($postCount); 

このコードの問題は、postCount() を使用していることですが、私の場合、私のカテゴリには投稿はありませんが製品があります。つまり、製品モデルと ProductsController を使用しているため、機能しません。私はそれを達成できますか?

[編集]

解決策を見つけました。最初に、カテゴリ テーブルに新しいフィールドを作成し、product_count (関連付けられたテーブルの単数名) という名前を付けました。次に、ProductsController.php に属しを追加しました。次のように:

public $belongsTo = array(
        'Category' => array(
            'counterCache' => true
            )
        );

最後に、垂直メニューの foreach で、カテゴリ名の横にこれを追加しました:

$v['Category']['product_count']

今、それは働いています!

4

1 に答える 1

0

postCount 関数を次のように置き換えます。

function productCount($id, $direct=false){
    if (!$direct) {
        $ids = array($id);
        $children = $this->children($id);
        foreach ($children as $child) {
            $ids[] = $child['Category']['id'];
        }
        $id = $ids;
    }
    $this->Product->recursive = -1;
    return $this->Product->findCount(array('category_id'=>$id));
}
于 2013-03-07T10:51:20.163 に答える