Foros del Web » Programando para Internet » PHP »

Web modulas con un problema al mostrar el <title>

Estas en el tema de Web modulas con un problema al mostrar el <title> en el foro de PHP en Foros del Web. Buenas, Estoy programando una web donde todas las páginas tienen la siguiente estructura: - Un encabezado, con el titulo y alguna cosilla más. - Un ...
  #1 (permalink)  
Antiguo 14/03/2005, 17:49
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Web modulas con un problema al mostrar el <title>

Buenas,

Estoy programando una web donde todas las páginas tienen la siguiente estructura:

- Un encabezado, con el titulo y alguna cosilla más.
- Un menú en uno de los laterales.
- Una parte central con un par de cosillas que son fijas y luego el sitio donde irán todas las secciones.
- Y un píe de página.

Más o menos lo tenía todo resuelto, en el sitio donde debian ir las funciones tenía algo parecido a esto:

<?php

$dir="./php/".$dir.".php";

if (file_exists($dir)) {
require($dir);
} else {
require("./php/error404.php");
}
?>

Siendo $dir el parametro que indica el módulo actual.
Esto funciona a la perfección (bueno, no me he mirado mucho si sería mejor un require_once o un include), el problema es el titulo de la página.

Me explico, dentro del .php de cada módulo se hacen un montón de cosas, una de ellas es generar el titulo (<title>loquesea</title>) de la página actual. Éste titulo se genera en función de un montón de variables distintas (consultas a una base de datos, parametros introducidos, variables pasadas por url, etc). En realidad lo hace todo bien, y el titulo de la página se muestra correctamente. Pero en el código HTML el <title> aparece a mitad de la página (Que es cuando interpreto todos los datos y genero el titulo).

En cuestiones de HTML no creo que esto sea muy correcto, pero por más que me estrujo la cabeza no consigo idear una forma más o menos buena de evitarlo. Como ya he dicho intervienen una infinidad de factores en la creación de ese titulo, y todos están estrechamente relacionados con el contenido a mostrar, por lo que por narices han de hacerse en mitad de la página.

A no ser que guarde en una variable TODO lo que quiera mostrar y realizar todas las funciones al inicio de la página, y luego en la mitad (dónde ahora tengo el include al módulo correspondiende) mostrar dicha variable. Es el único modo que se me ocurre, no obstante no creo que sea del todo correcto, porque estamos hablando de una variable que contendría, literalmente, miles y miles de caracteres (imaginad una colección de articulos completos que se deben mostrar).

Así que estoy un poco perdido, si alguien ha sido capaz de entender todo el embrollo que he soltado aquí, ¿se le ocurre algo que puede hacer?

Un saludo.
  #2 (permalink)  
Antiguo 15/03/2005, 07:18
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Un ejemplo practico de lo que quiero es éste foro.

En el titulo pone el titulo del post y luego en el lugar de la página donde le corresponde se incluye el post y las respuestas.

En éste caso en particular sería más o menos sencillo, sería hacer una consulta a la base de datos para sacar el titulo al principio, y el resto en el sitio dónde se deban incluir los datos.

En mi caso el titulo puede ser resultado de un montón de ifs (y claro la forma de sacar el titulo es diferente en cada módulo) además también uso parte de los datos que se generan en la obtención del titulo para usarlos en el módulo en cuestión.

Además me interesa que quede todo en el mismo módulo, es un coñazo tener dos includes distintos, aunque es la única forma que se me ocurre:

- Tener un primer include en el principio de la página dónde se genere el titulo (y se hagan otra serie de operaciones que luego necesitaré). Y otro include en el lugar en el que le corresponde mostrar los datos al módulo, éste segundo include deberá utilizar parte de los datos generados en el primero.

De momento es el único modo que se me ocurre, pero no me convence demasido, ¿podría haber alguna otra forma de conseguir lo que quiero?

Un saludo.
  #3 (permalink)  
Antiguo 15/03/2005, 07:46
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading................


Seguro sacas el titulo de la web segun el parametro GET que estas pasando con la pagina contenedora y la relacionas con el ID de una base de datos.
Pero si codigo no se puede hacer nada.
Pega codigo.



