J'ai un soucis pour récupérer tout les media associer a un article.
J'ai aucun soucis pour récupérer l'image a la une avec 'thumb' mes des que je veu faire comme expliquer dans le tutoriel qu'a la place de 'thumb' il faut mettre 'media'

<?= $this->Media->image($posts'Post']'media'], 200, 200,array('alt' => $posts'Post']'name'])); ?>

ses ce que je fais et sa me met cette erreur

Notice (8): Undefined index: media [APP\View\Posts\show.ctp, line 24]
Notice (8): Undefined index: extension [APP\Plugin\Media\View\Helper\MediaHelper.php, line 26]

Quand
Quelqu'un saurait comment récupérer tout les media associer a un article svp??

26 réponses


antho07
Réponse acceptée

au temps pour moi, c'est ma faute....

<?php foreach ($posts'Media'] as $k => $v): ?>

        <?= $this->Media->image($v'file'], 200, 200); ?>  

<?php endforeach ?>

Bonjour debug déjà la variable $posts pour voir si tu as les medias dans cette variable là ..

sly
Auteur

j'ai la variable mes sa me retourne qu'un seul media le dernier uploader

sly
Auteur

et excuse moi bonjour ;)

tu peux poster le copie collé du debug stp ?

sly
Auteur

Merci de prendre le temp d'essayer de m'aidez
Voici le debug

array(
    'Post' => array(
        'id' => '26',
        'name' => 'articles test2',
        'slug' => 'articles-test2',
        'content' => '',
        'web' => '',
        'type' => 'post',
        'created' => '2013-07-05 21:09:00',
        'online' => '1',
        'video' => '',
        'user_id' => '5',
        'media_id' => '174',
        'comment_count' => '1',
        'thumb' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'photo' => 'photos/1/26.jpg',
        'thumbs' => 'photos/1/26_thumbs.jpg',
        'url' => array(
            'controller' => 'posts',
            'action' => 'show',
            'admin' => false,
            (int) 0 => '26'
        ),
        'link' => array(
            'controller' => 'posts',
            'action' => 'show',
            'id' => '26',
            'slug' => 'articles-test2'
        )
    ),
    'Thumb' => array(
        'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'type' => 'pic',
        'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
    ),
    'Media' => array(
        '' => array(
            'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
            'ref_id' => '26',
            'type' => 'pic',
            'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
        )
    )
)

et tu as d'autres medias associés?

sly
Auteur

oui il y en as 3

tu peux faire voir le model Post et l'action du controller stp ?

sly
Auteur

Le model post

<?php 
class Post extends AppModel{
    public $actsAs = array(
        'Media.Media' => array(
            'extensions'=> array('jpg','png','jpeg','pdf','doc','docx','gif','zip','rar'),
            'path' => '/uploadsarticles/%y-%m/%f'
        )
    );
    public $hasMany = array('Comment','Media'); 
    public $components = array('RequestHandler');
    public $uses = array('Post');
    public $validate = array(
        'slug' => array(
            'rule' => '/^[a-z0-9\-]+$/',
            'allowEmpty' => true,
            'message' => "L'url n'est pas valide"
        ),
        'name' => array(
            'rule' => array('between', 3, 26),
            'message' => "Vous devez préciser un titre entre 3 et 26 caractére"
        ),
        'src' => array(
            'rule' => 'notEmpty',
            'message' => "L'url de l'image a la une est vide"
        )
    );
    public $order = 'Post.created DESC';
    /**
    * Permet de générer / récupérer un brouillon
    **/
    public function getDraft($type){
        $posts = $this->find('first',array(
            'conditions' => array('online' => -1,'type' => $type)
        ));
        if(empty($posts)){
            $this->save(array(
                'type' => $type,
                'online' => -1
            ),false);
            $post = $this->read();
        }
        $posts'Post']'online'] = 0; 
        return $posts; 
    }

    public function afterFind($results, $primary = false){
        foreach($results as $k=>$result){
            if(isset($result$this->alias]'id'])){
                $results$k]$this->alias]'photo'] = 'photos/' . ceil($result$this->alias]'id']/1000) . '/' . $result$this->alias]'id'] . '.jpg';
                $results$k]$this->alias]'thumbs'] = 'photos/' . ceil($result$this->alias]'id']/1000) . '/' . $result$this->alias]'id'] . '_thumbs.jpg';
                $results$k]$this->alias]'url'] = array('controller' => 'posts', 'action' => 'show','admin' => false, $result$this->alias]'id']);
            }
        }
        foreach ($results as $k => $result) {
            if (isset($result'Post']'slug']) && isset($result'Post']'id']) && isset($result'Post']'type'])){
                $result'Post']'link'] = array (
                    'controller' => Inflector::pluralize($result'Post']'type']),
                    'action' => 'show',
                    'id' => $result'Post']'id'],
                    'slug' => $result'Post']'slug']
                    );
            }
            $results$k]=$result;
        }
        return $results;
    }
    public function beforeSave($options = array()){
        if(empty($this->data'Post']'slug']) && isset($this->data'Post']'slug']) && !empty($this->data'Post']'name']))
            $this->data'Post']'slug'] = strtolower(Inflector::slug($this->data'Post']'name'],'-'));
        return true; 
    }

}

