function paginacion($cSql, $leyenda, $tamPagina = 10, $maxIndex = 10, $leyendaPaginas = "Página %s de %s", $queryString = "") { /* devuelve un array con ( n reg, n paginas, cSQL limitada, navegación ) */ $paginaActual = 0; if ($queryString) { $nTemp = strpos($queryString, "PaginaActual="); if ($nTemp > 0) { $paginaActual = (int) substr($queryString, $nTemp + 13); } } if (!$paginaActual) { $paginaActual = por_defecto(si_es_key($_REQUEST, "PaginaActual"), mRequest("PaginaActual")); if ($paginaActual == "") { $paginaActual = 1; } } $rsTemp = mysql_query($cSql); $totalReg = mysql_num_rows($rsTemp); $cNavega = ""; if ($totalReg == 0) { // no hay páginas $totalPaginas = 0; $paginaActual = 0; } elseif ($totalReg <= $tamPagina) { // solo hay una página $totalPaginas = 1; $paginaActual = 1; } else { // hay más de una página $totalPaginas = ceil($totalReg / $tamPagina); if ($paginaActual > $totalPaginas) { $paginaActual = $totalPaginas; } // calculamos las leyendas si hay if ($leyenda != "") { $npag = 1; $aCampos = explode(",", $leyenda); while ($npag <= $totalPaginas && ($aTemp = mysql_fetch_array($rsTemp))) { $cTemp = ""; foreach ($aCampos as $tCampo) { $cTemp .= $aTemp[trim($tCampo)] . " "; } $aLeyendas[$npag - 1] .= " - {$cTemp}"; $aLeyendas[$npag] = $cTemp; /* TODO mirar error */ @mysql_data_seek($rsTemp, $npag * $tamPagina); $npag++; } // falta el ultimo mysql_data_seek($rsTemp, $totalReg - 1); $aTemp = mysql_fetch_array($rsTemp, MYSQL_ASSOC); $cTemp = ""; foreach ($aCampos as $tCampo) { $cTemp .= $aTemp[trim($tCampo)] . " "; } $aLeyendas[$totalPaginas] .= " - {$cTemp}"; } // cambiamos la SQL. if (strstr(strtoupper($cSql), " LIMIT ") === false) { $cSql .= " LIMIT " . max(0, ($paginaActual - 1) * $tamPagina) . ",{$tamPagina}"; } // Construir barra de navegacion $webBase = _paginacion_base($queryString); if ($totalPaginas <= $maxIndex) { // todas las páginas caben. for ($nCont = 1; $nCont <= $totalPaginas; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}'" : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp} >{$nCont}</a>\n"; } } else { // construir barra limitada if ($paginaActual > $totalPaginas - $maxIndex) { $nDesde = $totalPaginas - $maxIndex; $nHasta = $totalPaginas; } else { $nDesde = floor($paginaActual / $maxIndex) * $maxIndex + 1; $nHasta = $nDesde + $maxIndex - 1; } $nSiguiente = min($totalPaginas, $nDesde == 1 ? $maxIndex : $nDesde + $maxIndex); $nAnterior = max(1, $nDesde - $maxIndex); // boton de ir al principio (siempre 1) if ($nDesde > 1) { $temp = $leyenda ? " title='{$aLeyendas[1]}' " : ""; $cNavega .= "<a class='paginacion_bottom' href='{$webBase}PaginaActual=1'{$temp};><<</a>"; } // boton de ir al anterior if ($nDesde != 1) { /* boton anterior */ $temp = $leyenda ? " title='{$aLeyendas[$nAnterior]}' " : ""; $cNavega .= " <a class='paginacion_anterior' href='{$webBase}PaginaActual={$nAnterior}'{$temp}><</a>"; } // poner las paginas $cNavega .= "<span class='paginacion_paginas'>\n"; for ($nCont = $nDesde; $nCont <= $nHasta; $nCont++) { $temp = $leyenda ? " title='{$aLeyendas[$nCont]}' " : ""; $cNavega .= " <a href='{$webBase}PaginaActual={$nCont}'{$temp}>{$nCont}</a>\n"; } $cNavega .= "</span>\n"; // botón de siguiente if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$nSiguiente]}' " : ""; $cNavega .= " <a class='paginacion_siguiente' href='{$webBase}PaginaActual={$nSiguiente}' {$temp}'>></a>\n"; } // botón de ultimo if ($nHasta < $totalPaginas) { $temp = $leyenda ? " title='{$aLeyendas[$ntotalPaginas]}' " : ""; $cNavega .= " <a class='paginacion_top' href='{$webBase}PaginaActual={$totalPaginas}' {$temp}>>></a>\n"; } } } if ($totalPaginas <= 0) { $cPagina = " "; } else { // se genera la paginación. Ej: 5 de 6 $cPagina = sprintf($leyendaPaginas, $paginaActual, $totalPaginas) . " |" . $cNavega; } $aTemp = array($totalReg, $totalPaginas, $cSql, $cPagina); return $aTemp; }
function plantillaSegunCantidad($cantidad, $caso_es_0, $caso_es_1 = "", $caso_2oMas = "") { if (strpos($caso_es_0, "|") !== false) { $capturas = explode("|", $caso_es_0); $caso_2oMas = count($capturas) == 3 ? $capturas[2] : ""; $caso_es_1 = count($capturas) >= 2 ? $capturas[1] : ""; $caso_es_0 = count($capturas) >= 1 ? $capturas[0] : ""; } $caso_2oMas = por_defecto($caso_2oMas, $caso_es_1, $caso_es_0); $caso_es_1 = por_defecto($caso_es_1, $caso_es_0); switch ($cantidad) { case 0: return sprintf($caso_es_0, 0); case 1: return sprintf($caso_es_1, 1); default: return sprintf($caso_2oMas, $cantidad); } }
function ddlib_guardar($cTabla, $cWhere, $aEdicion, $aOpciones = NULL) { $cError = ""; $aRet = ""; $cNuevo = $cWhere == "" ? "INSERT" : "UPDATE"; // Primero verificamos las condiciones de cada campo foreach ($aEdicion as $aDatos) { $cError .= isset($aDatos["verifica"]) ? ddlib_verificaCampo($aDatos) : ""; } // Revisar los errores if ($cError != "") { if (isset($aOpciones["errorverificacion"])) { $cError = $aOpciones["errorverificacion"] . $cError; } return mensajeHTML($cError, "error " . ($cNuevo ? "añadir" : "guardar")); } $aSQL = sql_crear($cNuevo, $cTabla, $cWhere); // al terminar la verificación revisar los errores foreach ($aEdicion as $aDatos) { if (isset($aDatos["acceso"]) and !$aDatos["acceso"]) { continue; } $aParametros = explode(" ", $aDatos["tipo"]); switch (strtolower($aParametros[0])) { case "hidden": case "info": case "htmldespues": case "infofuncion": case "separador": case "separadortabla": case "verificapassword": case "readonly": break; case "adjunto": case "imagen": case "irudia": if ($_REQUEST[$aDatos["campo"] . "_BORRAR"] == '1' || $_REQUEST[$aDatos["campo"] . "_EZABATU"] == '1') { sql_add($aSQL, $aDatos["campo"], "", "cadena"); } else { $lPendiente = true; } break; case "nuevopassword": if ($_REQUEST[$aDatos["campo"]] != "") { if (isset($aParametros[3]) and $aParametros[3] == "md5") { sql_add($aSQL, $aDatos["campo"], md5($_REQUEST[$aDatos["campo"]]), "cadena"); } else { sql_add($aSQL, $aDatos["campo"], "cadena"); } } break; case "fijo": sql_add($aSQL, $aDatos["campo"], $aDatos["valor"], $aParametros[1]); break; case "listavalores": sql_add_request($aSQL, $aDatos["campo"], por_defecto($aParametros[2], "cadena")); break; case "listafuncion": sql_add_request($aSQL, $aDatos["campo"], $aParametros[2]); break; default: if (isset($aDatos["campos"])) { foreach ($aDatos["campos"] as $tcampo => $tipo) { sql_add_request($aSQL, $tcampo, $tipo); } } elseif (isset($aDatos["campo"])) { // el campo puede ser de diversos tipos. list($tipoCampo, $tcampo, $tmas) = explode(" ", $aDatos["campo"]); switch (strtolower($aDatos["campo"])) { case "tcampo": case "funcionget": case "funcion": // estos son campos de consulta no se pueden escribir break; case "serialize": case "serializa": sql_add_request($aSQL, serialize($aDatos["campo"]), $tcampo); break; default: sql_add_request($aSQL, $aDatos["campo"], $aParametros[0]); } } } } // si hemos recogido campos, salvamos (puede ser un caso de solo imágenes ) if (sql_esvacia($aSQL)) { $lResul = true; } else { $lResul = mysql_query(sql_sql($aSQL)); } if ($lResul and $lPendiente) { ddlib_guardarAdjuntos($cTabla, $cWhere, $aEdicion); } // Devolver resultado if ($lResul) { $lResul = $aOpciones["ok"] ? "<div class='guardarOk' >{$aOpciones[ok]}</div>" : true; } else { $lResul = $aOpciones["ok"] ? "<div class='guardarError'>{$aOpciones[error]}</div>" : false; } return $lResul; }
function maquetador_evaluar_estado($controlador = false, $accion = false) { global $aEstado; // Cargar el estado o petición $aEstado = array("controlador" => por_defecto($_REQUEST["c"], $controlador, $_GLOBALS["HOME_CONTROLADOR"]), "accion" => por_defecto($_REQUEST["a"], $accion, $_GLOBALS["HOME_ACCION"]), "id" => $_REQUEST["i"], "pagina" => $_REQUEST["p"], "order" => $_REQUEST["order"], "orderby" => $_REQUEST["orderby"], "esHome" => $_REQUEST["c"] == ""); }
function plantilla_opcion($valor, $plantilla0, $plantilla1 = "", $plantilla2 = "") { $plantilla2 = por_defecto($plantilla2, $plantilla1, $plantilla0); $plantilla1 = por_defecto($plantilla1, $plantilla0); switch ($valor) { case 0: return strtr($plantilla0, array("%0" => $valor)); case 1: return strtr($plantilla1, array("%0" => $valor)); default: return strtr($plantilla2, array("%0" => $valor)); } }
function maquetador_evaluar_estado($controlador = false, $accion = false, $idiomasValidos = false) { global $aEstado; // Determinar el idioma $idioma = por_defecto(si_es_key($_REQUEST, "l"), si_es_key($_SESSION, "idioma")); if (!$idioma) { $idioma = substr(getenv('HTTP_ACCEPT_LANGUAGE'), 0, 2); } // Corrección final del idioma, y comprobar validez if (!preg_match('/^[a-z]{2}(_[a-z]{2})?$/i', $idioma)) { $idioma = si_es_key($GLOBALS, "TIDIOMA_DEFECTO", "es"); } if ($idiomasValidos && !preg_match('/^(' . $idiomasValidos . ')?$/i', $idioma)) { $idioma = si_es_key($GLOBALS, "TIDIOMA_DEFECTO", "es"); } $_SESSION["idioma"] = $idioma; $aEstado = array("controlador" => por_defecto(si_es_key($_REQUEST, "c"), $controlador, si_es_key($GLOBALS, "HOME_CONTROLADOR"), "home"), "accion" => por_defecto(si_es_key($_REQUEST, "a"), $accion, si_es_key($GLOBALS, "HOME_ACCION"), "index"), "id" => si_es_key($_REQUEST, "i"), "idioma" => $idioma, "pagina" => si_es_key($_REQUEST, "p"), "order" => si_es_key($_REQUEST, "order"), "orderby" => si_es_key($_REQUEST, "orderby"), "esHome" => si_es_key($_REQUEST, "c") == ""); }