sfUploadFilePlugin (for symfony 1.4)
Saludos amigos symfonycos, revisando mi post anterior decidí darle ciertas mejoras creando un plugin para la carga de imágenes. Este plugin, provee un helper con una sola función.
Dependecias: sfThumbnailPlugin
Instalación
1) Descarga el paquete: sfUploadFilePlugin
2) En el módulo o los módulos donde se vaya a usar el helper debe crearse el archivo module.yml en la carpeta config de dicho módulo. La estructura para que el helper funcione es la siguiente:
all: # Número de copias num_copies: 2 # Definicion de los tamaños para las imagenes contenidas en este modulo. Estas se leeran dinámicamente # Es obligatorio que existan tantos prefijos como número de copias usted haya configurado size: pref_1: small image_width_1: 75 image_height_1: 75 pref_2: big image_width_2: 150 image_height_2: 150 ..................................... pref_n: prefijo_de_la_imagen image_width_n: valor_width image_height_n: valor_heght .....................................
3) Habilitar el plugin y cargar el helper en el archivo config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->enablePlugins('sfPropelPlugin', 'sfLynxUploadFilePlugin',
'sfThumbnailPlugin');
sfProjectConfiguration::getActive()->loadHelpers('uploadFile');
}
}
4) Elimine la cache con ./symfony cc
5) Si todos estos pasos fueron ejecutados secuencialmente y con exito; el plugin debe estar instalado correctamente.
uploadFile Helpers documentation
A continuación se presenta la sintaxis completa para cargar imágenes con el Helper
En tu funcion proccessForm despues de guardar los datos del nuevo registro agregar:
// Detecto si hay una nueva imagen
if($form->getValue('image'))
{
$file = $form->getValue('image');
$Model = ModelPeer::retrieveByPK($Model->getId());
// Aqui cargo la imagen con la funcion loadFiles de mi Helper
$fileUploaded = loadFiles($file->getOriginalName(),
$file->getTempname(),
0,sfConfig::get('app_directory_upload'),
sfConfig::get("mod_MI_MODULO_sizes_image_big_width"),
sfConfig::get("mod_MI_MODULO_sizes_image_big_height"),
$Model->getId());
$Model->setImage($fileUploaded);
$Model->save();
}
De esta manera se cargan las imágenes al directorio especifico.
Pero esto no lo es todo, al momento de edición del registro y selecciono una nueva imagen debo borrar la imagen anterior. Para esto, en el método doSave de su FormClass Model ó en la función que esten usando para guardar los cambios, se debe incluir lo siguiente:
protected function doSave($con = null)
{
// Si hay un nuevo archivo por subir y ya mi registro tiene una imagen
asociado entonces,
if ($this->getObject()->getImage() && $this->getValue('image'))
{
// recorro y elimino
for($i=1;$i<=sfConfig::get('mod_distributor_num_copies');$i++)
{
// Elimino las fotos de la carpeta
if(is_file(sfConfig::get('app_directory_upload').
sfConfig::get('mod_MI_MODULO_size_pref_'.$i).'_'.
$this->getObject()->getImage()))
{
unlink(sfConfig::get('app_directory_upload').sfConfig::get
('mod_MI_MODULO_size_pref_'.$i).'_'.$this->getObject()->getImage());
}
}
}
return parent::doSave($con);
}
Ahora solo queda poner a correr tu módulo y cargar todas las imagenes que quieras.
Hasta la próxima,

Henry Vallenilla
Symfony Developer
Email/Gtalk: henryvallenilla@gmail.com
Skype: hvallenilla
Caracas - Venezuela
www.matatigre.com



















Muy interesante, buen código
Gracias pana !!!!