Bon pas sur que mon titre soit vraiment claire donc je vais essayer de m'expliquer

Je suis en train de coder un forum (me suis dit que ca me ferait un bon exercice ^^ mais j'ai un petit souci que je n'arrive pas a résoudre depuis quelque temps

en fait j'aimerai afficher les différente catégorie comme ca

titre1
catégorie 1
catégorie 3
titre 2
catégorie 2

quand je debug ma variable c'est bien trier comme ca mais le souci c'est que si je fait

<table>
<?php
debug($cat);
foreach($cat as $c):
?>
  <tr>
    <th></th>
    <th><?php echo $c'Forum']'title']; ?></th>
    <th>sujet</th>
    <th>message</th>
    <th>dernier message</th>
  </tr>

  <tr>
    <td><?php echo $html->image('/theme/img/message.png'); ?></td>
    <td><?php echo $html->link($c'Category']'title'],array('controller'=>'categories','action'=>'voir',$c'Category']'id'])); 
              echo '<br />'.$c'Category']'description']?></td>
    <td>test</td>
    <td>test</td>
    <td>test</td>
  </tr>
 <?php 
 endforeach;
 ?>
</table>

Ca me met une undifined index sur les echos des catégorie pour les afficher je doit les noter comme ca

<?php echo '<br />'.$c'Category']'0']'description']?>

Ce qui n'est vraiment pas pratique car si j'ai 50 catégorie je doit remettre 50 fois la ligne en changeant le numéro :s

Je voulais donc savoir comment lui dire de prendre tout seul le numéro du array
comme un grand car ca fait 2 jour que je me casse les dents sur ce probleme et ca bouge pas des masses en plus j'ai l'impression que c'est un truc tout bête que j'ai oublier :s

6 réponses


tottosche
Réponse acceptée

C'est bien ce que je disais:

Tu as des forums et dans chaques forum tu as des catégories.

Tu veux lister le titre pour chaque catégories pour chaque forum.
2 pour chaque (pour chaque = foreach)

Voici la solution:

<table>
<?php foreach($cat as $c): ?>
  <tr>
    <th></th>
    <th><?php echo $c'Forum']'title']; ?></th>
    <th>sujet</th>
    <th>message</th>
    <th>dernier message</th>
  </tr>

  <?php foreach ($c'Category'] as $category): ?>

  <tr>
    <td><?php echo $html->image('/theme/img/message.png'); ?></td>
    <td><?php echo $html->link($category'title'],array('controller'=>'categories','action'=>'voir',$category'id'])); 
              echo '<br />'.$category'description']?></td>
    <th>N/A</th>
    <th>N/A</th>
    <th>N/A</th>
  </tr>
  <?php endforeach; ?>
<?php endforeach;?>
</table>

Petite parenthèse, je n'aurai personnellement pas travaillé comme tu as fait avec des forums et des sous categories au forum, j'aurai plutot travailler avec uniquement des forums et ajouté un champ "parent_id" et ensuite structurer le forum avec cette clef pour avoir une plus grande liberté d'hiérarchie

Personne ne peut m'aider ??

Peux tu nous décrire tes tables lié a ce probleme? et expliquer comment est initialisé la variable $cat ou même mieux afficher le résultat du debug?

Sinon d'après ce que j'ai compris, pourquoi ne pas faire une foreach dans le foreach?

Voila le resultat du debug

Array
(
    [0] => Array
        (
            [Forum] => Array
                (
                    [id] => 5
                    [title] => Titre 2
                )
            [Category] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [title] => Categorie 2
                            [description] => Commentaire
                            [forum_id] => 5
                            [status] => 
                        )
                )
        )
    [1] => Array
        (
            [Forum] => Array
                (
                    [id] => 4
                    [title] => Titre 1
                )
            [Category] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [title] => Categorie 3
                            [description] => Commentaire
                            [forum_id] => 4
                            [status] => 
                        )
                    [1] => Array
                        (
                            [id] => 4
                            [title] => Categorie 1
                            [description] => Commentaire
                            [forum_id] => 4
                            [status] => 
                        )
                )
        )
)

Et pour les table

Le model du forum:

class Forum extends AppModel {
    var $name = 'Forum';

    var $hasMany = array(
        'Category' => array(
            'className' => 'Category',
            'foreignKey' => 'forum_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
}

Et celui de la table categorie

<?php
class Category extends AppModel {
    var $name = 'Category';

    var $belongsTo = array(
        'Forum' => array(
            'className' => 'Forum',
            'foreignKey' => 'forum_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );
    var $hasMany = array(
        'Thread' => array(
            'className' => 'Thread',
            'foreignKey' => 'category_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
}
?>

Par contre pour le foreach dans le foreach je doit avouer que j'ai chercher dans tout les sens sauf celui la :s

Génial merci je me doutait bien que c'était un truc tout bête :p merci a toi

Sinon pour la parenthèse ca me paraissait juste plus claire de travailler comme ca mais bon c'est pas exclu que je change d'ici la fin ^^

avec plaisir

c'est sure que c'est plus simple et plus claire mais bon...

Bonne continuation pour ton forum