Bonjour a tous,

me voici sur un problème de de findCount(),
je voudrais récupéré le nombre de posts par category,

donc dans CategoryController j'ai rajouter une fontion private getCategory()

// Pour l'affichage le nombres de post par category
    private function getCategory($id) {
        $this->loadModel('Post');
        $condition = array('category_id' => $id); 
        $d'totalcategory'] = $this->Post->findCount($condition);
        return $d;
    }

et toujours dans CategoryController dans ma parti index

function index() {
        $this->loadModel('Category');
        $cats = $this->Category->find(array(
            'order' => 'name ASC',
        ));
                ------> ICI J'AI RAJOUTER
        }

j'ai rajouter

$this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post'); 
        $d'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.id,Post.name,Post.slug,Post.created,Category.name as catname,Post.content,Category.slug as catslug',
            'order' => 'id DESC',
            'join' => array('categories as Category' => 'Category.id=Post.category_id')
        ));
        foreach($d'posts'] as $k => $v) {
            $d'posts']$k] = $v;
            $d'posts']$k]->categories = $this->getCategory($v->id);
        }
        $this->set($d);

et j'obtient comme resultat en faisant un debug($d)

Array
(
    [posts] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 36
                    [name] => pas de commentaire
                    [slug] => nocomment
                    [created] => 2013-06-16
                    [catname] => Jeux vidéos
                    [content] => 
If you use images as CSS backgrounds, you may use the CSS3 background-size property to downsample the ..... You can't go out to the Internet with IP addresses like this. ..... Note that our User object type-hints UserInterface in its constructor. ...... phpartisan controller:make PostsController Controller created successfully!

                    [catslug] => jeux-videos
                    [categories] => Array
                        (
                            [totalcategory] => 0
                        )
                )
            [1] => stdClass Object
                (
                    [id] => 35
                    [name] => dernier article
                    [slug] => ernier-article
                    [created] => 2013-06-16
                    [catname] => Sport
                    [content] => 
La plupart des sites web fonctionnent, côté serveur, grâce à Apache. Une chose domage avec celui-ci c'est son interface de navigation à travers les dossiers, qui est assez moche et simpliste. Cela conviendra à certains, mais d'autres préfèrent avoir quelque chose de plus dynamique, joli et sympa à utiliser. C'est là que h5ai intervient

                    [catslug] => sport
                    [categories] => Array
                        (
                            [totalcategory] => 0
                        )
                )
            [2] => stdClass Object
                (
                    [id] => 34
                    [name] => coucou
                    [slug] => voila
                    [created] => 2013-06-09
                    [catname] => Jeux vidéos
                    [content] => 
hkjhkjhkjhjk

                    [catslug] => jeux-videos
                    [categories] => Array
                        (
                            [totalcategory] => 0
                        )
                )
            [3] => stdClass Object
                (
                    [id] => 33
                    [name] => voila un nouveau teste
                    [slug] => nouveau-teste
                    [created] => 2013-06-05
                    [catname] => Music
                    [content] => 
RiTE, when added to the Winner software, redirects the realtime text stream to a user-selected program. For example, a user may redirect a text stream to a chat box. This facilitates instant response to questions posed to a celebrity in the chat room. A more prevalent use of rapid text entry is in the medical transcription market where it is very important to update the medical records quickly and efficiently.

                    [catslug] => music
                    [categories] => Array
                        (
                            [totalcategory] => 0
                        )
                )
        )
)

mais je dois me tromper quelque part car j'obtient tjrs [totalcategory] => 0

est ce que quelqu'un aurais une idée ?
ou une autre méthode a proposé?

merci d'avance, en espérant avoir été assez clair,
a bientot

5 réponses


nocraft0
Auteur
Réponse acceptée

hello a tous , je m'y suis pris un peu autrement, grace les conseil d'un amis 'ascito'

function index() {
        $this->loadModel('Category');
        $y'cats'] = $this->Category->find(array(
            'order' => 'name ASC',
        ));
        // recupere getCategory
        $this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post'); 
        $y'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.category_id,Post.created as date',
        ));

        $y'jointCatIdPostId'] = array();    
        foreach($y'posts'] as $k => $v) {
            $y'posts']$k]->categories = $this->getCategory($v->category_id);
            $y'jointCatIdPostId']$v->category_id] = new stdClass;
            $y'jointCatIdPostId']$v->category_id]->total=$y'posts']$k]->categories'totalcategory'];
        }
        debug($y);
        return $y ;
    }

et j'appel de cette maniere

<?php $categories = $this->request('Categories','index'); ?>
        <?php foreach ($categories'cats'] as $k => $v): ?>
                    <a href="<?php echo Router::url('posts/category/slug:'.$v->slug); ?>"><?php echo $v->name; ?><em><?php echo $categories'jointCatIdPostId']$v->id]->total; ?></em></a>
        <?php endforeach ?>