connection closed.
__________________

Maborak Technologies
  #4 (permalink)  
Antiguo 15/03/2005, 08:49
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
En algunos casos si es así, cojo el ID y hago una consulta a la Base de datos.

Pero en otros casos es más complejo, si tengo 4 parámetros que recojo de la URL tengo que comprobar que los datos de esas variables son correctos (consultadon base de datos, por medio de ifs anidados, etc). y dentro de estos ifs se realizan acciones que van a influir en el módulo central.

Por ejemplo, tenemos un archivo de noticias, en la url se pasaría algo así:

archivo.php?modulo=archivo&categoria=3&subcategori a=1&fecha=17-12-05&pagina=6

entonces en el módulo del archivo hay que comprobar todos los parámetros recibidos, de tal manera que sean correctos:

- La categoría es válida y tiene noticias.
- Lo mismo con la subcategoria.
- Fecha correcta (día, mes y año) y se menor que la fecha actual y mayor que la del primer articulo.
- Página correcta.

mietras se va comprobando todo esto se va generando una cadena de texto que contendrá la consulta a la base de datos a realizar y, además, se irá generando el Titulo, por ejemplo:

"Archivo de Noticias de la categoría tal, subcateguria cual y fecha: 17 de diciembre del 2005."

Se podría pensar que lo más fácil es meter un include al principio de la página (dónde deba ir el <title>) y ahí hacer todas estas comprobaciones iniciales, mostrar el titulo y guardar en variables los datos que necesite luego en el lugar dónde tenga que mostrar el módulo (en el ejemplo el archivo de noticias). Y en ese mismo punto hacer otro include, que recoga los datos generados por el primero y realizar todas las acciones pertinentes.
Pero no sé, no me acaba de convencer la idea de tener dos includes (o requires que realmente es lo que uso) para el mismo módulo. Me gusta la forma que uso actualmente, pero no creo que sea correcto meter ahí el <title>.

No sé quizás no haya ninguna forma de hacerlo sin estos dos requires....
  #5 (permalink)  
Antiguo 15/03/2005, 12:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Haz que la cabecera sea el resultado de llamar una funcion, a la que pasas como parametros los valores variables de esa cabecera. Ejemplo sencillo:

cabecera.inc.php
Código PHP:
function cabecera ($titulo='Titulo por defecto') {
  
$cadena=<<<HTML
<html>
<head>
<title>
{$titulo}</title>
</head>
<body>
HTML;
  return 
$cadena;
}
?> 
Luego en tu modulo solo tienes que llamar a esa funcion con el titulo que has calculado:
Código PHP:
echo cabecera($tu_titulo); 
Saludos.

PD: Seria un paso hacia el uso de plantillas.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 15/03/2005, 13:41
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Vale, ya entiendo, esa era la otra opción que había desestimado.

Si no me equivoco te refieres a tener las llamadas a cada parte de la página en el módulo principal. En mi caso serían unas cuantas (cabecera, menú, otro menú, píe, y un par de zonas más).

De esta forma entiendo que mi actual planificación de la página sería incoherente.
Ahora tengo el index.php que incluye todas las partes de la página y en el lugar adecuado la llamada al módulo principal que se esté visualizando en ese momento (archivo, noticia, comentario, estadisticas, etc). Pero haciendolo de la otra manera ese index.php sería del todo inútil ya que todos las llamadas a las funciones (o requieres mejor, creo) irán en el módulo, que sería algo así:

modulo.php:

/* Código de validación de la función donde, entre otras cosas, generamos el titulo
*/
require(cabecera.php);
require(menu.php);

/* aquí mostramos el módulo actual */

require(pie.php);

Así sería el esquema muy simplificado. Pasaría del index.php y las urls pasarían de ser:

index.php?modulo=archivo&categoria=3&subcategoria= 1&fecha=17-12-05&pagina=6

a ser:

archivo.php?categoria=3&subcategoria=1&fecha=17-12-05&pagina=6


Bueno, es otra opción, ¿Sería la más correcta en estos casos?

Un saludo!
  #7 (permalink)  
