Bonjour, j'essaye d'installer le plugin média avec pas mal de difficulté sur mon site, je souhaite l'implanter de la facon la plus simple:

<?php echo $this->Uploader->Iframe('Post',$this->request->data'Post']'id']); ?>

lorsque je test, l'iframe apparait bien et j'arrive à glisser une image dedans, mais après il me met une erreur:
failed to open stream: No such file or directory...
Normalement le plugin utilise in prefix admin, moi j'utilise membre comme préfix je pense que ça viens de là, bien essaye de renommer
admin en membre dans le controleur mais c'est pire il m'affiche meme plus le contenu de l'iframe.
sinon un debug me donne:

array(
    'id' => '5',
    'ref' => 'Post',
    'ref_id' => '10',
    'file' => '0',
    'position' => 'image',
    'filef' => '_%dx%d.jpg'
)

je débute sur cakephp et je galère un peut :-(
Merci de votre aide.

14 réponses


Je te conseille d'aller voir du coté des options du plugin ou tu peux spécifier un chemin. Tout est expliqué dans le tutoriel de Grafikart a ce sujet.

nivdeb
Auteur

J'ai regardé encore et encore le tuto, ce qui m'étonne c'est au tout début dans le model post il est ajouté

public $actsAs = array('Containable','Media.Media');

ce qui permet de faire la liaison avec la table media (la 3eme requête sur la video) et chez moi c'est inexistant!
qu'est ce qui pourrais ne pas aller?

post.php(partiel)

<?php 
App::uses('AppModel', 'Model');
class Post extends AppModel{
    public $actsAs = array('Containable','Media.Media');
    public $displayField = 'name';

    public $hasMany = array(
        'Media' => array(
            'dependent' => true
        )
    ); 
    public $belongsTo = array(
        'Category' => array(
            'counterCache' => array('post_count' => array('Post.online'=>1))
        )
    );
    public $recursive = -1; 
    public $validate = array(
        'slug' => array(
            'rule' => '/^[a-z0-9\-]+$/',
            'allowEmpty' => true,
            'message' => "L'url n'est pas valide"
        ),
ecct...

As tu crée cette table medias ?

nivdeb
Auteur

oui elle existe bien, par contre je l'ai créé manuellement pas en console...

C'est pas un soucis a partir du moment ou t'as respecté les champs. Je te conseille d'indiquer le chemin ou sera stocké tes médias : (source) http://grafikart.github.com/CakePHP-Media/config.html

public $actsAs = array('Containable','Media.Media' => array('path (uploads/%y/%m/%f)'));

Dernière chose as tu dans ton boostrap charger les plugins ?

CakePlugin::loadAll();
nivdeb
Auteur

mon bootstrap est bon et $actsAs aussi, quant je test l'image est bien uploade dans le bon répertoire, par contre dans la table medias il renseigne n'importe quoi à la ligne correspondante.

Qu'est ce que tu obtiens dans ta table et qu'est ce que tu devrais obtenir ?

nivdeb
Auteur

dans ma table j'ai:
id=7
ref=Post
ref_id=10
file=0
position=image
media_id=vide

ce que je souhaite:
id=7(ok bon)
ref=(refer media)
ref_id=10(ok bon)
file=(mon_image1.jpg)
position-image=(1)

nivdeb
Auteur

j'oublié media_id de la table post est bien renseigné quant on clique sur image a la une

en Ref tu auras forcément Post si tu associé une image a un Post. En ce qui concerne file je ne comprend pas...

nivdeb
Auteur

je viens de faire un debug sur Mediascontroller du plugin quant je fait

function admin_upload($ref,$ref_id){
        $this->Media->save(array(
            'ref' => $ref,
            'ref_id' => $ref_id,
            'file' => $_FILES'file']
        ));
        debug($_FILES'file']);
        die();
....        
    }

mon nom de fichier est bien là avec tout ce qui va avec a savoir tmp name, type, size.
et quant je fait:

function admin_upload($ref,$ref_id){
        $this->Media->save(array(
            'ref' => $ref,
            'ref_id' => $ref_id,
            'file' => $_FILES'file']
        ));

        $this->loadModel($ref); 
        $d'v'] = current($this->Media->read());
        $d'tinymce']= isset($this->request->params'named']'tinymce']); 
        $d'thumbID'] = $this->$ref->hasField('media_id');
        $this->set($d);
        $this->layout = false; 
        $render = $this->render('admin_media'); 
        debug($d);
        die();
        die($render);
    }

resultat:

array(
    'id' => '5',
    'ref' => 'Post',
    'ref_id' => '10',
    'file' => '0',
    'position' => 'image',
    'filef' => '_%dx%d.jpg'
)

à votre avis est ce que ce résultat est normal?

Et si tu debug dans le model Media dans la fonction beforeSave(); ça donne quoi ?

nivdeb
Auteur

quant je fait:

function beforeSave($options = array()){
        if( isset($this->data'Media']'file']) && is_array($this->data'Media']'file']) && isset($this->data'Media']'ref']) ){
            $model = ClassRegistry::init($this->data'Media']'ref']);
            $dir = $model->medias'path'];
            $ref_id = $this->data'Media']'ref_id'];
            $pathinfo = pathinfo($this->data'Media']'file']'name']);
            $filename = Inflector::slug($pathinfo'filename'],'-');
            $search = array('%id','%mid','%cid','%y','%m','%f');
            $replace = array($ref_id,ceil($ref_id/1000),ceil($ref_id/100),date('Y'),date('m'),Inflector::slug($filename));
            $dir = str_replace($search,$replace,$dir).'.'.$pathinfo'extension'];
            $this->testDuplicate($dir);
            if(!file_exists(dirname(IMAGES.$dir))){
                mkdir(dirname(IMAGES.$dir),0777,true);
            }
            move_uploaded_file($this->data'Media']'file']'tmp_name'], IMAGES.$dir);
            chmod(IMAGES.$dir,0777);
            $this->data'Media']'file'] = $dir;
        }
        debug($this->data'Media']);
        die();
        return true;
    }

j'ai:

array(
    'ref' => 'Post',
    'ref_id' => '10',
    'file' => 'uploads/2012/08/monimage.jpg'
)

Ben alors là je comprend pas du tout ... parce que ça ne cloche pas au moment de la sauvegarde et tu as quand même n'importe quoi dans la table.