Plugin Media

Par sly, il y a 12 ans


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

sly, il y a 12 ans

en mettant Media tout court ne change rien

antho07, il y a 12 ans

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

sly, il y a 12 ans

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

sly, il y a 12 ans

et excuse moi bonjour ;)

antho07, il y a 12 ans

tu peux poster le copie collé du debug stp ?

sly, il y a 12 ans

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'
        )
    )
)
antho07, il y a 12 ans

et tu as d'autres medias associés?

sly, il y a 12 ans

oui il y en as 3

antho07, il y a 12 ans

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

sly, il y a 12 ans

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'));
    }
antho07, il y a 12 ans

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, il y a 12 ans

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

antho07, il y a 12 ans

recopie colle le debug apres stp

antho07, il y a 12 ans

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

essaye de mettre Media tout cours pour voir

sly, il y a 12 ans

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, il y a 12 ans

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, il y a 12 ans

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]

antho07, il y a 12 ans

ç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...

antho07, il y a 12 ans

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

sly, il y a 12 ans

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'

antho07, il y a 12 ans

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, il y a 12 ans

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]
antho07, il y a 12 ans

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

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

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

<?php endforeach ?>
sly, il y a 12 ans

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

antho07, il y a 12 ans

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, il y a 12 ans

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.