Antiguo 15/03/2005, 14:00
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Mmm, ahora que lo pienso, hacer la web así me plantea un problema.

Actualmente uso varias hojas de estilo para todo el diseño de la página, de tal modo que está todo maquetado con divs.

Esto quiere decir que hay divs que abarcarían más de un require. Tecnicamente no habría ningún problema con la página, se vería correctamente. Pero me parece un tanto "chapucero" tener los modulos así, sin ser independientes y requiriendo a otros modulos pare cerrar o abrir etiquietas....

¬_¬
  #8 (permalink)  
Antiguo 15/03/2005, 14:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Keysher
Mmm, ahora que lo pienso, hacer la web así me plantea un problema.

Actualmente uso varias hojas de estilo para todo el diseño de la página, de tal modo que está todo maquetado con divs.

Esto quiere decir que hay divs que abarcarían más de un require. Tecnicamente no habría ningún problema con la página, se vería correctamente. Pero me parece un tanto "chapucero" tener los modulos así, sin ser independientes y requiriendo a otros modulos pare cerrar o abrir etiquietas....

¬_¬
Bueno .. eso son los "pro's y contras" del sistema "modular" .. Como te comentaba josemi existen otras técnicas: uso de "templates" (plantillas) ..

Sería bueno que evaluases el uso de "templates" .. porqué de esa forma puedes diseñar con total libertad tus "bloques" y "mascaras" de tus páginas .. separando el diseño completamente del código .. posibilidad de alternar de diseño comodamente (tan sólo diseñando nuevos "templates" ..) .. soportan o incluyen sistema de "caché" .. etc.

Puedes ver por ejemplo:
Smarty (http://smarty.php.net)
NokTemplates ...
etc..

Un saludo,
  #9 (permalink)  
Antiguo 15/03/2005, 15:37
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
La verdad es que no había mirado el tema de los templates, sabía que existían, pero poco más. Les echaré un vistazo, que tienen muy buena pinta.

El problema es que ando muy escaso de tiempo y así tendría que empezar casi de cero otra vez.

Voy a ir mirando poco a poco los templates, quizás para ponerme con ellos en una siguiente versión de la web (la razón primordial por la que la desarrollo es aprender). De momento creo que voy a tirar con una solución un tanto "casera":

Seguiré como ahora, con un index.php que incluya el diseño y la llamada a los modulos, pero con un par de diferencias:

- La comprobación del modulo y el require (o require_once) lo haré al principio.
- Los módulos tendrán una parte que se ejecutará en el momento de realizarse el require. En ésta parte se evaluarán los parametros pasador por url y se generará el titulo de la página.
- luego seguirá la ejecución del index.php, que incluirá una función que escriba la cabecera HTML, donde le pasaré el titulo que he creado antes (lo que ha sugerido josemi).
- Seguirá el index, con lo demás que tenga que mostrar o cargar....
- Y dónde deba mostrar el modulo en sí (ya sean noticias o comentarios o lo que fuera) meteré una llamada a una función que exista en TODOS los módulos (y recordemos que sólo se cargará uno por página). Esta función incluirá, en cada módulo, todo lo que tenga que mostrar. En algunos casos precisará de información y variables modificadas anteriormente así que tendré que andar con cuidado con las variables.
- Y debajo de eso el resto... (pie o lo que sea).

Puede que sea una solución un poco chapucera, pero para lo que quiero se adapta bien, tal vez hasta que esté lo suficiente preparado como para dar el paso a los templates.

Gracias por echarme una mano en el tema.

Mmm, una dudilla que me ha venido ahora sobre la marcha, ¿cúal es al diferencia entre recoger una variable pasada por url con su nombre o con GET ?

Saludos!
  #10 (permalink)  
Antiguo 15/03/2005, 15:41
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Cita:
Mmm, una dudilla que me ha venido ahora sobre la marcha, ¿cúal es al diferencia entre recoger una variable pasada por url con su nombre o con GET ?
Lee los primeros mensjaes de las FAQs, las que tratan sobre el register_globals.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 15/03/2005, 15:44
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Okis, me ha venido a la mente mientras escribía el post, me tengo que poner algo al día.

Gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:26.