Bonjour à tous,

Je m'excuse d'avance de vous déranger pour si peu...

Je suis en train de développer mon blog. Tout marche bien.
J'aimerais juste, sur la page où s'affiche mes articles, afficher la catégories.

J'ai donc fais comme cela :

<?php $this->set('title_for_layout',isset($title)?$title:'News'); ?>
<?php foreach ($posts as $k => $v): $v = current($v); ?>
    <article class="format-standard">
        <div class="box cf">
            <div class="entry-date"><div class="number"><?php echo $v'jour']; ?></div><div class="month"><?php echo $v'mois']; ?></div></div>
            <div class="excerpt">
                <a href="<?php echo $this->Html->url($v'link']); ?>" class="post-heading"><?php echo $v'name']; ?></a>
                <p><?php echo $this->Text->truncate($v'content'],400,array('exact'=>false,'html'=>true)); ?></p>
                <p><a href="<?php echo $this->Html->url($v'link']); ?>" class="learnmore">Lire la suite</a></p>
            </div>
            <div class="meta">
                <span class="format">Article</span>
                <span class="user"><a href="#">DexX</a></span>
                <?php echo $v'Category']'name']; ?>
            </div>  
        </div>
    </article>
<?php endforeach ?>

Mais j'ai cette erreur qui s'affiche :

Notice (8): Undefined index: Category [APP/View/Posts/index.ctp, line 14]

Ligne 14 : "<?php echo $v'Category']'name']; ?>"

Merci à vous de vos éclaircissements.

9 réponses


DexX
Auteur
Réponse acceptée

Le problème est résolu. Merci :).

fait un debug de la variable $v et vérifie qu'elle contient bien l'array 'Category' dont un des élément est 'name'.

insère cette ligne dans ta boucle foreach

<?php debug($v); ?>
DexX
Auteur

D'accord, voilà ce qui est ressortie :

app/View/Posts/index.ctp (line 18)
Array
(
    [id] => 3
    [name] => Troisème article
    [slug] => troisieme-article
    [content] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam blandit ligula sed enim mollis at tempus nunc tincidunt. Nam aliquam orci id dolor porta a tempor felis sagittis. Etiam ac feugiat eros. Aenean porta lectus id nisl ultricies id condimentum arcu pretium. Cras porttitor, mi eu tristique aliquet, tellus enim tempor magna, at scelerisque justo risus et mauris. Phasellus accumsan eros sed dolor accumsan non bibendum velit elementum. In eget dui felis. Duis fringilla, nisl auctor scelerisque bibendum, purus est euismod lorem, tincidunt tincidunt turpis ante pulvinar tellus. Etiam ac mollis neque. Nullam pellentesque consequat libero, ut iaculis ante vehicula eu. Mauris at nisl eu sapien feugiat porttitor. Aliquam quis justo quis ligula blandit consectetur quis in nisl.
    [type] => post
    [created] => 2012-08-07 15:00:00
    [mois] => AOÃ?T
    [jour] => 7
    [online] => 1
    [category_id] => 1
    [link] => Array
        (
            [controller] => posts
            [action] => show
            [id] => 3
            [slug] => troisieme-article
        )
)

voila,
tu demandes à afficher la valeur de $v'Category']'name'] mais celle-ci n'existe pas, c'est donc normal qu'il te renvoie une erreur.

Il faudrait que tu ai un résultat de ce genre :

Array
(
    [id] => 3
    ...
    [Category] => Array
            (
                [name] => le nom de la categorie
             )
     ...
)

Pour cela, il faut que dans ton controller, tu recherches dans ta base de données les données souhaitées (les info de ta catégorie) et que tu fasses passer ces informations dans la vue.

PS: tu utilises bien l'encodage UTF-8 pour ta base de données ? apparemment il y a des problème d'encodage dans le contenu de tes variables, par exemple $v'mois'].

Enleve $v = current($v) apres ton if() ca fonctionnera pour $v'Category']'name'] pour tous les $v'content'],$v'link'] ou $v'jour'] par exemple il faudra rajouter $v'Post']'content'] ...

DexX
Auteur

D'accord. Je vais regarder cela et je vous tiens au courant. Je débute dans CakePHP alors ce n'est pas tout clair pour moi. Merci de vos explications :).

Amicalement,
DexX

DexX
Auteur

Bonjour,

Désolé du double message.
Donc, j'ai fais la modification comme la souligné Aiftea.

<?php $this->set('title_for_layout',isset($title)?$title:'News'); ?>
<?php foreach ($posts as $v){ ?>
    <article class="format-standard">
        <div class="box cf">
            <div class="entry-date"><div class="number"><?php echo $v'Post']'jour']; ?></div><div class="month"><?php echo $v'Post']'mois']; ?></div></div>
            <div class="excerpt">
                <a href="<?php echo $this->Html->url($v'Post']'link']); ?>" class="post-heading"><?php echo $v'Post']'name']; ?></a>
                <p><?php echo $this->Text->truncate($v'Post']'content'],400,array('exact'=>false,'html'=>true)); ?></p>
                <p><a href="<?php echo $this->Html->url($v'Post']'link']); ?>" class="learnmore">Lire la suite</a></p>
            </div>
            <div class="meta">
                <span class="format">Article</span>
                <span class="user"><a href="#">DexX</a></span>
                <?php echo $v'Category']'name']; ?>
            </div>  
        </div>
    </article>
    <?php debug($v); ?>
<?php } ?>
<?php echo $this->Paginator->numbers(); ?>

Résultat du debug :

app/View/Posts/index.ctp (line 18)
Array
(
    [Post] => Array
        (
            [id] => 2
            [name] => Deuxième article
            [slug] => deuxieme-article
            [content] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam blandit ligula sed enim mollis at tempus nunc tincidunt. Nam aliquam orci id dolor porta a tempor felis sagittis. Etiam ac feugiat eros. Aenean porta lectus id nisl ultricies id condimentum arcu pretium. Cras porttitor, mi eu tristique aliquet, tellus enim tempor magna, at scelerisque justo risus et mauris. Phasellus accumsan eros sed dolor accumsan non bibendum velit elementum. In eget dui felis. Duis fringilla, nisl auctor scelerisque 
            [type] => post
            [created] => 2012-08-07 15:00:00
            [mois] => AOÛT
            [jour] => 7
            [online] => 1
            [category_id] => 1
            [link] => Array
                (
                    [controller] => posts
                    [action] => show
                    [id] => 2
                    [slug] => deuxieme-article
                )
        )
)

Voici le code de mon Controller : http://pastebin.com/4LXPt2ZC

En espérant obtenir de l'aide, merci à vous.

Amicalement,
DexX

Que devrais contenir la variable $v'Category'] ?
Des informations stockées sur une autre table que la table Post ?

Si oui pense à faire le lien dans ton Model Post.php .

Oui as tu dans ton model Post quelque chose du genre ?

$belongsTo = array('Category');