Foros del Web » Programando para Internet » PHP » Zend »

desplegable con ZEND

Estas en el tema de desplegable con ZEND en el foro de Zend en Foros del Web. Hola, he estado dos semanas buscando y no hay manera!! Como puedo hacer un desplegable (select) con ZEND des de un fetchall() de una base ...
  #1 (permalink)  
Antiguo 12/03/2012, 17:01
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 8 meses
Puntos: 3
desplegable con ZEND

Hola, he estado dos semanas buscando y no hay manera!!

Como puedo hacer un desplegable (select) con ZEND des de un fetchall() de una base de datos??

Sólo me sale un elemento en el desplegable (el último!) porqué?

Tengo el controlador:
Código:
public function subprojecteAction(){
        $subprojmod = new Application_Model_DbTable_SubProjecteModel();
        
        //comprovo si estic gestionant un projecte
        if ( isset($_POST['proj_nom']) ){
            if ($_POST['proj_nom']==null || $_POST['proj_descr']==null)
                echo "<span style='color:brown;position:absolute;padding-right:40px;right:0px;font-style:oblique;'>Error de camps incorrectes</span>";
            else{
                $data = array('nom'=>$_POST['proj_nom']);
                $subprojmod->inserirSubProjecte($data);
                
                //despres s'ha de inserir a la BD de la relació
            }     
        } 
        $this->view->subproj = $subprojmod->fetchAll();
        
        $projmod = new Application_Model_DbTable_ProjecteModel();
        $this->view->proj = $projmod->fetchAll();
    }
Tengo el modelo:
Código:
class Application_Model_DbTable_SubProjecteModel extends Zend_Db_Table_Abstract
{

    protected $_name = 'subproj';
Tengo el formulario:
Código:
class Application_Form_SubProjecte extends Zend_Form {

    public function init(){  }
    
    public function __construct($options = null) {
        parent::__construct($options);
        $this->ferForm($options);
    }
    
    public function ferForm($options){
        $this->addElement('text', 'subproj_nom', array(
            'label' => 'Nom de la sub projecte:',
            'required' => true,
        ));
        
        $this->addElement('select', 'proj_id', array(
            'label' => 'Projecte:'
        ));
        
        foreach ($options as $x){
           $arrayLst = array( $x['id'] => $x['nom'] );
        }
              
        
        $this->getElement('proj_id')->setMultiOptions( $arrayLst );
        
        $this->addElement('submit', 'submit', array( 
            'ignore'   => true, 
            'label'    => 'Guardar', 
            ));  
    }
    
}

Y tengo la vista:
Código:
<fieldset><legend>Inserir nou subprojecte</legend><br />
    <?php
        $form_proj = new Application_Form_SubProjecte($this->proj);
        $projmod = new Application_Model_DbTable_SubProjecteModel();
        echo $form_proj; 
    ?>
</fieldset>
  #2 (permalink)  
Antiguo 12/03/2012, 17:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: desplegable con ZEND

La sintaxís correcta para agregar elementos a un array es:
Código PHP:
Ver original
  1. $array = array();
  2. $array[] = $nuevoelemento
  3. // o
  4. $array[$foo] = $nuevoelemento

Al tu hacer esto:
Código PHP:
Ver original
  1. foreach ($options as $x){
  2.      $arrayLst = array( $x['id'] => $x['nom'] );
  3. }

Sobreescribes en cada vuelta tu lista.

Saludos.
  #3 (permalink)  
Antiguo 12/03/2012, 17:18
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: desplegable con ZEND

El caso es que tendría que hacer un array asociativo.
Se debería hacer de todas formas con un bucle, verdad?

Código:
$array = array();
foreach ($options as $x){
   //  $arrayLst = array( $x['id'] => $x['nom'] );
   $array[$foo] = $x['id'] => $x['nom'];  ??
}
  #4 (permalink)  
Antiguo 12/03/2012, 17:22
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 21 años, 1 mes
Puntos: 24
Respuesta: desplegable con ZEND

Ademas de lo que te indica GatorV me parece que tienes codigo de mas, del controlador pasas a la vista y de la vista al formulario, deberías pasarle los datos al formulario directamente en el controlador.

El foreach con $option tambien me parece inncesesario, hace mucho q no uso zend pero si no recuerdo mal era fetchAll()->toArray()
  #5 (permalink)  
Antiguo 12/03/2012, 17:35
Avatar de luna690  
Fecha de Ingreso: marzo-2012
Ubicación: Barcelona
Mensajes: 61
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: desplegable con ZEND

Tal como lo dices, sería algo parecido a esto:
Código:
$this->addElement('select', 'proj_id', array(
            'label' => 'Projecte:'
        ));
        $this->getElement('proj_id')->setMultiOptions(  $options->toArray() );
Bien bien, va mejorando, gracias!
Pero ahora me sale en el desplegable:
0
id
nombre
Descripcion
1
id
nombre
Descripcion
2
id
nombre
Descripcion
  #6 (permalink)  
Antiguo 12/03/2012, 19:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: desplegable con ZEND

Tienes que hacerlo así:
Código PHP:
Ver original
  1. $array = array();
  2. foreach ($options as $x){
  3.    //  $arrayLst = array( $x['id'] => $x['nom'] );
  4.    $array[$x['id']] = $x['nom'];
  5. }

Por favor revisa un tutorial de PHP básico, ya que el manejo de arrays es algo sencillo.

Saludos.

Etiquetas: $this->addelement, desplegable, fetchall, select, setmultioptions
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:48.