Documentación GVHIDRA 3.1.5
Referencia del Archivo function.CWLista.php

Ir al código fuente de este archivo.

Funciones

 smarty_function_CWLista ($params, &$smarty)

Documentación de las funciones

smarty_function_CWLista ( params,
&$  smarty 
)

Aclaración de prefijos utilizados para el id de los campos ins -> id para modo inserción cam -> lista visible en modo edición ant -> lista oculta para poder recuperarla lcam -> campo de texto con el valor seleccionada, anterior

Definición en la línea 42 del archivo function.CWLista.php.

{
        $igepSmarty = new IgepSmarty();
        
        // LECTURA DE VALORES DE LA PILA //
        //Puntero a la pila de etiquetas que contiene a CWFila 
        $punteroPilaPadre = count($smarty->_tag_stack)-1;
        $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0];
        //Puntero a la etiqueta Abuelo
        $punteroPilaAbuelo = $punteroPilaPadre - 1;             
        $CWAbuelo = $smarty->_tag_stack[$punteroPilaAbuelo][0];
        
        $CWSelector = false;
        if ($CWPadre == "CWSelector") $CWSelector = true; 
        
        //Si el padre es un CWSolapa, tenemos que movernos uno más arriba para ignorarlo
        if (($CWPadre == "CWSelector") && ($CWAbuelo == "CWSolapa"))
        {               
                $punteroPilaPadre = count($smarty->_tag_stack)-3;
                $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0];
                $punteroPilaAbuelo = $punteroPilaPadre - 1;
                $CWAbuelo = $smarty->_tag_stack[$punteroPilaAbuelo][0];
        }
        //Si el padre es un CWSolapa, tenemos que movernos uno más arriba para ignorarlo
        if (($CWPadre == "CWSelector") || ($CWPadre == "CWSolapa"))
        {               
                $punteroPilaPadre = count($smarty->_tag_stack)-2;
                $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0];
                $punteroPilaAbuelo = $punteroPilaPadre - 1;
                $CWAbuelo = $smarty->_tag_stack[$punteroPilaAbuelo][0];
        }               

        if ($CWAbuelo == 'CWContenedor')  //Estamos en un panel de búsqueda
        {
                $punteroPilaPanel = $punteroPilaAbuelo - 1;
        }
        else
        {
                $punteroPilaPanel = $punteroPilaAbuelo - 2;
        }
        $idPanel = $smarty->_tag_stack[$punteroPilaPanel][1]['id'];
        
        // CODIGO NECESARIO PARA CADA COMPONENTE //
        // Primero defino el nombre del componente.
        $n_comp="CWLista";      
        
        // Incrementamos  el número de componentes CWCampoTexto
        $num = $smarty->igepPlugin->registrarInstancia($n_comp);
        
        // Tiene nombre? no tiene? Le asigno uno en ese caso 
        if($params['nombre']) 
        {
                $idCampo=$params['nombre'];
                $nameCampo = $params['nombre'];
                $idRadio = $idCampo;
                $nameRadio = $nameCampo;
        } 
        else // Por defecto, nombre plugin y número de instancia dl componente 
        {               
                $idCampo=$n_comp.$num;
                $nameCampo=$n_comp.$num;
                $idRadio = $idCampo;  
                $nameRadio = $nameCampo;
        }       
                
        //Editable: 'true' 'false' y 'nuevo'
        $editable = 'true';     
        if (isset($params['editable']))
        {
                $editable = strtolower(trim($params['editable']));              
                if (
                        ($editable == 'false') 
                        || ($editable == 'falso')
                        || ($editable == 'no')                  
                        || ($editable === false)
                )
                {
                        $editable = 'false';
                }               
                else if (
                        ($editable == 'true') 
                        || ($editable == 'si')
                        || ($editable == 'verdad')                      
                        || ($editable === true)
                )
                {
                        $editable = 'true';
                }
                else if (
                        ($editable == 'nuevo') 
                        || ($editable == 'insertar')
                )
                {
                        $editable = 'nuevo';
                }
                else 
                        $editable = 'true';
        }//Fin editable 
                
        $obligatorio = false;
        if (
                (isset($params['obligatorio']))
                && 
                (
                        ($params['obligatorio'] === true) || (strtolower(trim($params['obligatorio'])) =='true')
                )
        )
        {
                $obligatorio = true;
        }
        
        //Número máximo de carácteres a mostrar en la descripción de la lista
        //$numCaracteres=50;
        $html_numCaracteres = '';
        if($params['numCaracteres'])
        {
                $html_numCaracteres = "style='width:".$params['numCaracteres']."em;'";          
        }
        
        //Visibilidad inicial
        $visible = true;
        if (
                (isset($params['visible']))             
                &&
                (
                        (strtolower(trim($params['visible'])) == 'false') 
                        || (strtolower(trim($params['visible'])) == 'falso')
                        || (strtolower(trim($params['visible'])) == 'no')
                        || (strtolower(trim($params['visible'])) == 'oculto')
                        || (strtolower(trim($params['visible'])) == 'invisible')
                        || ($params['visible'] === false)
                )
        )
        {
                $visible = false;
        }
        
