Bonjour à tous,

J'ai un petit soucis par rapport au tuto CMS jour relatif à l'implantation de photo dans tinymce partit redimenssionage (petit moyen grand)
Voici mon MediasController

<?php
class MediasController extends AppController{
    public $components = array('Img'); 
    function admin_index($post_id){
        if($this->request->is('post')){
            $data = $this->request->data;
            $dir = IMAGES.date('Y');
            if(!file_exists($dir))
                mkdir($dir, 0777);
            $dir .= DS.date('m');
            if(!file_exists($dir))
                mkdir($dir, 0777);  
            $f = explode('.', $data'Media']'file']'name']);
            $ext = '.'.end($f);
            $filename = Inflector::slug(implode('.', array_slice($f,0,-1)),'-');
            //sauvegarde en bdd//////// 
            $succes = $this->Media->save(array(
                'name' => $data'Media']'name'],
                'url' => date('Y').'/'.date('m').'/'.$filename.$ext,
                'post_id' => $post_id
            ));
            if($succes){
                move_uploaded_file($data'Media']'file']'tmp_name'], $dir.DS.$filename.$ext);
                $this->Session->setFlash("Image correctement enregistrée", "notif");
                foreach(Configure::read('Media.formats') as $k=>$v){
                    $prefix = $k;
                    $size = explode('x', $v);
                    $this->Img->crop($dir.DS.$filename.$ext,$dir.DS.$filename.'_'.$prefix.'.jpg',
                        $size[0],$size[1]);
                }
            }else{
                $this->Session->setFlash("L'image n'est pas au bon format !", "notif", array('type' => 'error'));
            }

        }
        $d = array();
        $d'medias'] = $this->Media->find('all', array(
            'conditions' => array('post_id' => $post_id)
            ));
        $d'formats'] = Configure::read('Media.formats');
        $this->layout = "tinymce";
        $this->set($d); 
    }
    function admin_show($id=null,$format = ''){
        $d = array();
        if($this->request->is('post')){
            $this->set($this->request->data'Media']);
            $this->layout = false;
            $this->render('tinymce');
            return;
        }
        if($id){
            $this->Media->id = $id;
            $media = current($this->Media->read());
            $d'src'] = Router::url('/img/'.$media'url'.$format]);
            $d'alt'] = $media'name'];
            $d'class'] = 'alignLeft';
        }else{
            $d = $this->request->query;

        }
        $this->layout = "tinymce"   ;
        $this->set($d);
    }
    function admin_delete($id){
        $this->Media->id = $id;
        $file = $this->Media->field('url');
        unlink(IMAGES.DS.$file);
        $f = explode('.',$file);
        $ext = '.'.end($f);
        $file = implode('.',array_slice($f,0,-1));
        foreach(glob(IMAGES.DS.$file.'_*.jpg') as $v){
            unlink($v);
        }
        $this->Media->delete($id);
        $this->Session->setFlash("Image bien supprimée !", "notif");
        $this->redirect($this->referer());
    }   
}
?>

et pas vue admin_index

<?php
echo '<div id="part3">';
echo '<h3>Upload manager</h3>';
echo $this->Form->create('Media', array('type' => 'file'));
echo $this->Form->input('file', array('label' => "Image au format png, jpg ou jpeg uniquement", 'class'=>'input_profil', 'type'=> 'file'));
echo $this->Form->input('name', array('label' => "Nom de l'image", 'class'=>'input_profil')).'<br/>';
echo $this->Form->submit('Ajouter', array('class' => 'button', 'div' => false));
echo '</div>';
?>
<table class="table1">
    <caption>Liste des images de l'article</caption>
    <tr>
        <th>Appercu</th>
        <th>Nom</th>
        <th>Action</th>
    </tr>

    <?php debug($medias); ?>
    <?php foreach($medias as $k => $v): $v = current($v); ?>

