randolph octavio
unread,Nov 27, 2009, 4:26:41 PM11/27/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to symfony-es
Hola de nuevo, muchas gracias por la respuesta. Acá expongo mi avance:
Despúes de pensarme un poco mejor el problema de como OPTIMIZAR el
tiempo de creación de nuevos registros el problema pasa de ser Guardar
registros en Lotes a Precargar datos en un Formulario. Aunque esto
represente mas trabajo para nosotros como desarrolladores creo que
para el usuario final si que va a ser de ayuda. Explico el proceso:
Sobre los datos comunes lo que estoy haciendo ahora es: Creé un nuevo
modelo en mi BD con relaciones a todos estos campos comunes y sobre el
Form que me genera guardo esos datos para poder usarlos (precargarlos
en cada formulario) posteriormente durante el proceso de creación de
nuevos registros.
Entonces tengo:
1.- Un nuevo modelo donde temporalmente guardo mis datos comunes a un
grupo de resgistros.
2.- Una precarga según la informacion guardada en el paso previo.
3.- Un botón que "continuar" para crear nuevos registros con los datos
precargados.
4.- Un botón Finalizar que lo que hace es limpiar el modelo donde
tenia mis datos precargados.
Ahora. La acción:
En el punto 3. lo que hago el llamar executeNew() de mi Formulario al
que se van a precargar todos los datos que fueron creados previamente.
En LibrosFrom.class.php tengo lo siguiente:
/********************************************************
Recuperar los datos PreCargados
********************************************************/
$pl = Doctrine::getTable('Preload')->getPreload(); /* este metodo
esta defindo en ProveedorTable respectivamente */
foreach ( $pl as $pl1):
$per = $pl1->getProveedorId();
...
...
...
endforeach;
/**********************************************************
Asignar los datos precargados a los campos de mi Formulario
**********************************************************/
$this->setDefaults(array(
'proveedor_list' => $per, /* Pertenece a una relación
m2m, acá tengo problemas con la precarga */
'procedencia' => $proc,
'estante_list' => $st, /* Pertenece a una
relación 1:n */
...
...
...
));
Ahora que pasa con la precarga: Todos los campos simples
(sfWidgetFormInputText) se actualizan sin problema, pero los que
representan una lista no lo hacen, Para solucionar esto lo que hice
fue lo siguiente:
/*********************************************
Si el método getPreload() devuelve algún dato
cambio el widget por defecto y lo convierte en
uno tipo Input para poder mostrar los datos, si
no devuelve nada deja su widget original y no ha
pasado nada porque muestra la lista para que el
usuario pueda escoger.
*********************************************/
if ($st != ''){
$this->widgetSchema['estante_list'] = new
sfWidgetFormInputText();
$this->validatorSchema['estante_list'] = new
sfValidatorString(array('max_length' => 255)); //Esto debe corregirse
}else{
$this->widgetSchema['taurus_personass_list'] = new
sfWidgetFormDoctrineChoice(array(
'expanded' => false, 'model' => 'TaurusPersonas',
'add_empty' => true
));
$this->validatorSchema['taurus_personass_list'] = new
sfValidatorDoctrineChoice(array(
'multiple' => true, 'model' => 'TaurusPersonas', 'required'
=> false
));
}
Esto funciona para las lista de relaciones 1:n, no para los de m2m
Con los campos que tienen sfWidgetFormDoctrineChoice (m2m), en mi
caso para proveedor_list, me cambia el formato del campo en el
formulario pero no me actualiza el valor de la variable donde tengo
asignado lo que devuelve getPreload(). Solo me pinta un InputText y la
palabra Array.
Si alguien sabe como resolverlo, pues le estare inmensamente
agradecido. Igual igo investigando a ver como doy con la solución.
Saludos nuevamente.