//Tratamiento de etiquetas asociadas
        $textoAsociado = '';
        $textoAsociadoColumna = '';
        $mostrarTextoAsociado = true;
        //Si hay etiqueta asociada...
        if (
                (isset($params['textoAsociado'])) 
                && (trim($params['textoAsociado']) !='')
                )
        {       
                $textoAsociado = $params['textoAsociado'].':';
                $textoAsociadoColumna = $params['textoAsociado'];
                $mostrarTextoAsociado = true;
        }
        else
        {
                $textoAsociado = ucfirst($idCampo).":";
//              $textoAsociadoColumna = ucfirst($idCampo);
                $mostrarTextoAsociado = false;
        }
        
        if (isset($params['mostrarTextoAsociado']))
        {
                switch (trim(strtolower($params['mostrarTextoAsociado'])))
                {
                        case 'no':
                        case 'false':
                                $mostrarTextoAsociado = false;  
                        break;
                        case 'si':
                        case 'true':
                                $mostrarTextoAsociado = true;
                        break;
                }//Fin switch
        }//Fin params 
        
        if ($mostrarTextoAsociado == true)
                $disposicionTextoAsociado = 'display:inline; ';
        else
                $disposicionTextoAsociado = 'display:none; ';
                
        //El vector de datos será un array asociativo de tres columna (valor, descripción, seleccionado)
        $v_datos = array();
        $v_lista[0] = array();  
        $v_lista[0]['valor'] = '';
        $v_lista[0]['descripcion'] = '';
        $v_datos[0]['seleccionado'] = '';       
        $v_datos[0]['lista'] = $v_lista;        
        if($params['datos'])
        {
                $v_datos = $params['datos'];
        }

        if(isset($params['tabindex'])) 
        {
                $valorIndex = $params['tabindex'];
                if ($editable == 'false')
                        $valorIndex = abs($params['tabindex'])*(-1);
                $tabindex="tabindex='".$valorIndex."'";
        } 
        else 
        {
                if ($editable == 'false')
                        $tabindex="tabindex='-1'";
                else
                        $tabindex="";
        }
        
        //Número de líneas a mostrar en el desplegable
        $size = '';
        $radio = 0;
        $multiple = '';

        //Si existe el parámetro radio, en lugar de una lista SELECT generamos un RadioButtom
                
        if (
                (isset($params['dataType']))
                && (is_array($params['dataType']))
                )
        {
                $dataType = $params['dataType'];
                
                //Size
                if (isset($dataType['size']))
                { 
                        $size = " size='".$dataType['size']."'";
                }
                
                //Radio
                if (!empty($dataType['radio']))
                {
                        $radio = 1;     
                }

                //Multiple
                if(isset($dataType['multiple']) and $dataType['multiple']) 
                {                       

                        $multiple = ' multiple ';
                        //Número de líneas a mostrar en el desplegable
                        if ($size != '') 
                                $multiple = $multiple." ".$size;
                        else
                                $multiple = $multiple." size='5' ";
                        
                        $idCampo = $idCampo;
                }
                
                //Required - obligatorio
                if (isset($dataType['required'])) {
                        
                        if (is_bool($dataType['required']))
                                $obligatorio = $dataType['required']; 
                }               
        }
        
        // REVIEW: Vero, repasar el primer parámetro de actualizarElemento
        if($params['actualizaA'])
        {
                $actuoSobrePlugin = $params['actualizaA'];
                $llamadaJS .= $idPanel."_comp.actualizarElemento(this,'".$params['actualizaA']."');";
                $igepSmarty->addAccionEvento("onChange", $llamadaJS);
        }
                
        // -----------------------------------------------------------------------------------------
        // GENERAMOS LOS JS DE COMPROBACIÓN DE ERRORES
        // CUANDO HAY MAS DE UN ERROR PARA EL MISMO EVENTO
        // SE MUESTRA EL QUE MÁS ABAJO ESTE EN ESTE FICHERO
        // -----------------------------------------------------------------------------------------
                
        //inicializacion variables      
        $ini = '';
        $fin = ''; 
        $hiddentxt = '';
        $idFila='';
        $cadHTML='';
        
