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.
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.
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...
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();
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.
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)
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...
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?
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.