Bonjour,
Je développe un site web et jai fait une page d'accueil personnel lorsque le membre se connecte. Dans cette page il va avoir les dernier projet de mon portfolio, les dernière article, et etc. En fait il aura un aperçus de tous l'activité de mon site sur une seule page. Le petit problème est que je veux récupérer les donné de mes dernier article dans qui sera envoyer à une vue qui est dans le document elements. L'erreur qui m'affiche cakephp dit : Invalid argument supplied for foreach()

Voici la vue modulepost.ctp qui récupère les derniers article :

<?php $posts = $this->requestAction(array('controller'=>'posts','action'=>'modulepost','admin'=>false,'user'=>false,'webmester'=>false)); ?>
<? foreach($posts as $p): ?>
<div class="item">
    <span>Contenu</span>
</div>
<? endforeach; ?>

voici la function modulepost qui fait une requête sql des mest posts.

function modulepost(){
        $d'posts'] = $this->Post->find('all',array(
            'limit' => 5,
            'conditions' => array('type'=>'post','online'=>1),
            'fields' => array('id','name','comment_count')
        ));
        $this->set($d);
    }

Quand je fait un débug de $d il me retourne les donné d'une façons étrange, car il y a un init suivi d'un chiffe qui est mit avant chaque résultat. Je pense c'est delà mon erreur. Je ne suis pas sûre à 100% :

array(
    'posts' => array(
        (int) 0 => array(
            'Post' => array(
                'id' => '16',
                'name' => 'Grande ouverture',
                'comment_count' => '3'
            )
        ),
        (int) 1 => array(
            'Post' => array(
                'id' => '11',
                'name' => 'Mon premier aticle',
                'comment_count' => '1'
            )
        ),
        (int) 2 => array(
            'Post' => array(
                'id' => '10',
                'name' => 'mon premier article',
                'comment_count' => '0'
            )
        ),
        (int) 3 => array(
            'Post' => array(
                'id' => '5',
                'name' => 'Mon troisième article ',
                'comment_count' => '0'
            )
        )
    )
)

Merci de votre aide en avance.

4 réponses


lakamark
Auteur
Réponse acceptée

J'ai le régler finalement. j'ai ajouter à ma fonction modulepost()
j'ai ajouté à la fin :

return $posts

L'erreur est parti.

Merci de votre aide.

Salut,
Premièrement, et pour l'avoir fais au niveau des paginations, si tu utilise des vues "Elements" dans une vue "action" (la vue correspondant à l'action du controller), tu peux utiliser les variables envoyer à la vue "action" dans les vues elements incluses.

Tu n'as donc pas du tout besoin d'utiliser un requestAction dans ta vue. Place simplement le code de la fonction modulePost dans l'action principale de ton controller et tu pourras ainsi, depuis ta vue "Element", utiliser la variables $posts.

Ensuite, le int mis avant chaque enregistrement est tout à fais normal. Cake te retourne un tableau "Posts" qui contient lui même des sous tableau. Les int indique simplement la "clé" si je puis dire permettant d'accéder à un sous tableau spécifique. Dans une boucle foreach, voici comment sa fonctionne :

foreach ($posts as $p) : 
    echo $p'Post']'name'];
endforeach;

(INT) est le type de données et non une clef.

(INT) veut dire numérique.

Hahahaha oui je sais bien que INT veut dire numérique. J'ai juste dis clé car je voulais expliquer que l'on pouvait accéder à un élément de cette façon (clé == indice) :

$posts[0]'Post']'name'];