// PANEL EDICIÓN (Tabla o Registro)
        if (($CWPadre == 'CWFila') || ($CWAbuelo == 'CWFichaEdicion'))
        {
                $iterActual = $smarty->_tag_stack[$punteroPilaPadre][2];
                // Tratamiento del tabindex en una tabla, teniendo en cuenta las filas                  
                if ($CWPadre == 'CWFila')
                {
                        $valorIndex = $iterActual.$valorIndex;  
                        $tabindex = "tabindex='".$valorIndex."'";
                        
                        // TAMAÑO COLUMNAS
                        if ( (isset($params['numCaracteres'])) && ($iterActual == 0) )
                        {
                                // Hay que almacenar el tamaño del campo para poder fijar el ancho de las columnas
                                $smarty->_tag_stack[$punteroPilaAbuelo][6]['sizes'][] = $params['numCaracteres'];
                                $smarty->_tag_stack[$punteroPilaAbuelo][6]['sizes']['total'] += intval($params['numCaracteres']);
                        }
                                                
                }               
                $numRegTotales = count($smarty->_tag_stack[$punteroPilaAbuelo][1]['datos']);
                $funcionJS='';
                $idFila = $smarty->_tag_stack[$punteroPilaAbuelo][1]['id']."_".$iterActual;             

                $estadoFilaJS = '';
                if (($iterActual == 0) && ($CWPadre == "CWFila")) 
                {
                        $estadoFilaJS = $idPanel."_tabla.columnaEstado('".$idCampo."','".$editable."');";
                        $igepSmarty->addPreScript($estadoFilaJS);               
                }
 
                $ini = '';
                $fin = '';
                // Estamos en una TABLA
                if ($CWPadre == 'CWFila')
                {                               
                        $ini = "<td align='center'>\n";
                        $fin = "</td>\n";
                }
                
// --------------                               
// Modo INSERCIÓN
// --------------
                if ($iterActual >= $numRegTotales)
                {
                        $idCampo = 'ins___'.$idCampo.'___'.$idFila;
                        $nameCampo = 'ins___'.$nameCampo.'___'.$idFila;                         
                        $idRadio = 'ins___'.$idRadio;                   
                        $nameRadio = 'ins___'.$nameRadio;                       
                        // id para el campo oculto donde guardaremos el valor anterior
                        $idRadioAnt = str_replace('ins___','ant___',$idRadio); // ant___nomCampo___Form_fila                    
                        $idCampoAnt = str_replace('ins___','lcam___',$idCampo); // lcam___nomCampo___Form_fila
                        $nameCampoAnt = str_replace('ins___','ant___',$nameCampo); // ant___nomCampo___Form_fila
                        $idListaAnt = str_replace('ins___','ant___',$idCampo); // ant___nomCampo___Form_fila
                        //-----------------------------------------     -------------------------------------------------------------------
                        
                        // Se añade el evento onChange para marcar como insertado el registro
                        // TABLA                        
                        if ($CWPadre == 'CWFila')
                        {
                                //SI: mi padre es una fila, NO soy oculto y estoy
                                //en la primera iteración ENTONCES: tengo que poner título a la columna
                                //Y utilizar mi parámetro nombre para añadir una referencia                                                             
                                if (($params['oculto'] != 'true') && ($iterActual == 0))
                                {       
                                        $referencia = $params['nombre'];                                                        
                                        $v_titulo = $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas'];                              
                                        $v_titulo[$referencia] = $textoAsociadoColumna;
                                        $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas'] = $v_titulo;
                                }       
                                $campoEstadoFila = 'est_'.$idFila;
                                $llamadaJS = $idPanel."_tabla.cambiarEstado('insertada','this','".$campoEstadoFila."');";
                                $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);
                        }
                        // REGISTRO                     
                        if ($CWPadre == 'CWFicha')
                        {
                                $campoEstadoFila = 'est_'.$idFila;
                                $llamadaJS = "document.getElementById('".$campoEstadoFila."').value='insertada';";
                                $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);
                        }
                        
                }
