Bonjour à tous,
j'ai suivi le tutoriel sur la conception d'un système de catégorie en utilisant la représentation intervallaire ou plutôt Tree dans Cakephp.
J'arrive très bien à afficher la liste des catégorie et sous catégorie mais je voudrais avoir le nombre d'annonce à coté de mes catégorie.
Ce que j'ai présentement:
Véhicules
---VTT
---Véhicule récréatif
---Utilitaires Sport
---Tracteurs & Équip. de ferme
---Scooter
---Pneus
---Pièces d'autos
---Motoneige
---Moto
---Mini-fourgonette
---Camions
---Bateaux
---Autos usagées
---Autos neufs
---Autos importées
---Autos de collection
---Aériens
---*Autres véhicules
Ce que je voudrais:
Véhicules (28)
---VTT (6)
---Véhicule récréatif (0)
---Utilitaires Sport (12)
---Tracteurs & Équip. de ferme (0)
---Scooter (0)
---Pneus (0)
---Pièces d'autos (3)
---Motoneige (0)
---Moto (0)
---Mini-fourgonette (0)
---Camions (0)
---Bateaux (0)
---Autos usagées (7)
---Autos neufs (0)
---Autos importées (0)
---Autos de collection (0)
---Aériens (0)
---*Autres véhicules (0)
j'ai 136 catégories donc je cherche sans doute le plus optimisé possible.
Quelqu'un aurait t'il une piste à me donner svp
tu a un pensé à faire un childcount?
http://book.cakephp.org/2.0/en/search.html?q=childCount&check\_keywords=yes&area=default
childcount va seulement compter le nombre d’enfant de la catégorie passé en paramètre donc enfaite les "sous-catégories"
moi je veut compter combien d'annonce pour chaque catégories et sous-catégories.
Ps: Je liste différemment maintenant pour avoir accès à d'autres champs.
function sidebar(){
//$tree = $this->Category->generateTreeList(1);
$tree = $this->Category->find('all', array(
'order' => 'Category.lft ASC',
));
return $tree;
}
vu que tu a des relations hasmany et belongsto, suffit de permettre le find de descendre de 2 niveaux pour trouver tout les enfants ?
Ces pas bête mais mes catégories "mère" contienne pas les articles des "sous-catégories" donc pour l'instant j'ai le nombre d'annonce pour seulement les sous-catégories.
[118] => Array
(
[Category] => Array
(
[id] => 118
[name] => Véhicules
[slug] => vehicules
[lft] => 237
[rght] => 274
[parent_id] => 0
[link] => Array
(
[controller] => annonces
[action] => category
[slug] => vehicules
)
)
[Annonce] => Array
(
)
)
.....
[121] => Array
(
[Category] => Array
(
[id] => 121
[name] => Utilitaires Sport
[slug] => utilitaires-sport
[lft] => 242
[rght] => 243
[parent_id] => 118
[link] => Array
(
[controller] => annonces
[action] => category
[slug] => utilitaires-sport
)
)
[Annonce] => Array
(
[0] => Array
(
[id] => 2
[name] => Jeep Liberty sport 2002
[slug] => jeep-liberty-sport-2002
[description] => Jeep Liberty Special Edition Limited 2002 tralalalalaa
[prix] => 6000
[year] => 0
[created] => 2012-05-22 00:04:03
[modified] => 0000-00-00 00:00:00
[category_id] => 121
[user_id] => 1
[quantity] => 1
[condition] => 4
[facture] => 0
[garantie] => 0
[transport] => 0
[lieu] => Saint-Jerome, Qc, Canada
[discussion] => 1
[video] => none
[detail_key] => 2
[view] => 0
[link] => Array
(
[controller] => annonces
[action] => show
[id] => 2
[slug] => jeep-liberty-sport-2002
)
)
)
)
Aurais tu une petite idée ?
( je commence avec Cakephp donc je suis un peu perdus ^^ )
Salut, alors moi pour arriver à ce résultat j'ai fait ainsi :
Avant tout, une petite précision, pour l'instant je n'ai que 5 catégories donc je ne sais pas si pour l'optimisation c'est le top, mais cela fonctionne.
Pour commencer dans ma table catégorie, j'ai ajouté un champ post_count en int(11).
Ensuite dans mon model Post.php, j'ai ajouté :
public $belongsTo = array(
'Category' => array(
'counterCache' => array('post_count' => array('Post.online'=>1))
)
);
Il ne te reste plus qu'à appeler ta variable post_count dans ta vue :
<?php foreach($categories as $k => $v): $v = current($v); ?>
<li>
<?php echo $this->Html->link($v'post_count'],$v'link']); ?>
</li>
<?php endforeach; ?>
J'ai utilisé ce système pour avoir le nombre de commentaire par article et le nombre d'article par catégorie.
J'espère n'avoir rien oublié.
A plus
Merci :)
cela va bien fonctionner mais comme mes annonces sont lié a mes catégorie je peut faire un count($data'Annonces']) et ça me donne le même résultats que ta manière de procéder.
L’inconvénient ces que mes catégorie mère ne contiens pas directement d'annonce, ce que je veut ces le total d'annonce dans les catégorie fille de la catégorie mère.
<u><strong>Exemple:</strong></u>
Véhicules (28)
---VTT (6)
---Véhicule récréatif (0)
---Utilitaires Sport (12)
---Tracteurs & Équip. de ferme (0)
---Scooter (0)
---Pneus (0)
---Pièces d'autos (3)
---Motoneige (0)
---Moto (0)
---Mini-fourgonette (0)
---Camions (0)
---Bateaux (0)
---Autos usagées (7)
---Autos neufs (0)
---Autos importées (0)
---Autos de collection (0)
---Aériens (0)
---*Autres véhicules (0)
ah oui en effet ce n'est pas la même chose, ta catégorie mère et ta catégorie fille sont la même table ou ce sont deux tables séparées dans ta BDD ?
Je pense que c'est au dessus de mes capacités alors, vu que je ne connais pas la représentation intervallaire. D'ailleurs je suis preneur si quelqu'un veut m'expliquer, ça pourrait me servir un jour.
Je te posais cette question car si c'était deux tables différentes, tu aurais pu faire la méthode que je t'avais donné.
Je te souhaites bon courage pour trouver ta solution.
Bye
Salut je suis tombé sur ce post
J'ai peut être une idée tu récupère les valeurs droite et gauche de tes catégorie mère grâce a elle tu find tes catégories mère et ajoutes les counts des catégorie fille correspondante je suis pas certain que c'étais ta question .