Foros del Web » Programando para Internet » PHP »

Web modular y titulos

Estas en el tema de Web modular y titulos en el foro de PHP en Foros del Web. Hola a tod@s. En esta ocasión me dirijo a vosotr@s, ya que hay una cuestión que me trae de cabeza y no sé como solucionarla. ...
  #1 (permalink)  
Antiguo 28/08/2006, 23:05
Avatar de Nemo1  
Fecha de Ingreso: marzo-2005
Ubicación: Jerez de la Ftra. (Cádiz)
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
Web modular y titulos

Hola a tod@s.

En esta ocasión me dirijo a vosotr@s, ya que hay una cuestión que me trae de cabeza y no sé como solucionarla.

Tengo una web modulada mediante switchs cuyo código es el siguiente (está resumido para no cansar)
Código:
<? 
switch ($_GET["seccion"]){ 
  case 'articulos'; 
    $incluir = 'articulos/index.php'; 
    $titulo = 'Art&iacute;culos'; 
    break;
default: 
    $incluir = 'includes/home.php'; 
    $titulo = 'Los mejores art&iacute;culos'; 
} 
?>
<html>
<head>
<title><? echo $titulo; ?></title>
</head>
<body>
<? include $incluir; ?>
</body>
</html>
Bien, mi "problema" es que por más que lo intento no consigo que muestre los títulos de los artículos, en la parte superior del navegador, tan sólo consigo mostrar el nombre de las secciones.

Decir que los artículos los extraígo de una base de datos y creo que tal vez ese sea el motivo por lo cual no se muestran, pero no sé como solucionarlo.

El código que utilizo para extraer el texto de la base de datos es el siguiente:
Código:
<?
include ('configuracion.php');
global $conexion;
conectar();
$sql="SELECT * FROM articulos WHERE id = '$id'";
$result=mysql_query($sql,$conexion);
while($row=mysql_fetch_array($result)){
    $titulo=$row['titulo'];
    $texto=$row['texto'];
    $autor=$row['autor'];
    $web=$row['web'];
    $id=$row["id"];
$count=$row["count"]; 
$count++; 
$update = "UPDATE articulos SET count='$count' WHERE id=$id"; 
$updatesql = mysql_query($update);

    echo "$titulo";
    echo "Autor del art&iacute;culo: $autor <br /><br />";
    echo "$texto";
}
desconectar();
?>
Quedaría eternamente agradecido si alguien me pudiese dar una posible solución o pista, para conseguir el efecto que quiero.

Un cybersaludo y quedo en espera de vuestras respuestas.
  #2 (permalink)  
Antiguo 29/08/2006, 02:31
Avatar de kennyhp  
Fecha de Ingreso: julio-2006
Mensajes: 370
Antigüedad: 17 años, 9 meses
Puntos: 5
Puede ser que lo que pase es lo siguiente:

Cita:
case 'articulos';
No se si el ; es que lo tienes así o un error al pasarlo aquí, compruebalo por que tendria que ser

Cita:
case 'articulos':
  #3 (permalink)  
Antiguo 29/08/2006, 13:44
Avatar de Nemo1  
Fecha de Ingreso: marzo-2005
Ubicación: Jerez de la Ftra. (Cádiz)
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
Gracias por tu respuesta kennyhp, pero el código no me da error, ya que muestra el título que defino en el mismo (primer código que he posteado anteriormente).

Lo que necesito conseguir es que cuando se vaya a leer el artículo (el segundo código que he posteado anteriormente) se extraígan los datos de la variable $titulo de la base de datos y que muestre el título del artículo en la barra superior del navegador, y no el título de la sección que está predefinido en el primer código.

Espero alguna sugerencia más, en el caso de que sea posible realizar lo que pretendo hacer.

Un cybersaludo y gracias por las posibles respuestas.
  #4 (permalink)  
Antiguo 29/08/2006, 14:06
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Hola!

Deberias realizar una función y llamarla en el title

<title><?php echo title(); ?></title>

Ahora bien, la funcion debe tener varios "niveles" de profundidad, utilizando el mismo formato que utilizas para el modulo, ej:
Código PHP:
<?php
function title() {
  switch(
$_GET['mod']) {
    default: 
$title 'MiSitio.com'; break;
    case 
'legal'$title 'MiSitio.com - Nota legal'; break;
    case 
'articulos':
      if (
$_GET['id']) {
        
$_sql mysql_query("SELECT `title` FROM `articulos` WHERE `id` = '$_GET[id]'");
        if (
$row mysql_fetch_assoc($_sql)) { $title 'MiSitio.com - '.$row['title']; }
        else { 
$title 'MiSitio.com - Articulo no encontrado'; }
      }
      else { 
$title 'MiSitio.com - Articulos'; }
    break;
  }
  return 
$title;
}
?>
Bueno, es un ejemplo, asi mismo cuando trabajas con dos niveles puedes hacer un switch() dentro de otro, ejemplo