// --------------------                         
// FIN: Modo INSERCIÓN
// --------------------         
                else 
                {               
// --------------                               
// Modo EDICIÓN
// --------------
                        $idCampo = 'cam___'.$idCampo.'___'.$idFila;
                        $nameCampo = 'cam___'.$nameCampo.'___'.$idFila;
                        $idRadio = 'cam___'.$idRadio;
                        $nameRadio = 'cam___'.$nameRadio;                       
                        // id para el campo oculto donde guardaremos el valor anterior
                        $idRadioAnt = str_replace('cam___','ant___',$idRadio); // ant___nomCampo___Form_fila
                        $idCampoAnt = str_replace('cam___','lcam___',$idCampo); // lcam___nomCampo___Form_fila
                        $nameCampoAnt = str_replace('cam___','ant___',$nameCampo); // ant___nomCampo___Form_fila
                        $idListaAnt = str_replace('cam___','ant___',$idCampo); // ant___nomCampo___Form_fila
                        //-----------------------------------------     -------------------------------------------------------------------
                        
                        // TABLA
                        // Se añade el evento onChange para marcar como modificado el registro
                        if ($CWPadre == 'CWFila')
                        {
                                //SI: mi padre es una fila, NO soy oculto y estoy
                                //en la primera iteración ENTONCES: tengo que poner título a la columna
                                //Y utilizar mi parámetro nombre para añadir una referencia                                                             
                                if (($params['oculto'] != 'true') && ($iterActual == 0))
                                {       
                                        $referencia = $params['nombre'];                                                        
                                        $v_titulo = $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas'];                              
                                        $v_titulo[$referencia] = $textoAsociadoColumna;
                                        $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas'] = $v_titulo;
                                }                               
                                
                                $campoEstadoFila = "est_".$idFila;
                                if (($editable != "no") && ($editable != "false"))
                        {
                                        $llamadaJS = $idPanel."_tabla.cambiarEstado('modificada',this,'".$campoEstadoFila."');";
                                        $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);
                        }
                        }
