lunes, 25 de julio de 2011

sfDependentSelectPlugin - problema con nombre de los campos

Cuando el combo superior no cumple con el estandar de nombre....

Ejemplo:
si tenemos un campo de referencia en una tabla que no cumple con el nombre estandar ej. direccion_id y por el contrario tenemos algo como receptor_direccion_id
los combos dependientes no funcionan.. al menos no a mi... hay q hacer 3 sencillos pasos...


1.- debes modificar 2 cosas proy/plugins/sfDependentSelectPlugin/sfWidgetFormDependentSelect.class

// en la funcion configure agregar una nueva opcion widget
protected function configure($options = array(), $attributes = array())
{
$this->addOption('depends', '');
$this->addOption('widget', '');//nueva opcion widget
$this->addOption('add_empty', true);
// ajax
$this->addOption('ajax', false);
$this->addOption('cache', true);
$this->addOption('params', array());
$this->addOption('url', sfContext::getInstance()->getController()->genUrl('sfDependentSelectAuto/_ajax'));
// source
$this->addRequiredOption('source_class', '');
$this->addOption('source_params', array());

parent::configure($options, $attributes);
}
2.- luego
//en la funcion render modificar la opcion 'dependiente'
public function render($name, $value = null, $attributes = array(), $errors = array()) 
{
.....
......
...........
$config = array(
'id'          => $this->generateId($name),
'opciones'    => $values,
'vacio'       => true === $this->getOption('add_empty') ? '' : $this->getOption('add_empty'),
'ajax'        => $this->getOption('ajax'),
'url'         => $this->getOption('url'),
'cache'       => $this->getOption('cache'),
'dependiente' => ($this->getOption('widget') == '' ? $this->getOption('depends') : $this->getOption('widget')),//validamos el valor q viene en la opcion
'varref'      => '_ds_ref',
'varsoloref'  => '_ds_get_ref_value',
'params'      => array_merge($this->getOption('params'), array(
'_ds_id'            => $this->generateId($name),
'_ds_source_class'  => $sourceClass,                                    
'_ds_source_params' => $this->getOption('source_params'),
)),            
);

.....
......
...........

return $widget . $script;
}
3.- por ultimo en /proy/lib/form/doctrine/CorrespondenciaForm.class agregas la opcion q acabas de crear... y listo! cuando no necesites
eso solo usas la opcion depends
$this->validatorSchema['receptor_direccion_id'] = new sfValidatorDoctrineChoice(array(
'model' => $this->getRelatedModelName('Direccion'),
'required' => true), array('required' => 'Campo Obligatorio'));

$this->widgetSchema['receptor_persona'] = new sfWidgetFormDoctrineDependentSelect(array(
'model'     => 'Persona',
'depends'   => 'Direccion',
'widget'   => 'correspondencia_receptor_direccion_id', // nombre del campo renderizado en el form (combo superior)
'add_empty' => '<- Seleccione receptor ->',
'method' => '__toString',
));

y listo!!

1 comentario:

  1. Gracias capo, al fin después de mucho googlear di con tu post!!!!, me solucionastes la vida!!!

    ResponderEliminar