Código PHP:
<?php
switch($_GET['mod']) {
  case 
'futbol':
    switch(
$_GET['sub']) {
      case 
'plantel': include('...'); break;
      case 
'fixture': include('...'); break;
      case 
'entrevistas': include('...'); break;
      default: include(
'...'); break;
    }
  break;
  case 
'otro_modulo':.....
}
?>
Otra cosa util es que si en el "home" de la pagina tenes listadas las ultimas noticias, el titulo de la pagina sea el titulo de la ultima noticia subida, ej:
'Programaphp.com - Creando webs modulares'

Espero haberte ayudado.
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 29/08/2006, 18:56
Avatar de Nemo1  
Fecha de Ingreso: marzo-2005
Ubicación: Jerez de la Ftra. (Cádiz)
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
Muchas gracias por tu respuesta Fulano, pero...

He seguido el código que me has mostrado y lo he insertado en mi archivo modular.php, que es donde tengo los switch para la modulación y no consigo que funcione, es más me aparece el siguiente error:

Warning: main() [function.include]: Failed opening '' for inclusion (include_path='.;C:\php5\pear') in c:\AppServ\www\miweb\index.php on line 12

Y por más que intento comprender que ocurre en dicha línea no se soluciona.

El código que tengo en el index.php es el siguiente:

Código:
<? include("inc/modular.php"); ?>
<? include("modulos/cabecera.php"); ?>
<table width="100%" border="0">
  <tr>
    <td colspan="2"></td>
  </tr>
  <tr>
    <td width="20%" valign="top"><!--Menú secciones-->
<? include("modulos/menu.php"); ?></td>
    <td width="80%" valign="top"><!--Contenido dinámico--><br />
<br />
<? include $incluir ?></td>
  </tr>
  
  <tr>
    <td colspan="2"><!--Pié de página-->
<? include("modulos/pie.php"); ?></td>
  </tr>
</table>
</body>
</html>
O yo soy muy toooorrrrrrrpeeeeee o no sé que pasa (creo que lo primero) .
En fin muchísimas gracias por el tiempo que te has tomado en responderme y disculpa las molestias que te haya podido causar.

Un cybersaludo y gracias de nuevo.
  #6 (permalink)  
Antiguo 29/08/2006, 19:31
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Deberia ser include($incluir); y no include $incluir

Código PHP:
<?php include("inc/modular.php"); ?>
<?php 
include("modulos/cabecera.php"); ?>
<table width="100%" border="0">
  <tr>
    <td colspan="2"></td>
  </tr>
  <tr>
    <td width="20%" valign="top"><!--Menú secciones-->
<?php include("modulos/menu.php"); ?></td>
    <td width="80%" valign="top"><!--Contenido dinámico--><br />
<br />
<?php include($incluir); ?></td>
  </tr>
  
  <tr>
    <td colspan="2"><!--Pié de página-->
<?php include("modulos/pie.php"); ?></td>
  </tr>