// --------------------                         
// FIN: Modo EDICIÓN
// --------------------
                }               
                // --------------------------------------------------------------------------------------
                // CARGAMOS LOS DATOS DE LA LISTA
                $datosReg = $smarty->_tag_stack[$punteroPilaAbuelo][1]['datos'][$iterActual];           
                
                //Si todo ha ido bien, tendremos un array registro con uno de los atributos multivaluado
                //Asignamos el valor de registro, controlando el PEAR:DB                        
                //Si es la nueva version de PEAR, da igual que sea Postgres que Oracle (columna en minúsculas)
                //$v_datos = $datosReg[$params['nombre']];
                
                if ($iterActual >= $numRegTotales)
                        $v_datos = $params['datos'];
                else
                {
                        $v_datos = null;
                        if (!isset($v_datos)) 
                        {
                                $v_datos = $datosReg[strtolower($params['nombre'])];                            
                        }
                        //Si aqui aun no tiene valor, puede ser Pear "case sensitive" contra Postgres (columna mayúscula/minúsculas)
                        if (!isset($v_datos)) 
                        {
                                $v_datos = $datosReg[$params['nombre']];
                        }
                        //Por último, si aquí tampoco tiene valor, puede ser Pear "case sensitive" contra Oracle (columna mayúsculas)
                        if (!isset($v_datos)) 
                        {
                                $v_datos = $datosReg[strtoupper($params['nombre'])];                            
                        }                       
                        if (!isset($v_datos)) 
                        {
                                $v_datos = array();
                                $v_lista[0]=array();    
                                $v_lista[0]['valor']='';
                                $v_lista[0]['descripcion']='';
                                $v_datos[0]['seleccionado']=''; 
                                $v_datos[0]['lista']=$v_lista;                          
                        }
                }                               
                // Fin del proceso de asignación del valor                              
                // -----------------------------------------------------------------------------------                          
                // -----------------------------------------------------------------------------------
                // ESTILO Y ESTADO DEL CAMPO
                $fondos = '';
                if(isset($datosReg['__gvHidraRowColor']))
                        $fondos = $datosReg['__gvHidraRowColor'];               
                switch($CWPadre) 
                {
                        case 'CWFila':
                                switch($editable)
                                {
                                        case 'true':
                                        case 'si':
                                                $classHTML = " class=\"formularios tablaEdi ".$fondos."\"";
                                                $estadoHTML = " disabled ";
                                        break;
                                        case 'false':
                                        case 'no':
                                                $classHTML = " class=\"formularios tablaNoEdi ".$fondos."\"";
                                                $estadoHTML = " disabled ";
                                        break;
                                        case 'nuevo':
                                                $classHTML = " class=\"formularios tablaNuevo ".$fondos."\"";
                                                $estadoHTML = " disabled";
                                        break;
                                }                       
                        break;
                        
                        case 'CWFicha':
                                switch($editable)
                                {
                                        case 'true':
                                        case 'si':
                                                        if ($smarty->_tag_stack[$punteroPilaAbuelo][1]['accion'] == 'modificar') {
                                                                $classHTML = " class=\"formularios modificable\"";
                                                                $estadoHTML = '';
                                                        }
                                                        else if ($smarty->_tag_stack[$punteroPilaAbuelo][1]['accion'] == 'insertar') {  
                                                                $classHTML = " class=\"formularios editable\"";
                                                                $estadoHTML = ''; 
                                                        }
                                                        else {
                                                                $classHTML = " class=\"formularios editable\"";
                                                                $estadoHTML = " disabled ";
                                                        }
                                        break;
                                        case 'false':
                                        case 'no':
                                                $classHTML = " class=\"formularios noEditable\"";
                                                $estadoHTML = " disabled ";
                                        break;
                                        case 'nuevo':
                                                        // Comprobamos si se vuelve a cargar la plantilla con la acción modificar/insertar, activar los campos
                                                        if ($smarty->_tag_stack[$punteroPilaAbuelo][1]['accion'] == 'modificar') {
                                                                $classHTML = " class=\"formularios nuevo\"";
                                                                $estadoHTML = " disabled ";
                                                                //Pasamos el tabindex a negativo, ya que no será accesible
                                                                $tabindex=" tabindex='-1' ";                                                            
                                                        }
                                                        else if ($smarty->_tag_stack[$punteroPilaAbuelo][1]['accion'] == 'insertar') {
                                                                $classHTML = " class=\"formularios editable\"";
                                                                $estadoHTML = '';
                                                        }
                                                        else {
                                                                $classHTML = " class=\"formularios nuevo\"";
                                                                $estadoHTML = " disabled ";
                                                                //Pasamos el tabindex a negativo, ya que no será accesible
                                                                $tabindex=" tabindex='-1' ";                                                            
                                                        }
                                        break;
                                }
                        break;
                        default:
                                $classHTML = " class=\"formularios editable\"";
                                $estadoHTML = '';
                        break;
                }//Fin switch
                // -----------------------------------------------------------------------------------
                
// FIN: PANEL EDICIÓN (Tabla o Registro)
        }
        
