/** * Genera el listado ABM con las funciones de editar, nuevo y borrar (segun la configuracion). * NOTA: Esta funcion solamente genera el listado, se necesita usar la funcion generarAbm() para que funcione el ABM. * * @param string $sql Query SQL personalizado para el listado. Usando este query no se usa $adicionalesSelect * @param string $titulo Un titulo para mostrar en el encabezado del listado */ public function generarListado($sql="", $titulo){ global $db; //por cada campo... for ($i=0;$i<count($this->campos);$i++){ if($this->campos[$i][campo] == "") continue; if($this->campos[$i][noListar] == true) continue; if($this->campos[$i][noOrdenar] == true) continue; //para la class de ordenar por columnas if($camposOrder != "")$camposOrder .= "|"; $camposOrder .= $this->campos[$i][campo]; //campos para el select if($camposSelect != "")$camposSelect .= ", "; $camposSelect .= $this->campos[$i][campo]; } $o = new class_orderby($this->orderByPorDefecto, $camposOrder); if($o->getOrderBy()!="") $orderBy = " ORDER BY ".$o->getOrderBy(); if ($sql=="") { $sql = "SELECT $this->campoId, $camposSelect FROM $this->tabla WHERE 1 $this->adicionalesSelect $orderBy"; }else{ $sql = $sql." ".$orderBy; } $paginado = new class_paginado; $paginado->registros_por_pagina = $this->registros_por_pagina; $result = $paginado->query($sql); //genera el query string de variables previamente existentes $get = $_GET; unset($get[abmsg]); $qs = http_build_query($get); if($qs!="") $qs = "&".$qs; echo "<div class='mabm'>"; ?> <script type="text/javascript"> function abmBorrar(id, idObjetoHtml){ var classAnt = document.getElementById(idObjetoHtml).style.backgroundColor; //resalto el elemento que se va a borrar document.getElementById(idObjetoHtml).style.backgroundColor = 'yellow'; if (confirm("<?=$this->textoPreguntarBorrar?>")){ window.location = "<?= $_SERVER[PHP_SELF]."?".$qs."&abm_borrar=" ?>" + id; } document.getElementById(idObjetoHtml).style.backgroundColor = classAnt; } </script> <? if (isset($_GET[abmsg])) { echo "<div class='merror'>".urldecode($_GET[abmsg])."</div>"; } echo "<table class='mlistado' $this->adicionalesTableListado> \n"; //titulo y boton nuevo echo "<thead>"; echo "<tr><th colspan=".(count($this->campos)+2).">"; echo "<div class='mtitulo'>$titulo</div>"; if($this->mostrarNuevo){ echo "<div class='mbotonera'>"; echo sprintf($this->iconoAgregar, "$_SERVER[PHP_SELF]?abm_nuevo=1$qs"); echo "</div>"; } echo "</th></tr> \n"; echo "</thead>"; //fin titulo y boton nuevo if($paginado->total_registros > 0){ //columnas del encabezado if($this->mostrarEncabezadosListado){ echo "<tr> \n"; foreach($this->campos as $campo){ if($campo[noListar] == true) continue; if($campo[campo]=="" or $campo[noOrdenar]){ echo "<th>".($campo[tituloListado]!="" ? $campo[tituloListado] : ($campo[titulo]!=''?$campo[titulo]:$campo[campo]))."</th> \n"; }else{ echo "<th>".$o->linkOrderBy( ($campo[tituloListado]!="" ? $campo[tituloListado] : ($campo[titulo]!=''?$campo[titulo]:$campo[campo])), $campo[campo])."</th> \n"; } } if ($this->mostrarEditar) echo "<th class='tituloColEditar'>$this->textoEditarListado</th> \n"; if ($this->mostrarBorrar) echo "<th class='tituloColBorrar'>$this->textoBorrarListado</th> \n"; echo "</tr> \n"; } //filas de datos $i = 0; while ($fila = $db->fetch_array($result)) { $fila = $this->limpiarEntidadesHTML($fila); $i++; $rallado = !$rallado; echo "<tr class='rallado$rallado' id='t$i'"; if(isset($this->evalEnTagTR)) eval($this->evalEnTagTR); echo "> \n"; foreach($this->campos as $campo){ if($campo[noListar] == true) continue; if($campo['centrarColumna']){ $centradoCol = 'align="center"'; }else{ $centradoCol = ''; } if ($campo[customEvalListado] != "") { extract($GLOBALS); $id = $fila[$this->campoId]; $valor = $fila[$campo[campo]]; eval($campo[customEvalListado]); }elseif ($campo[customFuncionListado] != "") { call_user_func_array($campo[customFuncionListado], array($fila)); }elseif ($campo[customPrintListado] != "") { echo "<td $centradoCol>"; $campo[customPrintListado] = str_ireplace('{id}', $fila[$this->campoId], $campo[customPrintListado]); echo sprintf($campo[customPrintListado], $fila[$campo[campo]]); echo "</td> \n"; }else{ if ($campo[tipo] == "bit") { if ($fila[$campo[campo]]) { echo "<td $centradoCol>".$campo[datos][1]."</td> \n"; }else{ echo "<td $centradoCol>".$campo[datos][0]."</td> \n"; } }else{ //si es tipo fecha lo formatea if ($campo[tipo] == "fecha") { if( $fila[$campo[campo]] != "" and $fila[$campo[campo]] != "0000-00-00" and $fila[$campo[campo]] != "0000-00-00 00:00:00" ){ if (strtotime($fila[$campo[campo]]) !== -1){ $fila[$campo[campo]] = date($this->formatoFechaListado, strtotime($fila[$campo[campo]])); } } } echo "<td $centradoCol>".$fila[$campo[campo]]."</td> \n"; } } } if ($this->mostrarEditar) echo "<td class='celdaEditar'>".sprintf($this->iconoEditar, $_SERVER[PHP_SELF]."?abm_editar=".$fila[$this->campoId].$qs)."</td> \n"; if ($this->mostrarBorrar) echo "<td class='celdaBorrar'>".sprintf($this->iconoBorrar, "javascript:abmBorrar('".$fila[$this->campoId]."', 't$i');void(0)")."</td> \n"; echo "</tr> \n"; } if($paginado->total_paginas > 1){ echo "<tfoot> \n"; echo "<tr> \n"; echo "<th colspan=".(count($this->campos)+2).">"; $paginado->mostrar_paginado(); echo "</th> \n"; echo "</tr> \n"; echo "</tfoot> \n"; } }else{ echo "<td colspan=".(count($this->campos)+2).">$this->textoNoHayRegistros</td>"; } echo "</table> \n"; echo "</div>"; if ($this->mostrarNuevo){ //genera el query string de variables previamente existentes $get = $_GET; unset($get[abmsg]); unset($get[$o->variableOrderBy]); $qs = http_build_query($get); if($qs!="") $qs = "&".$qs; } }
public function generarListado($sql = "", $titulo) { global $db; //por cada campo... for ($i = 0; $i < count($this->campos); $i++) { if ($this->campos[$i][campo] == "") { continue; } if ($this->campos[$i][noListar] == true) { continue; } if ($this->campos[$i][noOrdenar] == true) { continue; } //para la class de ordenar por columnas if ($camposOrder != "") { $camposOrder .= "|"; } $camposOrder .= $this->campos[$i][campo]; //campos para el select if ($camposSelect != "") { $camposSelect .= ", "; } $camposSelect .= $this->campos[$i][campo]; } $o = new class_orderby($this->orderByPorDefecto, $camposOrder); if ($o->getOrderBy() != "") { $orderBy = " ORDER BY " . $o->getOrderBy(); } if ($sql == "") { if ($this->campoId == "") { $sql = "SELECT {$camposSelect} FROM {$this->tabla} WHERE 1 {$this->adicionalesSelect} "; } else { $sql = "SELECT {$this->campoId}, {$camposSelect} FROM {$this->tabla} WHERE 1 {$this->adicionalesSelect} "; } } else { $sql = $sql . " Where 1 "; } // ------------------------------------------------------------- // Todo lo relacionado con el buscador fue introducidos // por sergio. Las funciones estan en el // archivo propia.js if ($_GET['Buscar'] != "") { if ($this->mostrarBuscador) { if ($this->adicionales_buscar_Select == "") { $sql = $sql . " {$orderBy}"; } else { $sql = $sql . " {$this->adicionales_buscar_Select} {$orderBy}"; } // reemplazamos la variable "@1" por el valor ingresado en el edit de busqueda. $sql = str_replace('@1', $_GET['Buscar'], $sql); } else { $sql = $sql . " {$orderBy}"; } } //-------------------------------------------------------------- $paginado = new class_paginado(); $paginado->registros_por_pagina = $this->registros_por_pagina; $result = $paginado->query($sql); //genera el query string de variables previamente existentes $get = $_GET; unset($get[abmsg]); $qs = http_build_query($get); if ($qs != "") { $qs = "&" . $qs; } echo "<div class='mabm'>"; ?> <script type="text/javascript" src="../js/propias.js"></script> <script type="text/javascript"> function abmBorrar(id, idObjetoHtml){ var classAnt = document.getElementById(idObjetoHtml).style.backgroundColor; //resalto el elemento que se va a borrar document.getElementById(idObjetoHtml).style.backgroundColor = 'yellow'; if (confirm("<?php echo $this->textoPreguntarBorrar; ?> ")){ window.location = "<?php echo $_SERVER[PHP_SELF] . "?" . $qs . "&abm_borrar="; ?> " + id; } document.getElementById(idObjetoHtml).style.backgroundColor = classAnt; } function abmBuscar(){ var x = document.getElementById('e_buscar').value; window.location = "<?php echo $_SERVER[PHP_SELF] . "?" . $qs . "&Buscar="; ?> " + x; } </script> <?php if (isset($_GET[abmsg])) { echo "<div class='merror'>" . urldecode($_GET[abmsg]) . "</div>"; } echo "<div class=centraTabla>"; // por sergio echo "<table class='mlistado' {$this->adicionalesTableListado}> \n"; //titulo y botonera nuevo echo "<thead>"; echo "<tr><th rowspan='2'><img src='" . $this->logo . "'></th>"; echo " <th colspan=" . count($this->campos) . ">"; echo " <div class='mtitulo'>{$titulo}</div>"; if ($this->mostrarNuevo) { echo "<div class='mbotonera'>"; echo sprintf($this->iconoAgregar, "{$_SERVER['PHP_SELF']}?abm_nuevo=1{$qs}"); echo "</div>"; } echo "</th></tr> \n"; //-------------------------------------------------------------- // buscador en el listado if ($this->mostrarBuscador) { echo "<tr><th colspan=" . count($this->campos) . ">"; echo "<div id='buscador'><span class='mbusqueda'>{$this->textoBusqueda}:</span><input id='e_buscar' value='" . $_GET['Buscar'] . "' width='100%' />"; echo " <div class='mbotonera' onclick='abmBuscar();'>"; echo sprintf($this->iconoBuscar, "{$_SERVER['PHP_SELF']}"); echo " </div>"; echo "</div>"; echo "</tr>"; } else { echo "<tr><th colspan=" . count($this->campos) . "></th></tr>"; } //-------------------------------------------------------------- // Paginado superior. Se muetsra solo si es el superior o ambos. if ($this->mostrarPaginado == 1 || $this->mostrarPaginado == 3) { if ($paginado->total_paginas > 1) { echo "<tr> \n"; echo "<th colspan=" . (count($this->campos) + 2) . ">"; echo "<span class='paginado'>" . $paginado->mostrar_paginado() . "</span>"; echo "</th> \n"; echo "</tr> \n"; } } echo "</thead>"; //-------------------------------------------------------------- //fin titulo y botonera nuevo if ($paginado->total_registros > 0) { //columnas del encabezado if ($this->mostrarEncabezadosListado) { echo "<tr> \n"; foreach ($this->campos as $campo) { if ($campo[noListar] == true) { continue; } if ($campo[campo] == "" or $campo[noOrdenar]) { echo "<th>" . ($campo[tituloListado] != "" ? $campo[tituloListado] : ($campo[titulo] != '' ? $campo[titulo] : $campo[campo])) . "</th> \n"; } else { echo "<th>" . $o->linkOrderBy($campo[tituloListado] != "" ? $campo[tituloListado] : ($campo[titulo] != '' ? $campo[titulo] : $campo[campo]), $campo[campo]) . "</th> \n"; } } if ($this->mostrarEditar) { echo "<th class='tituloColEditar'>{$this->textoEditarListado}</th> \n"; } if ($this->mostrarBorrar) { echo "<th class='tituloColBorrar'>{$this->textoBorrarListado}</th> \n"; } echo "</tr> \n"; } //filas de datos $i = 0; while ($fila = $db->fetch_array($result)) { $fila = $this->limpiarEntidadesHTML($fila); $i++; $rallado = !$rallado; // --------------------------------------------- // onmouseover y onmouseout fueron introducidos // por sergio. Las funciones estan en el // archivo propia.js echo "<tr class='rallado{$rallado}' id='t{$i}' onmouseover='cambiar_color_over(this);' onmouseout='cambiar_color_out(this);' "; if (isset($this->evalEnTagTR)) { eval($this->evalEnTagTR); } echo "> \n"; foreach ($this->campos as $campo) { if ($campo[noListar] == true) { continue; } if ($campo['centrarColumna']) { $centradoCol = 'align="center"'; } else { $centradoCol = ''; } if ($campo[customEvalListado] != "") { extract($GLOBALS); $id = $fila[$this->campoId]; $valor = $fila[$campo[campo]]; eval($campo[customEvalListado]); } elseif ($campo[customFuncionListado] != "") { call_user_func_array($campo[customFuncionListado], array($fila)); } elseif ($campo[customPrintListado] != "") { echo "<td {$centradoCol}>"; $campo[customPrintListado] = str_ireplace('{id}', $fila[$this->campoId], $campo[customPrintListado]); echo sprintf($campo[customPrintListado], $fila[$campo[campo]]); echo "</td> \n"; } elseif ($campo[tipo] == "bit") { if ($fila[$campo[campo]]) { echo "<td {$centradoCol}>" . $campo[datos][1] . "</td> \n"; } else { echo "<td {$centradoCol}>" . $campo[datos][0] . "</td> \n"; } } elseif ($campo[tipo] == "fecha") { //si es tipo fecha lo formatea if ($fila[$campo[campo]] != "" and $fila[$campo[campo]] != "0000-00-00" and $fila[$campo[campo]] != "0000-00-00 00:00:00") { if (strtotime($fila[$campo[campo]]) !== -1) { $fila[$campo[campo]] = date($this->formatoFechaListado, strtotime($fila[$campo[campo]])); } } echo "<td {$centradoCol}>" . $fila[$campo[campo]] . "</td> \n"; } elseif ($campo[tipo] == "hora") { if ($fila[$campo[campo]] != "" and $fila[$campo[campo]] != "00:00" and $fila[$campo[campo]] != "00:00:00") { if (strtotime($fila[$campo[campo]]) !== -1) { $fila[$campo[campo]] = date($this->formatoHoraListado, strtotime($fila[$campo[campo]])); } } echo "<td {$centradoCol}>" . $fila[$campo[campo]] . "</td> \n"; } elseif ($campo[tipo] == "color") { //si es tipo Color lo formatea if ($fila[$campo[campo]] != "") { if (strtotime($fila[$campo[campo]]) !== -1) { $color = $fila[$campo[campo]]; } } echo "<td bgcolor=" . $color . " {$centradoCol}>" . $fila[$campo[campo]] . "</td> \n"; } else { echo "<td {$centradoCol}>" . $fila[$campo[campo]] . "</td> \n"; } } // fin del forich if ($this->mostrarEditar) { echo "<td class='celdaEditar'>" . sprintf($this->iconoEditar, $_SERVER[PHP_SELF] . "?abm_editar=" . $fila[$this->campoId] . $qs) . "</td> \n"; } if ($this->mostrarBorrar) { echo "<td class='celdaBorrar'>" . sprintf($this->iconoBorrar, "javascript:abmBorrar('" . $fila[$this->campoId] . "', 't{$i}');void(0)") . "</td> \n"; } echo "</tr> \n"; } if ($this->mostrarPaginado == 2 || $this->mostrarPaginado == 3) { if ($paginado->total_paginas > 1) { echo "<tfoot> \n"; echo "<tr> \n"; echo "<th colspan=" . (count($this->campos) + 2) . ">"; $paginado->mostrar_paginado(); echo "</th> \n"; echo "</tr> \n"; echo "</tfoot> \n"; } } } else { echo "<td colspan=" . (count($this->campos) + 2) . ">{$this->textoNoHayRegistros}</td>"; } echo "</table> \n"; echo "</div>"; // por sergio if ($this->mostrarNuevo) { //genera el query string de variables previamente existentes $get = $_GET; unset($get[abmsg]); unset($get[$o->variableOrderBy]); $qs = http_build_query($get); if ($qs != "") { $qs = "&" . $qs; } } }