</table>
</body>
</html>
Por cierto, siempre recuerda comenzar con <?php en lugar de solo <? (Esto ultimo puede traerte problemas en algunos hosts debido a que XML se abre de la misma forma...
__________________
I Love Programming...
  #7 (permalink)  
Antiguo 30/08/2006, 09:10
Avatar de Nemo1  
Fecha de Ingreso: marzo-2005
Ubicación: Jerez de la Ftra. (Cádiz)
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
Otra vez te doy las gracias por la paciencia que estás teniendo.

Lo que me comentas sobre el include, ya lo había probado pero sigue saliendo el mismo mensaje de error.

Creo que me voy a dar por vencido ya que parece ser que no soy capaz de hacerlo funcionar correctamente, ni con el código que me has posteado ni con el mío. Por lo que dejaré mi web tal y como la tengo y me resignaré a no poder mostrar los títulos. Al menos hasta que investigue más sobre el tema.

Un abrazo y disculpa todas las molestias.
  #8 (permalink)  
Antiguo 30/08/2006, 10:59
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
a ver, pero si creas la funcion como te dije no necesitas utilizar el mismo switch() para cargar el modulo y el titulo, entonces el switch() del modulo lo haces directamente donde debe cargarse, sin variables

Código PHP:
<?php include("inc/modular.php"); ?> 
<?php include("modulos/cabecera.php"); ?> 
<table width="100%" border="0"> 
  <tr> 
    <td colspan="2"></td> 
  </tr> 
  <tr> 
    <td width="20%" valign="top">
    <!--Menú secciones--> 
<?php include("modulos/menu.php"); ?></td> 
    <td width="80%" valign="top">
    <!--Contenido dinámico--><br /> 
<br /> 
<? 
switch ($_GET["seccion"]){ 
  case 
'articulos'
    include(
"articulos/index.php");
    break;
default: 
    include(
"includes/home.php");  

?>
    </td> 
  </tr> 
   
  <tr> 
    <td colspan="2"><!--Pié de página--> 
<?php include("modulos/pie.php"); ?></td> 
  </tr> 
</table> 
</body> 
</html>
Prueba eso así sabremos si el problema esta en la variable (que al parecer es eso pues parece que no tuviera valor el include...)
__________________
I Love Programming...
  #9 (permalink)  
Antiguo 30/08/2006, 13:38
Avatar de Nemo1  
Fecha de Ingreso: marzo-2005
Ubicación: Jerez de la Ftra. (Cádiz)
Mensajes: 13
Antigüedad: 19 años
Puntos: 0
De acuerdo Problema solucionado :-)

Hola nuevamente FuLaNo_, y gracias por tu paciencia y por tu ayuda.

Resulta que se me ha ocurrido emplear parte de tu idea y... ¡ha funcionado!

Posteo aquí el código para que le sirva a otros foreros.

Código PHP:
//archivo index.php
<? 
switch ($_GET["seccion"]){ 
  case 
'articulos'
    
$incluir 'articulos/index.php'
    
$titulo 'Art&iacute;culos Inform&aacute;ticos'
    break;  
case 
'leer_articulo'
    
$incluir 'articulos/leer.php';
//a partir de aquí he comenzado la modificación en el código original 
    
include ('inc/configuracion.php');
    global 
$conexion;
    
conectar();
    
$sql="SELECT titulo FROM articulos WHERE id = '$id'";
    
$result=mysql_query($sql,$conexion);
    while(
$row=mysql_fetch_array($result)){
        
$titulo 'Art&iacute;culos Inform&aacute;ticos - ' $row['titulo'];

//aquí finaliza la modificación del código original
    
break;
default: 
    
$incluir 'includes/home.php'
    
$titulo 'Mi Web'

?>
<html>
<head>
<title><? echo $titulo?></title>
</head>
<body>
<? include $incluir?>
</body>
</html>
Como verás sólo he añadido la conexión a la base de datos en el case para leer el artículo.

Y en el archivo leer.php, he eliminado el archivo de conexión, para que no se vuelva a declarar y me de error (lo posteo para futuras referencias).
Código PHP:
//archivo leer.php
<?
global $conexion;
conectar();
$sql="SELECT * FROM articulos WHERE id = '$id'";
$result=mysql_query($sql,$conexion);
while(
$row=mysql_fetch_array($result)){
    
$titulo=$row['titulo'];
    
$texto=$row['texto'];
    
$autor=$row['autor'];
    
$web=$row['web'];
    
$id=$row["id"];
$count=$row["count"]; 
$count++; 
$update "UPDATE articulos SET count='$count' WHERE id=$id"
$updatesql mysql_query($update);

    echo 
"$titulo";
    echo 
"Autor del art&iacute;culo: $autor <br /><br />";
    echo 
"$texto";
}
desconectar();
?>
Muchas gracias nuevamente por ser tan paciente, pero es que cuando tengo la cabeza saturada, como que no pienso bien.

Un cybersaludo saludo desde Jerez de la Ftra.
  #10 (permalink)  
Antiguo 30/08/2006, 14:00
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
a bueno es que, para mi la conexión era una obviedad, pido disculpas por eso :s

El tema es que lo estas tratando mal, en un sitio modular la idea es reutilizar codigo, por ello la conexión sql es lo primero que deberias realizar, yo en mis sitios lo que hago es

Código PHP:
<?php
include("includes/db.php"); // conexion mysql
include("includes/users.php"); // reconocimiento de usuarios
include("includes/funciones.php"); // resto de las funciones (bbcode, etc)
?>
<html>
  <head>....</head>
  <body>
    <?php
      
include("modulos/haeder.php"); // titulo del sitio
      
include("modulos/modulos.php"); // cargador de modulo
      
include("modulos/bottom.php"); // pie de pagina
    
?>
  </body>
</html>
Es un ejemplo pero, como vez solo utilizo una conexión a la base de datos, para no tener que estar conectandome cada 3 segundos, por ello no puse la conexión en la funcion que recoje el titulo, porque en mi caso la conexión ya existiria...

Y no te preocupes que todos nos trabamos en algo, gracias a dios existen los foros ;)
__________________
I Love Programming...
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 01:48.