// PANEL BÚSQUEDA
        elseif (($CWPadre == 'CWFicha') && ($CWAbuelo == 'CWContenedor'))
        {               
                if (($editable == 'true') || ($editable == 'si'))
                        $classHTML = " class=\"formularios editable\"";
                else
                {
                        $classHTML = " class=\"formularios noEditable\"";
                        $estadoHTML = " disabled ";
                }               
        }
// FIN: PANEL BÚSQUEDA
                
// ZONA DIBUJO 
        $aperturaCapa ='';
        $cierreCapa = '';
        // VISIBLE/INVISIBLE
        $aperturaCapa = "<span id='IGEPVisible".$idCampo."' style='";
        if ($radio == 1)
        {
                if ($CWAbuelo != 'CWContenedor')
                        $aperturaCapa = "<span id='IGEPVisible".$nameRadio.'___'.$idFila."' style='";
                else
                        $aperturaCapa = "<span id='IGEPVisible".$nameRadio."' style='";
        }

        //Si estamos insertando, las listas/radios no deben verse en las lineas sin activar
        if (($CWAbuelo == 'CWTabla') && ($iterActual >= $numRegTotales))                
        {       
                $aperturaCapa.="visibility:hidden; '>";
        }
        else 
        {
                if ($visible == false)
                {
                        $estiloVisibilidad = 'visibility:hidden;';
                }
                else
                {
                        $estiloVisibilidad = 'visibility:visible;';
                }
                
                $aperturaCapa.="$estiloVisibilidad; '>";        
        }
        $cierreCapa = '</span>';
        
        // DIBUJAMOS
        $cadHTML = $aperturaCapa;

        // DIBUJAMOS
        $cadHTML = $aperturaCapa;
        
        if ($obligatorio == true) $txtAsterisco='*'; 
        else $txtAsterisco='';
        
        if ($CWPadre == 'CWFila')
                $textoAsociado = '';            
        else
                $textoAsociado = "<label style='font-weight: bold; $disposicionTextoAsociado' id='txt".$idPanel."_".$idCampo."' for='".$idCampo."'>".$txtAsterisco.$textoAsociado."</label>\n"; 
        
        if ($mostrarTextoAsociado == true)
                $cadHTML .= $textoAsociado;
        
        $numValores = count($v_datos['lista']);
        $cadOpcion = '';
        if ($radio == 1) 
        {
                $idAux = $idRadio;
                $nameAux = $nameRadio;
                $idAntAux = $idRadioAnt;
                $numValores = count($v_datos['lista']);
        
                // REGISTRO             
                // 08/02/2010 Vero: Para comprobar la modificación pasamos el total de valores y así comprobar si alguno de ellos ha cambiado.  
                if ($CWPadre == 'CWFicha')
                {
                        $campoEstadoFila = 'est_'.$idFila;
                        $llamadaJS .= $idPanel."_comp.comprobarModificacion('".$idAux."___".$idFila."',".$numValores.");";
                        $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);                                
                }
                
                for($i=0; $i < $numValores; $i++)
                {               
                        $value = trim($v_datos['lista'][$i]['valor']);
// Diferente nombre en el 'id' que en el 'name' para seguir manteniendo la funcionalidad de ser excluyentes 
// pero a la vez desde javascript poder acceder a ellos como elementos diferentes del formulario
                        if ($CWAbuelo != 'CWContenedor')
                        {
                                $idCampoAnt = $idAntAux.$i.'___'.$idFila;
                                $idCampo = $idAux.$i.'___'.$idFila;
                                $nameCampo = $nameAux.'___'.$idFila;
                        }
                        else
                        {
                                $idCampoAnt = $idAntAux.$i;
                                $idCampo = $idAux.$i;
                        }
                
                        // REGISTRO                     
//                      if ($CWPadre == 'CWFicha')
//                      {
//                              $campoEstadoFila = 'est_'.$idFila;      
//                              $llamadaJS .= $idPanel."_comp.comprobarModificacion('".$idCampo."');";
//                              $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);                                
//                      }
                        
                        //$cadHTML .= "<label class='formularios' >";
                        $cadHTML .= "<label class='text'>";
                        $cadHTML .= "<input type='radio' name=\"$nameCampo\" id=\"$idCampo\" ".$tabindex;
                        $cadHTML .= $classHTML." ".$estadoHTML;
                        $cadHTML .= " value=\"".$value."\" ";
                        //Si ese es el item seleccionado lo marcamos                    
                        if (trim($v_datos['seleccionado']) == trim($v_datos['lista'][$i]['valor'])) $cadHTML.=" checked ";                              
                        $cadHTML .= $igepSmarty->getAcciones()." />";
                        $cadHTML .= trim($v_datos['lista'][$i]['descripcion']);
                        $cadHTML .= "</label>";
                }
        }
        else
        {
                if ($multiple != '')
                        $nameCampo .= '[]';             

                // REGISTRO                     
                if ($CWPadre == 'CWFicha')
                {
                        $campoEstadoFila = 'est_'.$idFila;      
                        $llamadaJS .= $idPanel."_comp.comprobarModificacion('".$idCampo."');";
                        $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);                                
                }
                
                $cadHTML.="<select name=\"$nameCampo\" id=\"$idCampo\" ".$html_numCaracteres." ".$size." ".$multiple." ".$classHTML." ".$tabindex." ".$estadoHTML." ".$igepSmarty->getAcciones()." >\n";//Abrimos la etiqueta
                        $numValores = count($v_datos['lista']);                 
                        for($i=0; $i < $numValores; $i++)
                        {
                                $cadOpcion.="<option ".$classHTML." ";
                                //Si ese es el item seleccionado lo marcamos                    
                                if (trim($v_datos['seleccionado']) == trim($v_datos['lista'][$i]['valor']))
                                        $cadOpcion.=" selected ";
                                $cadOpcion.="value='".$v_datos['lista'][$i]['valor']."'>".trim($v_datos['lista'][$i]['descripcion'])."</option>";
                        }
                        $cadHTML .= $cadOpcion;
                $cadHTML .= "</select>"; 
        }
        $cadHTML .= $cierreCapa;
        
        // -----------------------------------------------------------------------------------
        // CAMPO OCULTO
        // El campo oculto tendrá el valor seleccionado de la lista visible 
        $hidden = '';
        if ($idCampoAnt != '')
                $valueAnt = $v_datos['seleccionado'];
        
        // RADIO: en el campo oculto me guardo el valor seleccionado
        if ($radio == 1) 
                $hidden = "<input type='hidden' name='".$nameCampoAnt."' ".$classHTML." id='".$nameCampoAnt."' value='".$valueAnt."' />";
        // LISTA: en el oculto me guardo la lista completa con el valor seleccionado
        else 
        {
                // Guardamos el valor anterior y la colección para restaurarla
                $hidden = "<div style='display:none'>";
                if ($multiple != '') // Soy una lista múltiple
                        $hidden.= "<select name='".$idListaAnt."[]' id=\"$idListaAnt\" ".$multiple." ".$size.">";
                else
                        $hidden.= "<select name='".$idListaAnt."' id=\"$idListaAnt\">";
                        
                $cadOpcion='';
                $campoHidden = '';
                
                $numValores = count($v_datos['lista']);                 
                for($i=0; $i < $numValores; $i++)
                {
                        $cadOpcion.="<option ".$classHTML." ";
                        //Si ese es el item seleccionado lo marcamos                    
                        if (trim($v_datos['seleccionado']) == trim($v_datos['lista'][$i]['valor'])) 
                        {       
                                //$campoHidden = "OCULTO NAME: l$nameCampo ID: l$idCampo ";                             
                                $campoHidden.= "<input type='hidden' name='l".$nameCampo."' id='l".$idCampo."' ".$classHTML." value='".$v_datos['lista'][$i]['valor']."' />";
                                $cadOpcion.=" selected ";
                        }
                        $cadOpcion.="value='".$v_datos['lista'][$i]['valor']."'>".trim($v_datos['lista'][$i]['descripcion'])."</option>";
                }
                $hidden .= $cadOpcion."</select>".$campoHidden."</div>";
        }
        // -----------------------------------------------------------------------------------