Ma fonction show du Postscontroller

public function show($id = null,$slug = null){
        $referer = $this->referer().'#commentForm';
        $this->Post->contain('Thumb.file','Media.file');
        $posts = $this->Post->findById($id);
        if(empty($posts)){
            throw new NotFoundException('Aucune page ne correspond à cet ID');
        }
        if(!empty($this->request->data)){
            $this->request->data'Comment']'user_id'] = $this->Auth->user("id") ? $this->Auth->user("id") : 0;
            $this->request->data'Comment']'post_id'] = $posts'Post']'id'];
            $this->Post->Comment->create($this->request->data, true);
            $fields = array('user_id', 'post_id', 'content');
            if(!$this->Auth->user("id")){
                $fields] = 'username';
                $fields] = 'mail';
            }
            if($this->Post->Comment->save(null, true, $fields)){
                $this->Session->setFlash('Merci pour votre commentaire', 'flash', array('class' => 'success'), 'commentForm');
                $this->request->data = array();
                return $this->redirect($referer);
            }else{
                $this->Session->setFlash('Impossible d\'envoyer votre commentaire, Merci de corriger vos champs', 'flash', array('class' => 'error'), 'commentForm');
            }
        }
        $comments = $this->Post->Comment->find('all', array(
            'conditions' => array('Comment.post_id' => $posts'Post']'id']),
            'order' => array('created DESC'),
            'contain' => array('User'),
            'fields' => array('Comment.id', 'Comment.user_id', 'Comment.content','Comment.created','User.username','User.avatar','User.id','Comment.username','Comment.mail')
        ));
        $this->set(compact('posts','comments'));
    }

public $actsAs = array(
'Media.Media' => array(
'extensions'=> array('jpg','png','jpeg','pdf','doc','docx','gif','zip','rar'),
'path' => '/uploadsarticles/%y-%m/%f'
)
);

public $hasMany = array('Comment','Media');

Enleve Media dans $hasMany , ya peut être du telescopage dans les modeles du coup la..

sly
Auteur

j'ai rajouter Media pour voir si sa changer quelque chose, que je le mette ou l’enlève j'ai le même reultat

recopie colle le debug apres stp

$this->Post->contain('Thumb.file','Media.file');

essaye de mettre Media tout cours pour voir

sly
Auteur

j'ai enlever Media dans la relation hasmany et le debug et exactement le meme.
le voici

array(
    'Post' => array(
        'id' => '26',
        'name' => 'articles test2',
        'slug' => 'articles-test2',
        'content' => '',
        'web' => '',
        'type' => 'post',
        'created' => '2013-07-05 21:09:00',
        'online' => '1',
        'video' => '',
        'user_id' => '5',
        'media_id' => '174',
        'comment_count' => '1',
        'thumb' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'photo' => 'photos/1/26.jpg',
        'thumbs' => 'photos/1/26_thumbs.jpg',
        'url' => array(
            'controller' => 'posts',
            'action' => 'show',
            'admin' => false,
            (int) 0 => '26'
        ),
        'link' => array(
            'controller' => 'posts',
            'action' => 'show',
            'id' => '26',
            'slug' => 'articles-test2'
        )
    ),
    'Thumb' => array(
        'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'type' => 'pic',
        'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
    ),
    'Media' => array(
        '' => array(
            'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
            'ref_id' => '26',
            'type' => 'pic',
            'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
        )
    )
)
sly
Auteur

