![]() |
Documentación GVHIDRA 3.1.5
|
Ir al código fuente de este archivo.
Funciones | |
smarty_function_CWCheckBox ($params, &$smarty) |
smarty_function_CWCheckBox | ( | $ | params, |
&$ | smarty | ||
) |
En el caso del checkbox, extendemos el estandar de HTML, proporcionando valores asociados al checkbox según su estado. Para ello, creamos un campo hidden asociaciado al mismo, que contiene dicho valor. De cara al REQUEST que gestiona gvHidra, interesa que el 'name' de dicho hidden se corresponda con el campo de la TPL, por lo que debemos dejar claro los prefijos/sufijos que vamos a utilizar. Siendo "ntpl" el nombre del elemento en la tpl: ________________________________________________________ | Búsqueda | Edición | Inserción | ····························|--------------------------------------------------------| Elemento checkbox ID:| chkbfil_ntpl | ccam___ntpl | cins___ntpl | |--------------------------------------------------------| Elemento checkbox NAME:| chkbfil_ntpl | ccam___ntpl | cins___ntpl | ····························|--------------------------------------------------------| Elemento hidden ID:| ntpl | cam___ntpl | hins___ntpl | |--------------------------------------------------------| Elemento hidden NAME:| ntpl | cam___ntpl | hins___ntpl | ····························|--------------------------------------------------------| Element hidden (conc.) ID:| NO EXISTE | ant___ntpl | NO EXISTE | |--------------------------------------------------------| Element hidden (conc.) NAME:| NO EXISTE | ant___ntpl | NO EXISTE | ····························^-------------------^-------------------^----------------^
Aclaración de prefijos utilizados para el id de los campos cins -> id para modo inserción hins -> campo de texto oculto en inserción con el valor dl checkbox seleccionado ccam -> id del checkbox en modo edición cam -> campo de texto oculto con el valor del checkbox seleccionado, anterior chkbfil_ -> campo de texto oculto con el valor del checkbox en el filtro
Definición en la lÃnea 64 del archivo function.CWCheckBox.php.
{ $igepSmarty = new IgepSmarty(); // CODIGO NECESARIO PARA CADA COMPONENTE // // Primero defino el nombre del componente. $n_comp="CWCheckBox"; // Incrementamos el número de componentes CWCampoTexto $num = $smarty->igepPlugin->registrarInstancia($n_comp); if($params['nombre']) { $idCampo=$params['nombre']; } else { // Por defecto, nombre plugin y número de instancia del componente $idCampo=$n_comp.$num; } $nameCampo = $idCampo;//Name para el checkbox $idCampoOculto = '';//Id para el campoOculto $nameCampoOculto = '';//Name para el hidden $editable = 'true'; if($params['editable']) { $editable = $params['editable']; } 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 = ""; } //Obtenemos el valorSi y valorNo if ( (isset($params['dataType'])) && (is_array($params['dataType'])) ) { $dataType = $params['dataType']; //Valor si if (isset($dataType['valueChecked'])) { $valorSi = $dataType['valueChecked']; } else { $valorSi = true; } //Valor no if (!empty($dataType['valueUnchecked'])) { $valorNo = $dataType['valueUnchecked']; } else { $valorNo = false; } } //valor se pasara al php cuando este en un panel de busqueda $chequeado = ''; if($params['valor']) { $value = $params['valor']; if ($value == $valorSi) $chequeado = "checked='checked'"; } else { $value = $valorNo; } //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 = "false"; //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'])) { $mostrarTextoAsociado = trim(strtolower($params['mostrarTextoAsociado'])); } switch ($mostrarTextoAsociado) { case 'no': case 'false': $mostrarTextoAsociado = "display:none; "; break; case 'si': case 'true': $mostrarTextoAsociado = "display:inline; "; break; default: $mostrarTextoAsociado = "display:inline; "; }//Fin switch // --- tratamiento de etiquetas //inicializacion de variables $script = ""; $textoHtml = ""; $ini = ""; $fin = ""; $hiddentxt = ""; $hiddentxtActual = ""; $estado = ""; // 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; if (($CWPadre == "CWSelector") && ($CWAbuelo == "CWSolapa"))//Si el padre es un CWSolapa, tenemos que movernos uno más arriba, pq pasamos de el { $punteroPilaPadre = count($smarty->_tag_stack)-3; $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0]; $punteroPilaAbuelo = $punteroPilaPadre - 1; $CWAbuelo = $smarty->_tag_stack[$punteroPilaAbuelo][0]; } if (($CWPadre == "CWSelector") || ($CWPadre == "CWSolapa"))//Si el padre es un CWSolapa, tenemos que movernos uno más arriba, pq pasamos de el { $punteroPilaPadre = count($smarty->_tag_stack)-2; $CWPadre = $smarty->_tag_stack[$punteroPilaPadre][0]; $punteroPilaAbuelo = $punteroPilaPadre - 1; $CWAbuelo = $smarty->_tag_stack[$punteroPilaAbuelo][0]; } if ($CWAbuelo == 'CWContenedor') //stamos en un panel de búsqueda { $punteroPilaPanel = $punteroPilaAbuelo - 1; } else { $punteroPilaPanel = $punteroPilaAbuelo - 2; } $idPanel = $smarty->_tag_stack[$punteroPilaPanel][1]['id']; //Si el padre es una fila o el abuelo es una fichaEdicion.... // Comprobamos lo dl abuelo en vez d q el padre sea CWFicha pq una ficha ahora puede estar dentro de otro componente // p.ej (CWContenedor) para el panel de búsqueda // Estamos en una tabla o en un panel de edición 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 (($CWPadre == "CWFila") && (isset($params['size']))) // Hay que almacenar en el padre (CWFila) el tamaño del campo para poder fijar el ancho de las columnas $smarty->_tag_stack[$punteroPilaAbuelo][6]['sizes'][] = strlen($params['textoAsociado']); } $numRegTotales = count($smarty->_tag_stack[$punteroPilaAbuelo][1]['datos']); $idFila = $smarty->_tag_stack[$punteroPilaAbuelo][1]['id']."_".$iterActual; /* --------------- */ /* --- ESTILOS --- */ /* --------------- */ $fondos = ''; if(isset($datosReg['__gvHidraRowColor'])) $fondos = $datosReg['__gvHidraRowColor']; // editable = true,false,nuevo | si/no/nuevo switch($CWPadre) { case "CWFila": switch($editable) { case "true": case "si": $classHTML = " class=\"formularios tablaEdi ".$fondos."\""; $estadoHTML = 'disabled="disabled"'; break; case "false": case "no": $classHTML = " class=\"formularios tablaNoEdi ".$fondos."\""; $estadoHTML = 'disabled="disabled"'; break; case "nuevo": $classHTML = " class=\"formularios tablaNuevo ".$fondos."\""; //$estadoHTML = 'disabled="disabled"'; break; } break; case "CWFicha": switch($editable) { case "true": case "si": // 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 modificable"'; $estadoHTML = ""; } else if ($smarty->_tag_stack[$punteroPilaAbuelo][1]['accion'] == 'insertar') { $classHTML = ' class="formularios editable"'; $estadoHTML = ''; } else { $classHTML = ' class="formularios editable"'; $estadoHTML = 'disabled="disabled"'; } break; case "false": case "no": $classHTML = ' class="formularios noEditable"'; $estadoHTML = 'disabled="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="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="disabled"'; //Pasamos el tabindex a negativo, ya que no será accesible $tabindex=" tabindex='-1' "; } break; } break; default: $classHTML = ' class="formularios editable"'; $estadoHTML = ''; } $estadoFilaJS = ''; if (($iterActual == 0) && ($CWPadre == "CWFila")) { $estadoFilaJS = $idPanel."_tabla.columnaEstado('".$idCampo."','".$editable."');"; $igepSmarty->addPreScript($estadoFilaJS); } //campos de la insercion if ($iterActual >= $numRegTotales) { // Componer el nombre del campo: params[nombre]_idFila // ej: cad_inv_dni__F_tabla1_2 $baseIdCampo = $idCampo;//Núcleo del identificador del campo $idCampo = "cins___".$idCampo."___".$idFila; if ($CWPadre == "CWFila") { $ini = "<td align='center'>\n"; $fin = "</td>\n"; $campoEstadoFila = "est_".$idFila; $llamadaJS = $idPanel."_tabla.cambiarEstado('insertada','this','".$campoEstadoFila."');"; $igepSmarty->addAccionEvento("onBlur", $llamadaJS, 1); } if ($CWPadre == "CWFicha") { // Para hacer las comprobaciones de modificación necesitamos el campo oculto 'hins___' que es el q contiene // el valor a comparar con el anterior /* $id = str_replace("cins___","hins___",$idCampo); $llamadaJS = $idPanel."_comp.comprobarModificacion('".$id."');"; $igepSmarty->addAccionEvento("onBlur", $llamadaJS, 1); */ $campoEstadoFila = "est_".$idFila; $llamadaJS = "document.getElementById('".$campoEstadoFila."').value='insertada';"; $igepSmarty->addAccionEvento("onClick", $llamadaJS, 1); } $idCampoOculto = str_replace("cins___","hins___",$idCampo); //Quitamos esto porque creemos que no se gasta /* if($params['funcion']) { $funcion .= $idPanel."_comp.establecerBooleano(this,'".$idCampoOculto."','".$valorSi."','".$valorNo."');"; } else { $funcion = "onClick=\"javascript:".$idPanel."_comp.establecerBooleano(this,'".$idCampoOculto."','".$valorSi."','".$valorNo."');"; } */ $funcion = "onClick=\"javascript:$llamadaJS".$idPanel."_comp.establecerBooleano(this,'".$idCampoOculto."','".$valorSi."','".$valorNo."');"; // Creamos un campo hidden para la concurrencia (valor actual) if ($idCampoOculto!="") //hins___ { $hiddentxtActual .= "<input type='hidden' id='$idCampoOculto' name='$idCampoOculto' value='$value' />"; } } else //Ya no estamos en inserción { // Componer el nombre del campo: params[nombre]_idFila // ej: cad_inv_dni__F_tabla1_2 // se utiliza 'ccam' en vez d 'cam' pq creamos un campo d texto oculto para guardar el valor y comparar con el anterior $idCampo = "ccam___".$idCampo."___".$idFila; //Si el padre es una fila, incluimos los TD if ($CWPadre == "CWFila") { $ini = "<td align='center'>\n"; $fin = "</td>\n"; $campoEstadoFila = "est_".$idFila; if (($editable != "no") && ($editable != "false")) { $llamadaJS = $idPanel."_tabla.cambiarEstado('modificada','this','".$campoEstadoFila."');"; $igepSmarty->addAccionEvento("onBlur", $llamadaJS, 1); } } if ($CWPadre == "CWFicha") { // Para hacer las comprobaciones de modificación necesitamos el campo oculto 'cam___' que es el q contiene // el valor a comparar con el anterior $id = str_replace("ccam___","cam___",$idCampo); $llamadaJS = $idPanel."_comp.comprobarModificacion('".$id."');"; $igepSmarty->addAccionEvento("onBlur", $llamadaJS, 1); } //Obtenemos el registro que le corresponde y fijamos el valor $datosReg = $smarty->_tag_stack[$punteroPilaAbuelo][1]['datos'][$iterActual]; //Asignamos el valor de registro, controlando el PEAR:DB $valueReg=null; //Si es la nueva version de PEAR, da igual que sea Postgres que Oracle (columna en minúsculas) if (!isset($valueReg)) $valueReg = $datosReg[strtolower($params['nombre'])]; //Si aqui aun no tiene valor, puede ser Pear "case sensitive" contra Postgres (columna mayúscula/minúsculas) if (!isset($valueReg)) $valueReg = $datosReg[$params['nombre']]; //Por último, si aquí tampoco tiene valor, puede ser Pear "case sensitive" contra Oracle (columna mayúsculas) if (!isset($valueReg)) $valueReg = $datosReg[strtoupper ($params['nombre'])]; if (isset($valueReg) && ($valueReg!="")) $value=htmlspecialchars($valueReg); if (($valueReg == null) && ($value == '')) $value=''; // Fin del proceso de asignación del valor if ($value == $valorSi) { $chequeado = "checked='checked'"; } else { $chequeado = ''; } $estado = " disabled='disabled' "; $idCampoOculto = str_replace("ccam___","cam___",$idCampo); if($params['funcion']) { $funcion .= $idPanel."_comp.establecerBooleano(this,'".$idCampoOculto."','".$valorSi."','".$valorNo."');"; } else { $funcion = "onClick=\"javascript:".$idPanel."_comp.establecerBooleano(this,'".$idCampoOculto."','".$valorSi."','".$valorNo."');"; } // Creamos un campo hidden para la concurrencia (valor actual) if ($idCampoOculto!="") // ccam___ { $hiddentxtActual .= " <input type=\"hidden\" id=\"$idCampoOculto\" name=\"$idCampoOculto\" value=\"$value\" $classHTML/>"; } // Creamos un campo hidden para la concurrencia (valor anterior) $idHidden = str_replace("ccam___","ant___",$idCampo); if ($idHidden!="") { $hiddentxt .= "<input type=\"hidden\" id=\"$idHidden\" name=\"$idHidden\" value=\"$value\" $classHTML/>"; } } //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 ( ($CWPadre == "CWFila") && ($params['oculto'] != 'true') && ($iterActual == 0) ) { $referencia = $params['nombre']; if (empty($textoAsociado)) $textoAsociado = $referencia; $v_titulo = $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas']; $v_titulo[$referencia] = $textoAsociadoColumna; $smarty->_tag_stack[$punteroPilaAbuelo][1]['titulosColumnas'] = $v_titulo; } }//if ($CWPadre) else //Estamos en un panel de búsqueda { $idCampoOculto = $idCampo; $idCampo = 'chkbfil_'.$idCampo; if ($editable == 'false') $estadoHTML = 'disabled="disabled"'; $hiddentxtActual = " <input type=\"hidden\" id=\"$idCampoOculto\" name=\"$idCampoOculto\" value=\"$value\" />"; $funcion = 'onClick="javascript:'.$idPanel."_comp.establecerBooleano(this,'$idCampoOculto','".$valorSi."','".$valorNo."');"; }//Fin if-else if($params['actualizaA']) { $funcion .= $idPanel."_comp.actualizarElemento(document.getElementById('$idCampoOculto'),'".$params['actualizaA']."');"; } if (($CWSelector) && ($editable != 'false')) { $punteroPilaCWSelector = count($smarty->_tag_stack)-1; array_push($smarty->_tag_stack[$punteroPilaCWSelector][2],$idCampo); } $funcion .= '"'; if ($CWPadre != "CWFila") { $textoAsociado = "<label style='font-weight: bold; $mostrarTextoAsociado' id='txt".$idPanel."_".$idCampo."' for='".$idCampo."'>".$txtAsterisco.$textoAsociado."</label>\n"; } else $textoAsociado = ''; //Visibilidad e invisibilidad $aperturaCapa = ''; $cierreCapa = ''; //$substr_replace ($var, '', 10, -1) //Si el campo INICIALMENTE NO debe ser visible if ($visible == false) { $estiloVisibilidad = 'visibility:hidden;'; } else { $estiloVisibilidad = 'visibility:visible;'; } if (($iterActual >= $numRegTotales) && ($CWAbuelo != "CWContenedor") && ($CWAbuelo != "CWFichaEdicion")) { $estiloVisibilidad = 'visibility:hidden;'; } $aperturaCapa = "<span id='IGEPVisible".$idCampo."'"; $aperturaCapa.=" style='"; $aperturaCapa.="$estiloVisibilidad; "; $aperturaCapa.= "' >";//Fin style $cierreCapa = '</span>'; $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 ( ( (($idPanel == 'lis') || ($idPanel == 'lisDetalle')) && ($CWAbuelo == 'CWTabla')) && ($tresModos == 1) && ($iterActual >= $numRegTotales)) $textoHtml = ''; else { $textoHtml = $aperturaCapa; $textoHtml.=$hiddentxt.$hiddentxtActual.$textoAsociado; $textoHtml.="<input type='checkbox' id='$idCampo' $estadoHTML"; $textoHtml.=" $classHTML $tabindex name='$idCampo' "; $textoHtml.=' value="'.$value.'" '."$chequeado $funcion "; $textoHtml.=$igepSmarty->getAcciones()." />\n"; $textoHtml .=$cierreCapa; } return ($ini.$textoHtml.$fin); }