merci encore a toi aussi exothermique
a bientot

Bonjour,
Dans ta fonction getCategory, il te faut comme paramètre l'id de la catégorie. Alors que tu lui donnes l'id du Post.

nocraft0
Auteur

Rehello exothermique,
merci de bien vouloir me donner un coup de pouce, mais ou j'ai encore trop du mal apres mon reveille ou...

mais pourrais tu me donner un peu plus de precision pour dans la fonction getCategory ?

"il te faut comme paramètre l'id de la catégorie. Alors que tu lui donnes l'id du Post."

car j'avoue que je vois pas trop quoi changer

private function getCategory($id) {
    $this->loadModel('Post');
    $condition = array('category_id' => $id); 
    $d'totalcategory'] = $this->Post->findCount($condition);
    return $d;
}

encore merci pour le soutient, a plus

Ici

foreach($d'posts'] as $k => $v) {
    $d'posts']$k] = $v;
    $d'posts']$k]->categories = $this->getCategory($v->CATEGORY_ID);
}
nocraft0
Auteur

coucou exothermique,
effectivement je récupère bien mon 'totalcategory' ,j'ai placé un debug dans sidebar.php

<?php echo debug($categories); ?>

voila se que j'obtiens

Array
(
    [cats] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 2
                    [name] => Jeux vidéos
                    [slug] => jeux-videos
                    [info] => quelq jeux video a ne pas manquer pour bien faire fodrai que je mette autre chose que jeux video.
                    [image] => img/categories/2.jpg
                )
            [1] => stdClass Object
                (
                    [id] => 1
                    [name] => Music
                    [slug] => music
                    [info] => tous mes creations musical, composition a la guitare personnel et avec des amis.
                    [image] => img/categories/1.jpg
                )
            [2] => stdClass Object
                (
                    [id] => 3
                    [name] => Sport
                    [slug] => sport
                    [info] => de merme j'aurais du changer le titre en 2d ou 3d pour etre plus en raport avec mon univaire.
                    [image] => img/categories/3.jpg
                )
        )
    [posts] => Array
        (
            [0] => stdClass Object
                (
                    [category_id] => 1
                    [categories] => Array
                        (
                            [totalcategory] => 1
                        )
                )
            [1] => stdClass Object
                (
                    [category_id] => 2
                    [categories] => Array
                        (
                            [totalcategory] => 3
                        )
                )
            [2] => stdClass Object
                (
                    [category_id] => 3
                    [categories] => Array
                        (
                            [totalcategory] => 1
                        )
                )
            [3] => stdClass Object
                (
                    [category_id] => 2
                    [categories] => Array
                        (
                            [totalcategory] => 3
                        )
                )
            [4] => stdClass Object
                (
                    [category_id] => 2
                    [categories] => Array
                        (
                            [totalcategory] => 3
                        )
                )
        )
)

par contre j'ai un souci car je n'arrive pas a recupere mes variables dans mon sidebar.php :(
je fais un foreach de categories ...

<?php $categories = $this->request('Categories','index'); ?>
        <?php echo debug($categories); ?> //le debug en question..  
        <?php foreach ($categories as $k => $v): ?>
                    <a href="<?php echo Router::url('posts/category/slug:'.$v->slug); ?>"><?php echo $v->name; ?><em><?php echo "44" ?></em></a>
        <?php endforeach ?>

mais j'obiens denouveau cette histoire d'error ,... je block ou mon cerveau surchauffe ,...

( ! ) Notice: Trying to get property of non-object in C:\wamp\www\tuto\view\posts\sidebar.php on line 11 Call Stack #TimeMemoryFunctionLocation

encore merci, et merci encore pour le soutiens
(mon update CategoriesController.php)

/**
    * Permet de récup la liste des catégories et le nombre de post pour le blog
    **/
    function index() {
        $this->loadModel('Category');
        $d'cats'] = $this->Category->find(array(
            'order' => 'name ASC',
        ));
        $this->loadModel('Post');
        $condition = array('online' => 1,'type'=>'post'); 
        $d'posts'] = $this->Post->find(array(
            'conditions' => $condition,
            'fields' => 'Post.category_id',
        ));
        foreach($d'posts'] as $k => $v) {
            $d'posts']$k] = $v;
            $d'posts']$k]->categories = $this->getCategory($v->category_id);
        }
        //$this->set($d);
        //debug($this);
        return $d;
    }

    // Pour l'affichage le nombres de post par category
    private function getCategory($id) {
        $this->loadModel('Post');
        $condition = array('category_id' => $id); 
        $d'totalcategory'] = $this->Post->findCount($condition);
        return $d;
    }