en mettant Media tout court ne change rien

sly
Auteur

oups excuse moi j'ai enlever le .file dans ma fonction index
ses bon j'ai tout les media associer

array(
    'Post' => array(
        'id' => '26',
        'name' => 'articles test2',
        'slug' => 'articles-test2',
        'content' => '',
        'web' => '',
        'type' => 'post',
        'created' => '2013-07-05 21:09:00',
        'online' => '1',
        'video' => '',
        'user_id' => '5',
        'media_id' => '174',
        'comment_count' => '1',
        'thumb' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'photo' => 'photos/1/26.jpg',
        'thumbs' => 'photos/1/26_thumbs.jpg',
        'url' => array(
            'controller' => 'posts',
            'action' => 'show',
            'admin' => false,
            (int) 0 => '26'
        ),
        'link' => array(
            'controller' => 'posts',
            'action' => 'show',
            'id' => '26',
            'slug' => 'articles-test2'
        )
    ),
    'Thumb' => array(
        'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
        'type' => 'pic',
        'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
    ),
    'Media' => array(
        (int) 171 => array(
            'id' => '171',
            'ref' => 'Post',
            'ref_id' => '26',
            'file' => '/uploadsarticles/2013-07/SlyAvatar2.png',
            'position' => '2',
            'extension' => 'png',
            'name' => 'SlyAvatar2',
            'type' => 'pic',
            'icon' => '/uploadsarticles/2013-07/SlyAvatar2.png'
        ),
        (int) 173 => array(
            'id' => '173',
            'ref' => 'Post',
            'ref_id' => '26',
            'file' => '/uploadsarticles/2013-07/SlyAvatar7.png',
            'position' => '3',
            'extension' => 'png',
            'name' => 'SlyAvatar7',
            'type' => 'pic',
            'icon' => '/uploadsarticles/2013-07/SlyAvatar7.png'
        ),
        (int) 174 => array(
            'id' => '174',
            'ref' => 'Post',
            'ref_id' => '26',
            'file' => '/uploadsarticles/2013-07/SlyAvatar9.png',
            'position' => '4',
            'extension' => 'png',
            'name' => 'SlyAvatar9',
            'type' => 'pic',
            'icon' => '/uploadsarticles/2013-07/SlyAvatar9.png'
        )
    )
)
sly
Auteur

mes j'ai toujours l'erreur au lieu de m'afficher les images

Notice (8): Undefined index: media [APP\View\Posts\show.ctp, line 24]
Notice (8): Undefined index: extension [APP\Plugin\Media\View\Helper\MediaHelper.php, line 26]

ça c'est normal regarde ce que tu as ecris:

<?= $this->Media->image($posts'Post']'media'], 200, 200,array('alt' => $posts'Post']'name'])); ?>

compare avec le debug précédent...

Il va falloir faire une boucle pour faire ce que tu veux faire.

sly
Auteur

une boucle avec un foreach un peu comme sa?:

<?php foreach ($posts as $k => $v): ?>
            <?= $this->Media->image($v'Post']'media'], 200, 200); ?>  
    <?php endforeach ?>

Je vois pas comment écrire le liens pour avoir tout les medias dans le tuto il es juste dit de mettre 'media' a la place de 'thumb'

Oué presque sauf que faut pas parcourir les posts mais les images donc

<?php foreach ($posts'Post']'Media'] as $k => $v): ?>

        <?= $this->Media->image($v'file'], 200, 200); ?>  

<?php endforeach ?>
sly
Auteur

sa me donne cette erreur

Notice (8): Undefined index: Media [APP\View\Posts\show.ctp, line 24]
Warning (2): Invalid argument supplied for foreach() [APP\View\Posts\show.ctp, line 24]
sly
Auteur

ah yes sa marche!! ba vraiment un grand merci de m'avoir aidez!, sa fait 2 jours que je bloque la dessus.

De rien, faut vraiment utiliser les debugs quand on est bloqué..on la structure de la variable , ça aide pour savoir comment accéder à tel ou tel élément.

sly
Auteur

oui ses sur mes étant encore débutant j'ai un peu de mal encore a coder, je me douter que s'etait un truc du genre mes j'arrivé pas a l'écrire en tout cas vraiment merci.