[Création de titres et descriptions dynamiques]

Nouveau WRInaute
Bonjour à tous,

N'étant pas forcément très calé en PhP, je me tourne vers la communauté de WRI pour m'éclairer sur le problème du titre dynamique.

Je travaille donc sur un site où toutes les pages intègrent la même entête et pied de page, grâce à des fonctions "include". En gros chaque page est codée selon le modèle:

Code:
<?php

include("haut_page.php");

?>

[corps de la page...]


<?php

include("bas_page.php");

?>

Le fichier haut_page.php contient donc le doctype, et les balises <title> et <meta description>.

J'aimerais pouvoir installer un titre et une description différents sur toutes mes pages, sans avoir à éclater la structure actuelle du site. J'ai appris que cela était possible en utilisant un script (dans les balises concernées), relié à deux bases de données (une pour les titre et une pour les descriptions).

Le soucis, c'est que je ne sais pas du tout comment m'y prendre. J'ai trouvé des tutos assez bien détaillés pour créer des bases de données sur EasyPhP, mais ce ne sont souvent que des aides pour le prendre en main...

Si vous avez du temps pour m'expliquer la subtilité du système, ce serait vraiment sympathique! :)

Merci d'avance ^^
 
WRInaute discret
Bonjour,

J'ai déjà fait ce type de manip pour quelques sites.
Le principe est assez simple, encore faut-il avoir des bases suffisantes en php et bases de données.

La démarche varie selon la structure éditoriale du site.
Les pages sont-elles le reflet d'une rubrique (ou sous-rubrique) ? un condensé d'articles ? ou bien chaque page correspond à un seul article ?

Globalement, l'idée est :
1. de récupérer le titre de l'article ou de la rubrique depuis la base de données
Code:
$query = "SELECT * FROM `rubriques` WHERE `index` = ".$idrubrique; // $idrubrique = id de la rubrique dans la table rubriques (à adapter selon vos noms de tables et de champs - fonctionnement idem pour les articles)
$result = mysql_query ( string $query [, resource $link_identifier ]) or die(mysql_error()); // construire cette ligne en fonction des paramètres de connexion à la sa bdd
$row = mysql_fetch_assoc($result);
$titre = stripslashes($row['titre']); // titre est le nom du champs titre dans la bdd
$desc = strip_tags(stripslashes($row['description'])); // description est le nom du champs description dans la bdd

2. de l'injecter dans la balise title
Code:
<title><?php echo $titre_issu_de_la_bdd;?></title>

On procède de la même manière pour la description :
Code:
<meta name="description" content="<?php echo $description_issue_de_la_bdd;?>" />
Si on n'a pas prévu de champs description dans la bdd, il est possible d'extraire les 175 premiers caractères du contenu (le plafond est de 176 caractères pour google)
Mais je conseille vivement d'intégrer un champs description spécialement dédié.

Il est possible de peaufiner la démarche en conditionnant les résultats selon certains critères.
Ainsi une fonction à base de switch permettra de nuancer les résultats et éventuellement éviter les répétitions de même titres et/ou descriptions dans plusieurs pages.
Cette procédure peut aussi, pour des petits sites, se suffire à elle-seule.
Exemple :
Code:
switch($idrubrique) {
case 1 : // rubrique produits
$titre = "Société MACHIN - Liste des Produits";
$description= "Découvrez tous nos produits...";
break;
case 2 : // rubrique services
$titre = "Société MACHIN - Liste des Services";
$description= "Découvrez l'ensemble de nos services...";
break;
case 3 : // rubrique contact
$titre = "Société MACHIN - Nous contacter";
$description= "Pour nous contacter téléphonez au...";
break;
default : // pour la page d'accueil par exemple
$titre = "Société MACHIN - Spécialiste du TRUCMUCHE - MACHIN-CHOSE";
$description= "Blabla de présentation...";
break;
}
On n'oublie pas, bien sur, d'injecter les résultats ($titre et $description) dans les meta correspondant.

Tout cela se construit évidement en amont, afin de pouvoir injecter tout le contenu dans le head de la page.
Pour ma part, j'utilise un fichier header.php qui contient les scripts spécifiques à cette partie de mes pages.

