Inicio > Symfony > sfUploadFilePlugin (for symfony 1.4)

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.

DependeciassfThumbnailPlugin

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 (Programador Web en Php)

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

Compartir información en: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • MisterWong
  • Y!GG
  • Webnews
  • Digg
  • del.icio.us
  • StumbleUpon
  • Reddit
  • Ask
  • De.lirio.us
  • Facebook
  • LinkedIn
  • Live-MSN
  • MySpace
  • YahooMyWeb
  • email
  • Google Bookmarks
  • TwitThis
  • YahooBuzz
Categories: Symfony Tags:
  1. Viernes, 30 de Abril de 2010 a las 17:45 | #1

    Muy interesante, buen código

  2. Viernes, 30 de Abril de 2010 a las 17:53 | #2

    Gracias pana !!!!

  1. Sin trackbacks aún.