// FIN: Zona dibujo 

// ZONA COMÚN: Paneles, lista, radios

        // COMPROBACIONES
        // Para la primera iteración en un listado o ficha, o cdo la variable no esté fijada para la búsqueda
        $tipoComprobacionPanel = $smarty->_tag_stack[$punteroPilaPanel][1]['tipoComprobacion'];
        if ( 
                ( ($iterActual == 0) || (!isset($iterActual)) )
                && ( ($obligatorio == true ) && ($tipoComprobacionPanel != 'cambioFoco') )
        ) 
        {
                $script = $idPanel."_comp.addCampo('".$idCampo."');";
                $igepSmarty->addPreScript($script);
        }
        
        // Obligatorio
        if ( (($obligatorio == true) ) && ($tipoComprobacionPanel != 'envio'))
        {
                $llamadaJS = $idPanel."_comp.informaAvisoJS('ESVACIO',this);";
                $igepSmarty->addAccionEvento("onBlur", $llamadaJS, 50);
        }
        if ($obligatorio == true) $txtAsterisco='*'; 
        else $txtAsterisco='';  
        
        if ($CWPadre == "CWFila")
                $textoAsociado = '';            
        else
                $textoAsociado = "<label style='font-weight: bold; $mostrarTextoAsociado' id='txt".$idPanel."_".$idCampo."' for='".$idCampo."'>".$txtAsterisco.$textoAsociado."</label>\n";

        if (($CWPadre == 'CWFicha') && ($iterActual < $numRegTotales))
        {
                $campoEstadoFila = "est_".$idFila;
                // id para el campo oculto donde guardaremos el valor anterior
                if ($radio == 0)
                {
                        $llamadaJS = "if (this.options[this.selectedIndex].value != getElementById('".$idCampoAnt."').value) ";
                }
                else
                {
                        $llamadaJS = "numCampos = document.F_$idPanel.$idCampo.length;";
                        $llamadaJS .= "for (i=0; i<numCampos; i++){";
                $llamadaJS .= "if (document.F_".$idPanel.".".$idCampo."[i].checked)";
                $llamadaJS .= "break;}";
                $llamadaJS .= "if (document.F_".$idPanel.".".$idCampo."[i].value != getElementById('".$idCampoAnt."').value)"; 
                }
                $llamadaJS .="{\n ";
                if (($editable != "no") && ($editable != "false"))
        {
                        $llamadaJS .="getElementById('".$campoEstadoFila."').value='modificada';";
        }
                $llamadaJS .=$idPanel."_imgModificado.style.display='inline';";
                $llamadaJS .="getElementById('capa_menuFalso').style.display='inline';";
                $llamadaJS .="getElementById('capa_menuReal').style.display='none';";                           
                $llamadaJS .="getElementById('permitirCerrarAplicacion').value='no';";                          
                $llamadaJS .="\n} ";                            
                $igepSmarty->addAccionEvento("onChange", $llamadaJS, 1);
        }//Fin REGISTRO         

// FIN: ZONA COMÚN (Paneles, listas, radios)
        

        if (($CWSelector) && ($editable != 'false'))
        {               
                $punteroPilaCWSelector = count($smarty->_tag_stack)-1;
                array_push($smarty->_tag_stack[$punteroPilaCWSelector][2],$idCampo);
        }
        
        
        $tresModos = $smarty->_tag_stack[$punteroPilaPanel][1]['tresModos'];
        // Estamos en un tres modos y dentro de una tabla, los campos 'external' no entran
        // No se activen los campos de inserción en la tabla en un tres modos
        if (
                ($tresModos == 1) //Estamos en un tabular-registro
                && ( (($idPanel == 'lis') || ($idPanel == 'lisDetalle') ) //Estamos en el panel tabular 
                && ($CWAbuelo == 'CWTabla'))            
                && ($iterActual >= $numRegTotales)
        )
        {
                $hidden = '';
                $cadHTML = '';
        }
        
        return ($ini.$igepSmarty->getPreScript().$hidden.$cadHTML.$fin);
}