Foros del Web » Programando para Internet » PHP »

Cambiar metadatos con header() dependiendo del contenido

Estas en el tema de Cambiar metadatos con header() dependiendo del contenido en el foro de PHP en Foros del Web. Primero os explico brevísimamente (y resumiendo un poco) la estructura de la página. Tengo una página en la que el index.php pinta algo así: Código ...
  #1 (permalink)  
Antiguo 15/12/2011, 08:20
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 12 años, 4 meses
Puntos: 2
Cambiar metadatos con header() dependiendo del contenido

Primero os explico brevísimamente (y resumiendo un poco) la estructura de la página.

Tengo una página en la que el index.php pinta algo así:

Código PHP:
<?php
//INCLUIR CABECERA
include ("cabecera.php");

//INCLUIR MENU PRINCIPAL
include ("menu.php");
?>

<?php
//INCLUIR EL CONTENIDO DE LA PÁGINA
include ('content.php');
?>

<?php
//INCLUIR EL PIE DE PÁGINA
include ("pie.php");
?>

En cada archivo php incluido hay un div, siendo los de cabecera.php, menu.php y pie.php comunes a todas las páginas.

El contenido de content.php varía dependiendo de la opción escogida en el menú. Esta variable se traspasa en la url del enlace por GET. Así, por ejemplo, al enlazar a "/index.php?content=contacto" se mostrará el formulario de contacto.

Lo que me gustaría hacer es que dependiendo del contenido de la página se incluya en la cabecera unos metadatos u otros.

Se me ha ocurrido que podría funcionar con la función header() y la misma variable que uso para determinar el contenido ($content). Pero no soy capaz de hacerlo funcionar.

A ver si me orientais un poco. Muchas gracias.
  #2 (permalink)  
Antiguo 15/12/2011, 08:21
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar metadatos con header() dependiendo del contenido

¿Que "metadatos" quered agregarle?
  #3 (permalink)  
Antiguo 15/12/2011, 08:28
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Cambiar metadatos con header() dependiendo del contenido

Pues me gustaría que la descripción y las palabras clave fuesen distintos dependiendo del contenido.

Es decir, lo que quiero es que las siguientes etiquetas sean variables:

Código HTML:
<meta name="description" content="Descripción de la página" />
<meta name="keywords" content="palabra1, palabra2,..." /> 
El contenido del content, en estas dos etiquetas me gustaría definirlo según los valores de una variable.

Había pensado que tal vez podría ser un array donde una variable $keywords (por ejemplo) tomase distintos valores dependiendo de la variable $content que muestra el contenido. Pero no sé como hacerlo.
  #4 (permalink)  
Antiguo 15/12/2011, 08:30
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Cambiar metadatos con header() dependiendo del contenido

Antes de header.php podes agregar un archivo core.php donde ahi modificas las keywords segun la pagina.

y despues en header.php la imprimis con <?php echo $keywords; ?>
  #5 (permalink)  
Antiguo 16/12/2011, 14:41
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Cambiar metadatos con header() dependiendo del contenido

Gracias por tu respuesta macrofbb, pero esa parte la tenía clara. La duda estaba en qué debería poner en ese archivo (o en el mismo index, que también podía ser) para obtener el contenido de esas metaetiquetas distinto según el contenido.

Al final no he utilizado la función header(), pero he conseguido el resultado que buscaba de la siguiente manera (por si le vale a alguien más).

Además de lo que ya dije en el primer mensaje, para seleccionar el idioma de la págian utilizo lo siguiente:

Código PHP:
<!-- Selección de Idioma*/ -->

<?php  
    session_start
();  


    if(!isset(
$_SESSION['idioma']) || !empty($_GET['lang']))
    {  
        if(empty(
$lang))
        {  
            
$lang="es";
$lang = isset($_GET['lang']) ? $_GET['lang'] : "es";
        }  
        
$_SESSION['idioma']=$lang;  
    }  
    switch (
$_SESSION['idioma']) {  
    case 
$_SESSION['idioma']: require("lang/".$_SESSION['idioma']."/".$_SESSION['idioma'].".php"); break; }  
?>
Este código está en el fichero code.php, que se incluye al principio de todo el index.php

Código PHP:
<?php
//SE INCLUYE EL FICHERO core.php QUE CREAMOS
include ("resources/core.php");
?>

<!DOCTYPE html>

<html>

<div id="contenedor">

<?php 
//INCLUIR CABECERA 
include ("cabecera.php"); 

//INCLUIR MENU PRINCIPAL 
include ("menu.php"); 
?> 

<?php 
//INCLUIR EL CONTENIDO DE LA PÁGINA 
include ('content.php'); 
?> 

<?php 
//INCLUIR EL PIE DE PÁGINA 
include ("pie.php"); 
?>

</div>

</html>


Con él lo que consigo es que, dependiendo de la opción de idioma escogida el texto que se muestre sea en un idioma u otro. Para ello tengo un fichero por idioma donde defino los arrays de las variables de las distintas páginas.

La idea es aprobechar estos ficheros para crear en ellos otros arrays de $keywords y $description que, dependiendo de la variable $content que se pasa en la url para mostrar el contenido, muestren una cosa u otra.

La idea es, que sin pasar más variables pueda modificar la descripción y las palabras clave de cada sección de la página. Además, estas palabras serán traducidas junto con el contenido de la página.

Así, por ejemplo, en el archivo es.php que incluye los textos en español, incluyo lo siguiente:

Código PHP:
$keywords = array (
    
"default" => "keywords, para, cuando, content no tiene valor",
    
"contenido/nosotros.php" => "keywords, para, apratado, nosotros",
    
"contenido/contacto.php" => "keywords, para, apartado, contacto",
    
"contenido/productos.php" => "keywords, para, apartado, productos",
    );
$description = array (
    
"default" => "descripción para cuando content no tiene valor",
    
"contenido/nosotros.php" => "descripción para el apratado: nosotros",
    
"contenido/contacto.php" => "descripción para el apartado: contacto",
    
"contenido/productos.php" => "descripción para el apartado: productos",
    ); 

Por otra parte, en el documento core.php incluyo lo siguiente justo después del código que antes señalé:

Código PHP:
<!--Metadatos según contenido -->

<?php 

if(!isset($_GET['content']))
    {
    
$content="default";
    }
    else {
$content $_GET['content']; 
}
?>
<meta name="keywords" content="<?php echo $keywords[$content]; ?>" />
Así, cuando cargo la página principal, $content todavía no tiene valor, y al ver el código encuentro esto:

Código HTML:
<!--Metadatos seg�n contenido -->



<meta name="keywords" content="keywords, para, cuando, content no tiene valor" />

<meta name="description" content="descripción para cuando content no tiene valor" /> 
Pero cuando estoy en el apartado "contacto" el código de la página es el siguiente:


Código HTML:
<!--Metadatos seg�n contenido -->



<meta name="keywords" content="keywords, para, apartado, contacto" />

<meta name="description" content="descripción para el apartado: contacto" /> 
¡Conseguido!

Supongo que a algunos les parecerá trivial, pero yo no he visto hacer esto antes, y espero que a otros les sirva.

Un saludo a todos.

Etiquetas: contenido, dependiendo, formulario, header, metadatos, variables
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 13:26.