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

Zend select's dependientes

Estas en el tema de Zend select's dependientes en el foro de Zend en Foros del Web. Que tal? tengo un par de dudas con forms. 1 necesito habilitar o deshabilitar un select con respecto a lo seleccionado en un radiolist. 2. ...
  #1 (permalink)  
Antiguo 04/10/2010, 11:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Zend select's dependientes

Que tal?

tengo un par de dudas con forms.

1 necesito habilitar o deshabilitar un select con respecto a lo seleccionado en un radiolist.

2. ligar unos selects.

se que son cuestiones mas o menos basicas en php, pero me he roto la cabeza al hacerlo con zend, y querer ademas hacerlo de la mejor manera.

desde ya, mil gracias
  #2 (permalink)  
Antiguo 04/10/2010, 12:47
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

La manera de hacer eso a traves de javascript, si o hicistes desde Zend_Form, podes agregar un atributo onchange=¨Sentencia javascript¨ al elemento radio list

U otra forma es, en la página donde impirmis el form hacer hacer javascript

Lo otro, si ligar quiere decir que los datos de un elemento select dependen de otro, lo que podes hacer es de la misma forma, agregando un atributo onchange y hacer una llamada de AJAX para recuperar los datos

Ejemplo:
$element->setAttrib('onchange', 'jsFunction();');
Donde "jsFunction();" es la funcion javascript que se va a llamar cuando se realice el cambio

Última edición por lalolerena; 04/10/2010 a las 12:59
  #3 (permalink)  
Antiguo 04/10/2010, 16:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

Aun soy muy neofito en esto.

la contruccion la tengo en un modelo.
ahi mismo debo de construir mi funcion javascript?
o lo debo de cachar y regresar del controlador?

me costo un par de vueltas, pero ya tengo Dojo, tampoco se usarlo, pero se que espara esto, alguna luz??

nuevamente gracias
  #4 (permalink)  
Antiguo 04/10/2010, 18:34
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Primero que nada, como recomendacion para utilizar un framework de javascript te recomiendo que uses jquery, es muy bueno y facil de aprender

depues con respecto a lo otro:

desde una clase Zend_Form
vos creas el elemento:
//departamento
$elemento = new Zend_Form_Element_Select('IdElemento');
$elemento->setLabel('Elemento');
//Agregas un atributo onchange y como segundo parametro la funcion
$elemento->setAttrib('onchange','[funcion]');
$departamento->setMultiOptions($subelementos);
$form->addElement($elemento);



La otra es en la vista, donde vos mostras el formulario, haciendo:
<script type="text/javascript">
Aqui tu realizas el comando, llamandolo a traves del Id del elemento, en este caso IdElemento
</script>
  #5 (permalink)  
Antiguo 05/10/2010, 07:49
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

gracias por el tiempo y la paciencia.

antes de decir que Zend es del demonio, mejor admito que soy medio lento pa entender (solo a veces)

tengo esto en mi modelo
Código PHP:
        $anio_inicio = new Zend_Form_Element_Select('anio_inicio');
        
$anio_inicio->setLabel('Año Inicio:')
                    ->
setRequired(true)
                                ->
setMultiOptions(array('2010'=>'2010','2009'=>'2009','2008'=>'2008','2007'=>'2007'))
                    ->
onchange Seleccionar($this); 
y cree un js, que invoco en el layout

Código PHP:
 function Seleccionar(combo){
      var 
indice combo.selectedIndex;
      var 
valor combo.options[combo.selectedIndex].text;
      
alert(indice);
      
alert(valor);
      
      
//Guardamos en un hidden
      
document.getElementById('<%=HiddenField1.ClientId%>').value valor;
  } 
pero me dice que la funcion seleccionar no existe, obviamente esoty haciendo algo mal, pero no se que.

No estoy tan inutil ni en php ni javascript, pero al hacerlo de la forma Zend, me pierdo un poco. :$:$

mil gracias
  #6 (permalink)  
Antiguo 05/10/2010, 08:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Zend select's dependientes

Ya te lo comentaron más arriba:
Código PHP:
Ver original
  1. ->setAttrib('onchange','Seleccionar(this)');

