Ver Mensaje Individual
  #7 (permalink)  
Antiguo 27/05/2011, 10:58
Avatar de rfadgrmm
rfadgrmm
 
Fecha de Ingreso: junio-2009
Mensajes: 74
Antigüedad: 14 años, 10 meses
Puntos: 1
Pregunta Respuesta: Jquery - Combos Multiples

Continuación: archivo bin/class.selector.servicios.php
Lo invoco para que cambie los valores de cada combo. Es invocado en mods/cambio.servicios.php y en mods/combos.cambio.servicios.php

Código PHP:
<?php
    
class SelectorProgramaServicios {
        
        public 
$seleccion 0;
        public 
$programa 0;
        public 
$origen 0;
        
        public 
$datos = array();
        public 
$bases = array();
        
        
//SERVICIO BASE...
        
public function ServicioBase($cn) {
            
            
$origen $this->origen;
            
            switch (
$origen) {
                case 
1:
                    
$this->ProgramaServicio($cn);
                    break;
                default:
                    
$this->Proveedor($cn);
                    
$this->Ciudad($cn);
                    
$this->TipoServicio($cn);
                    
$this->CategoriaServicio($cn);
                    
$this->Servicio($cn);
                    
$this->Acomodaciones($cn);
                    break;
            }
            
            return 
$this->datos;
        }
        
        
//SELECCION DE DATOS DEL SERVICIO...
        
public function Selecciones($cn) {
            
            
$seleccion $this->seleccion;
            
            switch (
$seleccion) {
                case 
1:
                    
$this->Ciudad($cn);
                    
$this->TipoServicio($cn);
                    
$this->CategoriaServicio($cn);
                    
$this->Servicio($cn);
                    
$this->Acomodaciones($cn);
                    break;
                case 
2:
                    
$this->TipoServicio($cn);
                    
$this->CategoriaServicio($cn);
                    
$this->Servicio($cn);
                    
$this->Acomodaciones($cn);
                    break;
                case 
3:
                    
$this->CategoriaServicio($cn);
                    
$this->Servicio($cn);
                    
$this->Acomodaciones($cn);
                    break;
                case 
4:
                    
$this->Servicio($cn);
                    
$this->Acomodaciones($cn);
                    break;
                case 
5:
                    
$this->Acomodaciones($cn);
                    break;
            }
            
            return 
$this->datos;
        }
        
        
//PROVEEDOR...
        
private function Proveedor($cn) {
            
            
$datos $this->datos;
            
$origen $this->origen;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            switch (
$origen) {
                case 
1:
                    
$limite "AND s.tiposervicio NOT IN (2)";
                    break;
                default:
                    
$limite "";
                    break;
            }
            
$bloques = array(
                
=> "SELECT DISTINCT p.id AS id",
                
=> "FROM proveedores p INNER JOIN servicios s ON (s.proveedor = p.id)",
                
=> "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND s.eliminado = 0",
                
=> "{$limite}",
                
=> "ORDER BY p.nombrecomercial LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["Proveedor"] = $ma["id"];
            }
            
$ma "";
            
mysql_free_result($rs);
            
            
$this->datos $datos;
        }
        
        
//CIUDAD...
        
private function Ciudad($cn) {
            
            
$datos $this->datos;
            
$origen $this->origen;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            switch (
$origen) {
                case 
1:
                    
$limite "AND s.tiposervicio NOT IN (2)";
                    break;
                default:
                    
$limite "";
                    break;
            }
            
$bloques = array(
                
=> "SELECT DISTINCT c.id AS id",
                
=> "FROM ciudades c INNER JOIN servicios s ON (s.ciudad = c.id)",
                
=> "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1",
                
=> "AND s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
                
=> "{$limite}",
                
=> "ORDER BY c.nombre LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["Ciudad"] = $ma["id"];
            }
            
$ma "";
            
mysql_free_result($rs);
            
            
$this->datos $datos;
        }
        
        
//TIPO DE SERVICIO...
        
private function TipoServicio($cn) {
            
            
$datos $this->datos;
            
$origen $this->origen;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            switch (
$origen) {
                case 
1:
                    
$limite "AND ts.id NOT IN (2)";
                    break;
                default:
                    
$limite "";
                    break;
            }
            
$bloques = array(
                
=> "SELECT DISTINCT ts.id AS id",
                
=> "FROM tiposservicio ts INNER JOIN servicios s ON (s.tiposervicio = ts.id)",
                
=> "INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND",
                
=> "s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]} AND",
                
=> "s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
                
=> "{$limite}",
                
=> "ORDER BY ts.nombre LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["TipoServicio"] = $ma["id"];
            }
            
$ma "";
            
mysql_free_result($rs);
            
            
$this->datos $datos;
        }
        
        
//CATEGORIA DEL SERVICIO...
        
private function CategoriaServicio($cn) {
            
            
$datos $this->datos;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            
$bloques = array(
                
=> "SELECT DISTINCT cs.id AS id FROM categoriasservicio cs",
                
=> "INNER JOIN servicios s ON (s.categoriaservicio = cs.id) INNER JOIN tarifarios t ON (s.id = t.servicio)",
                
=> "WHERE s.estado = 1 AND s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
                
=> "AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]} AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]}",
                
=> "ORDER BY cs.id DESC LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["CategoriaServicio"] = $ma["id"];
            }
            
$ma "";
            
mysql_free_result($rs);
            if (
$datos["Servicios"][$PVSID]["CategoriaServicio"]) {
                
//TODO OK...
            
} else {
                
$datos["Servicios"][$PVSID]["CategoriaServicio"] = 0;
            }

            
$this->datos $datos;
        }
        
        
//SERVICIO...
        
private function Servicio($cn) {
            
            
$datos $this->datos;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            
$bloques = array(
                
=> "SELECT DISTINCT s.id AS id, s.valorservicio AS valorservicio, s.precioobligatorio AS obligatorio",
                
=> "FROM servicios s INNER JOIN tarifarios t ON (s.id = t.servicio) WHERE s.estado = 1 AND",
                
=> "s.eliminado = 0 AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]}",
                
=> "AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
                
=> "AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]}",
                
=> "AND s.categoriaservicio = {$datos["Servicios"][$PVSID]["CategoriaServicio"]}",
                
=> "ORDER BY s.descripcion LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["Servicio"] = $ma["id"];
                
$datos["Servicios"][$PVSID]["ValorServicio"] = $ma["valorservicio"];
                
$datos["Servicios"][$PVSID]["Obligatorio"] = $ma["obligatorio"];
            }
            
$ma "";
            
mysql_free_result($rs);
            
            
$this->datos $datos;
        }
        
        
//HABITACION / ACOMODACION...
        
private function Acomodaciones($cn) {
            
            
$datos $this->datos;
            
            
$llaves array_keys($datos["Servicios"]);
            foreach (
$llaves as $llave) {
                
$PVSID $llave;
            }
            
            
$bloques = array(
                
=> "SELECT DISTINCT ac.id AS id FROM acomodaciones ac INNER JOIN tarifarios t",
                
=> "ON (t.acomodacion = ac.id) INNER JOIN servicios s ON (t.servicio = s.id) WHERE s.estado = 1 AND s.eliminado = 0",
                
=> "AND s.proveedor = {$datos["Servicios"][$PVSID]["Proveedor"]} AND s.ciudad = {$datos["Servicios"][$PVSID]["Ciudad"]}",
                
=> "AND s.tiposervicio = {$datos["Servicios"][$PVSID]["TipoServicio"]} AND s.categoriaservicio = {$datos["Servicios"][$PVSID]["CategoriaServicio"]}",
                
=> "AND s.id = {$datos["Servicios"][$PVSID]["Servicio"]} ORDER BY ac.nombre LIMIT 1"
            
);
            
$sql implode(" "$bloques);
            
$rs mysql_query($sql$cn);
            while (
$ma mysql_fetch_array($rs)) {
                
$datos["Servicios"][$PVSID]["Acomodacion"] = $ma["id"];
            }
            
$ma "";
            
mysql_free_result($rs);
            
            
$this->datos $datos;
        }
    }
?>
Bueno, después de haber publicado todos los archivos necesarios, el punto es que al llamar a la funcion $("#lb_proveedor").change() en JQuery, lo hace bien, pero solo lo hace una vez, lo mismo para con $("#lb_ciudad").change(), basta que se invoque a cualquiera de los dos, ya no vuelve a ejecutarse el $.post. Todo eso es desde servicios.php. El resultado del JQuery se imprime en un div de nombre "frm_servicios".

No completé el resto de los eventos para cada combo, ya que si funciona una sola vez, es que hay algo que está mal. Agradesco toda respuesta de antemano a mi consulta...

Saludos...
__________________
"Viajando en el espacio profundo, de nova en nova, y sorteando a veces uno que otro agujero negro..." Peru@D