Je reviens sur le fait qu'une connaissance de base en php et sql est nécessaire.
 
WRInaute accro
dolmenhir a dit:
Je reviens sur le fait qu'une connaissance de base en php et sql est nécessaire.

Toutafé.
La question de base c'est "comment je structure mes données". Pour ça tu peux t'inspirer de systèmes de blogs assez bien faits, comme WordPress ou Dotclear, et regarder un peu dans le moteur.
L'idée globale étant d'avoir une base de données avec des "pages" (contenu) et tout ce qui s'y rapporte, url, meta, etc...

Ensuite ton fichier header.php doit appeler le contenu de la page à afficher
 
WRInaute passionné
@dolmenhir : prendre une enclume pour écraser une mouche, voilà à quoi ton 1er code me fait penser (mais ça reste une solution).

Le 2ème code me semble mieux, mais encore trop recherché à priori pour les besoins de AjaxGin.


Perso, je verrai plus qq chose comme ça :
Code:
<?php
$titre = "Société MACHIN - Liste des Produits";
include("haut_page.php");
?>

[corps de la page...]

<?php include("bas_page.php"); ?>
... et "haut_page.php" utiliserait la variable $titre pour afficher le titre.

Même chose pour description.
 
WRInaute discret
SpeedAirMan a dit:
@dolmenhir : prendre une enclume pour écraser une mouche, voilà à quoi ton 1er code me fait penser (mais ça reste une solution).
j'ai un site qui compte plusieurs centaines de pages, et là le premier code trouve toute sa légitimité car la dynamique d'extraction des données allège la gestion.
Pour les sites pas plus gros qu'une mouche (si petit ? ça existe ??) le switch peut suffire amplement, et permet une gestion centralisée des titres et des descriptions (grâce à la page header.php que l'on place via un include).
Ce switch peux servir à plein de choses d'ailleurs, par exemple activer certains scripts uniquement sur les pages qui en ont besoin (comme le googlemap et son onload), ou changer de feuille de styles... et c'est sans limite a condition que le site lui en ait une (sinon ça devient l'usine à gaz)
 
WRInaute accro
Le problème réside surtout dans la création du template.

Inclure "haut_page.php" avant même d'avoir traité les données, ce n'est pas malin, car s'il faut aller chercher les éléments en db, il va falloir faire une requête de plus pour rien.

L'idéal est plutôt:

En 1er: traiter les variables et de déterminer le contenu des différents éléments, de sorte à les stocker dans des variables et à pouvoir les réutiliser par la suite.

En 2nd: inclure les fichiers requis, et faire l'output des infos stockées dans les variables.

Exemple:

Code:
<?php

$page_id = $_GET['p_id'];

> requêtes et sous-requêtes nécessaires à l'extraction des données
> traitement des données et stockage dans les différentes variables (ie: $p_title = $page_title.' | Mon Site'; etc...), création des éléments comme le menu, le contenu des différents conteneurs, etc...

?>
<?php 
include('haut_page.php'); // lequel fait par exemple l'output de $p_title dans <title><?php print $p_title; ?></title>
?>

<div id="header">
<?php include('page_header'); ?>
</div>

<div id="menu">
<?php print $menu; // déterminé plus haut ?>
</div>

<div id="contenu">
<?php print $content; // déterminé plus haut ?>
</div>

<div id="footer">
<?php print $footer; // déterminé plus haut ?>
</div>
 
WRInaute discret
HawkEye a dit:
Inclure "haut_page.php" avant même d'avoir traité les données, ce n'est pas malin, car s'il faut aller chercher les éléments en db, il va falloir faire une requête de plus pour rien.
Je confirme !
C'est pour cela que je disais qu'il fallait traiter cela en amont, c-a-d avant l'écriture du head (ce qui est fort logique du reste).
C'est d'ailleurs très précieux de collecter l'ensemble des données avant de construire sa page et de stocker cela dans des variables (certaines de session pour des traitements transversaux)
 
Nouveau WRInaute
Merci pour vos réponses !

J'ai des notions de bases en PhP/MySQL, mais seront elles-suffisantes? On va bien voir.

En tout cas, je vais essayer vos codes, merci encore :)
 
Discussions similaires
Haut