Saludos.
  #7 (permalink)  
Antiguo 05/10/2010, 09:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

Mas que excelente !! :D:D

ya estoy mas cerca gracias a uds!!

bueno, ya tengo el valor de mi primer combo, como se lo paso de regreso a mi modelo, para que me genere el listado del segundo combo. o se lo tengo que pasar al form y de ahi al modelo??


nuevamente gracias
  #8 (permalink)  
Antiguo 05/10/2010, 11:09
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Eso lo deberías de hacer a traves de AJAX en la función Seleccionar(combo), donde combo es el valor del select que tiene la funcion de onchange y el resultado enviado via ajax es lo que injectas en el select dependiente.
  #9 (permalink)  
Antiguo 05/10/2010, 11:15
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Sinceramente te digo, aprende a utilizar jQuery
[URL="http://jquery.com"]http://jquery.com[/URL]

Pequeño manual interesante de uso:
[URL="http://visualjquery.com"]http://visualjquery.com[/URL]

En este framework, ya pronto como utilizar ajax, formas sencillas de selector de elementos a traves de Id.

Dedicale un día a aprender a utilizarlo, se te va a hacer todo más sencillo
  #10 (permalink)  
Antiguo 05/10/2010, 11:21
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

:(:(

y eso como lo haria??

de ser posible y no estar molestando en el foro con preguntas que pueden resultar obvias, tendran un link de ejemplo.
  #11 (permalink)  
Antiguo 05/10/2010, 11:33
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Entra aquí y tenes ejemplo de como hacer, copia los codigos y hacele los retoques que creas necesario para que cumplan la funcion que vos queres

http://www.formatoweb.com.ar/ajax/select_dependientes.php
  #12 (permalink)  
Antiguo 05/10/2010, 14:04
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

wow!!!

mas que perfecto!!

muchas gracias :D:D:D
  #13 (permalink)  
Antiguo 05/10/2010, 15:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

Se que ya me lo dieron todo peladito y en la boca como dicen en mi publo, jejejeje


pero tengo aun problema, me cuesta un poco entender y aun mas explicarlo, en fin...

tengo mi clase y funcion que estoy agarrando como modelo

Código PHP:
class DatosBase 
{
    protected 
$_razonsocial 'razon_social';
    protected 
$_empresa 'empresa';    
   
    public function 
getRazonsocialList()
    {
        
$this->_db3 Zend_Registry::get('db3');
        
$select  $this->_db3->select()
                            ->
from($this->_razonsocial,
                            array(
'key' => 'id','value' => 'nombre'))
                          
                            ->
order('nombre');
        
$result $this->_db3->fetchPairs($select);
        return 
$result;
    }

#de aqui agarro la lista para llenar el segunlo combo    
    
public function getEmpresasList()
    {
        
$this->_db3 Zend_Registry::get('db3');
        
$select  $this->_db3->select()
                            ->
from($this->_empresa,
                            array(
'key' => 'id_uname','value' => 'nombre'))
                            ->
where('id_razon_social = ?','1')
#entiendo que debo de poner aqui una variable al llamar al get empresasList
        
$result $this->_db3->fetchPairs($select);
        return 
$result;
    }
    

pero estas listas las llamo en el __construct de mi form
en el link que me pasaste con el ejemplo y en todos lado donde he buscado, los valores del ajax los pasan por POST o bien por GET. y ahi es donde no se como pasar el valor seleccionado

Todo mi form lo mando al final en un post, ¿puedo llamar por get el form y con el valor que recibo modificar el __construct?

gracias :d
  #14 (permalink)  
Antiguo 05/10/2010, 17:16
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Primero, creo que en la clase le deberías de modificar la funcion getEmpresasList() por:

public function getEmpresasList($razon_social = 1)
{
$this->_db3 = Zend_Registry::get('db3');
$select = $this->_db3->select()
->from($this->_empresa,
array('key' => 'id_uname','value' => 'nombre'))
->where('id_razon_social = ?', $razon_social)
#entiendo que debo de poner aqui una variable al llamar al get empresasList
$result = $this->_db3->fetchPairs($select);
return $result;
}
Con esto varias el $result, segun la razon social que tengas.

---------------------------------------------------------------------------------------------------------------------------

Segun lo que logro entender, no sabes como agarrar lo datos enviados vía ajax???

Primero, en el enlace que te mando podes descargar los ejemplos y lo trabajas desde localhost. Tenes los archivos e inspeccionas.

Despues:
Generas un action dentro del controller que vos creas necesario, mas o menos como te lo paso

function ajaxAction()
{
//Estos dos desactivan que se muestre en la vista, osea no necesita una archivo phtml
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout->disableLayout();


//Esto consulta si se esta accediendo a esta accediendo a esta accion vía ajax
if (!$this->getRequest()->isXmlHttpRequest())
{
//En caso negativo, redirecciona a una pagina
$this->_redirect([tu pagina]);
}

//Esto consulta si los datos son enviados por POST, podes cambiarlo por $this->_request->isGet()
if (!$this->_request->isPost())
{
//En caso negativo, se ejecuta algo
echo 'Los datos no son POST';
return;
}

//Llamamos a tu clase
$DatosBase = new DatosBase();

//Variable enviado desde ajax del elemento select
$razon_social = $this->_getParam('razon_social');

//Adquirimos los datos de las empresa para la razon social enviada por ajax
$result = $DatosBase->getEmpresasList($razon_social);

//Creamos el elemento a crearse select
//El id lo cambias al que estaba
$selectHtml = '<select id="empresa">';
//Recorremos la variable $result
foreach($result as $valor)
{
//Aqui realizas los option como correspoden, con los valores de tu BD
$selectHtml .= '<option value="'.$valor['empresa_id'].'">'.$valor['empresa_nombre'].'</option>'
}
//Cerramos el elemento a crearse select
$selectHtml .= '</select>';

//Imprimimos el resultado del select
echo $selectHtml;

//Atraves del echo es como vía ajax se toman los datos
//el return no sirve para ajax
}


Bueno, espero que esto solucione parte de tu duda

Otra cosa, si usas en el localhost firefox para trabajar te recomiendo que te bajes el firebug (complemento del navegador), es una solucion para los programadores
  #15 (permalink)  
Antiguo 07/10/2010, 07:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

la verdad es que ya tengo pena de preguntar, pero mi desesperacion pudo mas que el orgullo, y al parecer que el buen investigador :(

tengo mi script
Código PHP:
function cargaContenido()
{
    var 
opcionSeleccionada=$("#razonSocial").val();
    var 
idSelectDestino='Empresas';
    var 
selectDestino=document.getElementById(idSelectDestino);
    var 
datastring'opcionSeleccionada='+opcionSeleccionada;
             $.
ajax(  
                     {  
                         
asynctrue,  
                         
type'GET',  
                         
url'http://localhost/sicat2/site/ajax',  
                         
datadatastring,
                         
dataTypeString'text',
                         
beforeSend: function(data){
                                   $(
'#selectDestino').html('<label>Cargando...</label>');
                                     
selectDestino.disabled=true;
                         },  
                         
success: function(requestData){  
                                    
                         },  
                         
error: function(requestDatastrErrorstrTipoError){  
                             
                         },  
                         
complete: function(requestDataexito){
                             
selectDestino.disabled=false;
                         }  
                     });  
    


la funcion de mi controlador
Código PHP:
    function ajaxAction()
    {
        
$this->_helper->viewRenderer->setNoRender();
        
$this->_helper->layout->disableLayout();
        if (!
$this->getRequest()->isXmlHttpRequest())
        {
            
$this->_redirect('site/detgaratias');
        }
            
$datos = new DatosBase();
            
$razon_social $this->_getParam('opcionSeleccionada');
            
$selectHtml '<select id="Empresas">';
            
$empresas_list $datos->getEmpresasList($razon_social);
            foreach(
$empresas_list as $key=>$value)
            {
                    
$selectHtml .= "<option value=\"$key\">$value</option>";
            }
            
$selectHtml .= '</select>';
            echo 
$selectHtml;
     
    } 
y mi clase modelo

Código PHP:
    function getEmpresasList($razonsocial)
    {
        print(
$razonsocial);
        
$this->_db3 Zend_Registry::get('db3');
        
$select  $this->_db3->select()
                            ->
from($this->_empresa,
                            array(
'key' => 'id_uname','value' => 'nombre'))
                            ->
where('id_razon_social = ?',$razonsocial)
        
$result $this->_db3->fetchPairs($select);
        return 
$result;
    } 
pero no puedo hacer llegar mi variable a la accion del controlador.

espero puedan ayudarme.

gracias.
  #16 (permalink)  
Antiguo 07/10/2010, 10:07
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Zend select's dependientes

Primer consulta. bajastes el componente de firebug de firefox??? Es una muy buena herramienta para los programadores. Ahi tenes la consola que podes ver las peticiones ajax y las respuestas. Empeza por ver que pasa en el firebug cuando haces la peticion ajax

----------------------------------------------------------------------------------------------------

Verifica que las direccion "http://localhost/sicat2/site/ajax" esté bien dirigida.

----------------------------------------------------------------------------------------------------

Consulta, que versión del Zend_Framework utilizas??
URL = 'http://localhost/sicat2/site/ajax'
La estructura sería así???:
module: default
controller: site
action: ajax
----------------------------------------------------------------------------------------------------

Código Javascript:
Ver original
  1. function cargaContenido()
  2. {
  3.     var opcionSeleccionada=$("#razonSocial").val();
  4.     var selectDestino=$('#Empresas');
  5.              $.ajax(  
  6.                      {  
  7.                          async: true,  
  8.                          type: 'GET',  
  9.                          url: 'http://localhost/sicat2/site/ajax',  
  10.                          data: datastring,
  11.                          dataTypeString: 'text',
  12.                          beforeSend: function(data){
  13.                                    selectDestino.html('<label>Cargando...</label>');
  14.                                      selectDestino.disabled=true;
  15.                          },  
  16.                          success: function(requestData){  
  17.                                     selectDestino.html(requestData);
  18.                                     selectDestino.disabled=false;
  19.                          },  
  20.                          error: function(requestData, strError, strTipoError){  
  21.                              
  22.                          }  
  23.                      });  
  24.    
  25. }

----------------------------------------------------------------------------------------------------

Código PHP:
Ver original
  1. function ajaxAction()
  2.     {
  3.         $this->_helper->viewRenderer->setNoRender();
  4.         $this->_helper->layout->disableLayout();
  5.         if (!$this->getRequest()->isXmlHttpRequest())
  6.         {
  7.             $this->_redirect('site/detgaratias');
  8.         }
  9.             $datos = new DatosBase();
  10.             $razon_social = $this->_getParam('opcionSeleccionada');
  11.             $selectHtml = '';
  12.             $empresas_list = $datos->getEmpresasList($razon_social);
  13.             foreach($empresas_list as $key=>$value)
  14.             {
  15.                     $selectHtml .= "<option value=\"$key\">$value</option>";
  16.             }
  17.             echo $selectHtml;
  18.      
  19.     }
En el PHP que genera el select le saque las etiquetas <select>

----------------------------------------------------------------------------------------------------

Descarga el Componente de firebug y chequea las peticiones ajax desde la consola, si es que las realiza

Última edición por lalolerena; 07/10/2010 a las 10:20
  #17 (permalink)  
Antiguo 07/10/2010, 11:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

Que tal?? muchas gracias por la paciencia.


las peticiones de ajax ya las responde bien, pero no esta pintando el "nuevo" select.
esto lo vi en la consola, la respuesta si viene lo que espero, pero no aparace en pantalla.
probe poniendo y quitando las etiquetes de select, pero nada.

Última edición por harryems; 07/10/2010 a las 11:24
  #18 (permalink)  
Antiguo 07/10/2010, 11:40
 
Fecha de Ingreso: septiembre-2010
Mensajes: 113
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Zend select's dependientes

Listo!!!!!!!!! muchisimas gracias, faltaba modificar el script.

un millon de gracias :D:D
  #19 (permalink)  
Antiguo 19/10/2010, 08:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Tema movido desde PHP orientado a objetos a PHP

Etiquetas: ajax, select
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 11:43.