Hola a todos.
Estoy intentando incluír una subida de imágenes desde el widget de Yiibooster/Redactor.
Me he encontrado unos problemas que no me permiten avanzar.
Tengo un modelo Producto ($model) con un campo ‘imagen’ que tiene el nombre que le he dado en el directorio de la imagen, que completo luego con el path ‘images/producto’.
Las acciones GetImageData y UploadImage están en el siteController.
En mi _form tengo el widget creado, que ‘parece’ funcionar bien:
$this->widget('bootstrap.widgets.TbRedactorJs',
array(
'model'=>$model,
'attribute'=>'imagen',
'editorOptions'=>array(
'imageUpload' => $this->createUrl('site/uploadpicture'),
'imageGetJson'=> $this->createUrl('site/getimagedata',
array(
'folder'=>'producto',
'path'=>'images',
'title'=>$model->titulo,
'filelink'=>'/images/producto/'.$model->imagen, // no estoy muy seguro de esto
'thumb'=>'/images/producto/m_'.$model->imagen,// no estoy muy seguro de esto[/size]
'imagen'=>$model->imagen,
)),
'width'=>'100%',
'height'=>'400px',
'buttons'=>array('image'),
)
));
Cuando veo el ‘camino’ que siguen los datos en firebug, llama primero a site/GetImageData, y devuelve los datos que estan allá por Json, si hay alguno.
Entonces selecciono la imagen, y al hacer OK llama a site/UploadPicture, en la que muevo ‘manualmente’ la imagen del TMP al directorio images/producto, con un time() (temporalmente, hasta que encuentre algo más satisfactorio), y de ahí vuelve al _form.
public function actionUploadPicture()
{
// $picture = new Picture;
// hacer aqui la copia del tmp al Images/producto
// con el saveAs y esas cosas
// y pasar los datos por Json, para en el update actualizar la base de datos
if (move_uploaded_file ($_FILES['file']['tmp_name'], 'images/producto/'.time().$_FILES['file']['name'])) {
echo json_encode(array(
array(
'error'=>$_FILES['file']['error'],
'name'=>$_FILES['file']['name'],
'tmp_name'=>$_FILES['file']['tmp_name'],
'filetype'=>$_FILES['file']['type'],
'size'=>$_FILES['file']['size'],
'filelink' => 'images/producto/'.time().$_FILES['file']['name'],
),
));
}
}
/**
* Handle file/image data via redactor widget from Yiibooster
*
*/
public function actionGetImageData()
{
//$picture = new Picture;
echo json_encode(array(
array(
'folder' => $_GET['folder'], // optional
'imagen' => $_GET['imagen'], // menos importante, el nombre de la imagen
'filelink' => '/images/producto/'.$_GET['imagen'], // importante, el link a la imagen
//'fileName' => '/images/producto/'.$_GET['imagen'],
'path'=> $_GET['path'],
'thumb' => '/images/producto/m_'.$_GET['imagen'],
'title' => $_GET['title'], // optional
/**/
),
));
}
Hasta ahora he conseguido subir la imagen del tmp al directorio que deseo, images/producto, pero sé que no es la manera adecuada ($_GET y $_FILES).
También cree un modelo Picture, pero no lo estoy usando.
En _form no se me actualiza la imagen subida, pero sí lo hace cuando creo a mano la variable ‘filelink’ en GetImageData.
Mi intención es pasar los datos desde el _form (si es un update, no si es un newRecord) hasta el GetImageData (si ésto es así, que no lo entiendo en realidad), y de ahí los datos de la imagen subida al UploadImage para que los devuelva al _form, y actualizar el model Producto en un segundo paso, pero no con $_GET y con $_POST, sino con los métodos de Yii, $model->imagen=CUploadedFile::getInstance($model,‘imagen’) y $model->imagen->saveAs(‘path/to/localFile’).
No sé si ha quedado claro, no obstante.
Si alguien me pudiera indicar una dirección adecuada para realizarlo correctamente…
Gracias anticipadas.