<?php   echo '<tr>';
    echo '<td>'.$this->Html->image($v'url'], array('style' => 'max-width:175px')).'</td>';
    echo '<td>'.$v'name'].'</td>';
    echo '<td>';
    foreach($formats as $kk=>$vv):
        echo $this->Html->link('Image '.$vv."px", array('action' => 'show', $v'id'],$kk)).'<br>';
    endforeach; 
        echo $this->Html->link('Supprimer', array('action' => 'delete', $v'id']), array('escape' => false), 'Etes vous sûr de vouloir supprimer l\'image ?').'<br>'.$this->Html->link('taille normale', array('action' => 'show', $v'id']), array('escape' => false));  
    echo '</td>';
    echo '</tr>';
    endforeach;
    ?>  
</table>

Quand je teste, ça me dit "Invalid argument supplied for foreach() [APP\View\Medias\admin_index.ctp, line 20]"

Ce qui est normal vu que le débug($medias) est vide alors que dans ma BDD j'ai vérifié il y a bien une entrée relatif à l'id_post (l'id de mon article)

Vous voyez ce qui cloche ?

Merci d'avance :)

7 réponses


Vérifie si post_id existe bien

tapesec
Auteur

oui il existe ça se voit dans le tableau de requête sql :
Query Error Affected Num. rows Took (ms)
1 SELECT Media.id, Media.name, Media.url, Media.post\_id, Media.type FROM medias AS Media WHERE post\_id = 36 AND type = 'image'

tapesec
Auteur

C'est vraiment bizare cette histoire, c'est déjà arrivé à quelqu'un ?

Comme le montre cette requête : SELECT Media.id, Media.name, Media.url, Media.post\_id, Media.type FROM medias AS Media WHERE post\_id = 36 AND type = 'image'

et grace a ces lignes

$d'medias'] = $this->Media->find('all', array(
            'conditions' => array('post_id' => $post_id, 'type' => 'image')
            ));
        $d'formats'] = Configure::read('Media.formats');
        $this->layout = "tinymce";
        $this->set($d);

J'essaye de récupérer mes images associé à un article. J'ai bien regardé ma base de donnée ils y sont mais rien à faire
quand je fais ca :

<?php echo 'valeur : '.$medias; ?> // cette ligne renvoie $medias vide en sortie 
    <?php foreach($medias as $k => $v): $v = current($v); ?>
    <tr>
    <td><?php echo $this->Html->image($v'url'], array('style' => 'max-width:175px')); ?></td>'
    <td><?php echo $v'name']; ?></td>
    <td>
    <?php foreach($formats as $kk=>$vv):
        echo $this->Html->link('Image '.$vv."px", array('action' => 'show', $v'id'],$kk)).'<br>';
    endforeach; 
        echo $this->Html->link('Supprimer', array('action' => 'delete', $v'id']), array('escape' => false), 'Etes vous sûr de vouloir supprimer l\'image ?').'<br>'.$this->Html->link('taille normale', array('action' => 'show', $v'id']), array('escape' => false));  
    echo '</td>';
    echo '</tr>';
    endforeach;
    ?>

C'est connu ce genre de problème ?

Tu enregistre bien en base avec le type image car quand on regarde ton code tu ne dit pas que c'est de type image donc regarde sur phpmyadmin si type est bien égal à image et au pire teste ta requête dans phpmyadmin tu verra si il te resort des résultat ou pas.

tapesec
Auteur

oui désolé pour le type image j'ai mis à jour apres mon controller en rajoutant l'argument type => image.
Sinon j'ai fait comme tu dis par phpmyadmin ma requete et ca me ressort bien l'entrée cherché :
36 hendrix 2012/03/hendrix.jpg 36 image

voilà.

Et dans ton controller tu fais un debug($d'medias']); juste après ton find tu as quoi

tapesec
Auteur

et bien c'est ce qui est bien bizare, la variable est vide : app\Controller\MediasController.php (line 43) puis rien en dessous c'est blanc, null