Bonsoir,

je suppose que les robots indexeur de pages lisent le code php des pages web de façon interprété. Smiley biggrin A priori, selon moi ils agissent un peu comme un client, donc ils envoient une requête, et le serveur distant envoie le résultat de la requête. Smiley lol

Dans ce cas, ma question concerne les titres de page inclus dans des
include("fichier.php");


Exemple :
J'ai ma page index.php sans balise <title> dans le head qui inclue (index.php?page=contenu.php) une page avec du contenu (contenu.php) dans le body de index.php. La page contenu.php possède une balise title. Cette balise title se retrouve donc au beau milieu du code dans le body de index.php et non au début du head d'index.php comme celà est souvent le cas pour les balises title.

Comment faire, celà est-il recommandé ? Existe t-il une autre technique ? En d'autres termes, qu'en pensez-vous au niveau du référencement et de la "propreté" du code ? Smiley confused

Dans l'attente, merci. Smiley cligne
Modifié par erreur404 (07 Nov 2006 - 18:51)
Administrateur
Hello,

C'est assez simple : seule la page "mère" doit avoir l'architecture d'un document HTML (doctype, html, head, body, title, meta).
Tous les fichiers qui seront inclus devront être considérés comme des copier-coller au sein d'un document HTML et ne devront surtout pas avoir de doublons dans la structure HTML.

En résumé, le title doit se trouver uniquement dans la page mère.
Si tu veux avoir un title différent à chaque page, il suffit de procéder dynamiquement en PHP : tu affectes une variable à chaque page et le contenu de cette variable s'affichera dans le title.
Modifié par Raphael (07 Nov 2006 - 19:00)
Raphael, j'ai bien lu ton message et je t'en remercie.

Cependant, ta réponse induit une nouvelle question !

Imaginons que dans ma page mère j'ai le code suivant :
<title><?php echo $titre; ?></title>

Et dans la page inclue :
<?php $titre = "Mon titre"; ?>


Comme la variable $titre sera lue (echo $titre; ) dans la page mère avant qu'elle ait été déclarée ($titre = "Mon titre"; ) dans la page fille, ça risque de ne pas marcher ? Ai-je looper une subtilité ? Smiley langue

Sur ce, je vais rejeter un coup d'oeil sur le PHP Smiley ravi
Modifié par erreur404 (16 Nov 2006 - 21:47)
Salut,
erreur404 a écrit :
Comme la variable $titre sera lue (echo $titre; ) dans la page mère avant qu'elle ait été déclarée ($titre = "Mon titre"; ) dans la page fille, ça risque de ne pas marcher ? Ai-je looper une subtilité ? Smiley langue
En effet, ça risque de ne pas marcher. Smiley cligne
erreur404 a écrit :
Sur ce, je vais rejeter un coup d'oeil sur le PHP Smiley ravi
Bonne idée ! Et bon courage. Smiley smile
Salut,

a écrit :
Comme la variable $titre sera lue (echo $titre; ) dans la page mère avant qu'elle ait été déclarée ($titre = "Mon titre"; ) dans la page fille, ça risque de ne pas marcher ? Ai-je looper une subtilité ? langue

Sauf erreur de ma part, la page en php et ses inclusions sont traitées sur le serveur avant d'être renvoyée donc je suppose que l'information une fois traitée tiens compte de toutes les morceaux de codes, inclus ou non, qui font partie de la page définitive. Peut être que je me trompe, ca mérite un test Smiley lol
Modérateur
En fait, si la variable $titre est déclarée seulement dans l'include, la page-mère elle, ne connaît pas cette variable. Le code est interprété de façon linéaire, de haut en bas. Donc le début du code de la page-mère, ensuite l'include, ensuite le reste de la page-mère. Le problème n'est pas relié au fait que ce soit un include ou non, le fait est que si tu veux utiliser une variable à la ligne de code 14 mais que cette variable n'est déclarée qu'à la ligne 127, forcément, ca ne fonctionnera pas.

Pour résoudre le problème, il faut définir la variable $titre dans la page-mère. Pour la définir, il faut utiliser la même technique qui est utilisée pour inclure l'include selon la variable passée en paramètre.

Pseudo-code de la page-mère :

Si (monparametre egal "accueil")
alors $titre = "Bienvenue sur l'accueil"
Sinon si (monparametre egal "contact")
alors $titre = "Contactez-nous !"
etc....

De préférence, il vaut mieux utiliser un switch/case ou encore un array.
Modifié par Tony Monast (17 Nov 2006 - 18:20)
Bonsoir,

J'ai suivi ce tuto http://css.alsacreations.com/Tutoriels-PHP/Inclure-un-fichier-dans-un-autre-grace-a-CSS-et-PHP qui, je dois le préciser est très bien fait. Donc je me dis super ! cela va grandement alleger mon code ainsi que la maintenance du site.

Seulement voila, se pose un problème que je n'arrive pas à résoudre depuis quelques jours : comment faire en sorte que le titre des pages change en fonction de la page inclue dans le index.php ?

La réponse de Tony Monast parait être une bonne piste mais malgré mes nombreuses recherches, je n'ai pas de connaissances suffisantes en php pour trouver la réponse.

Donc merci par avance à ceux qui ont trouvé une solution, de bien vouloir éclairer ma lanterne Smiley smile
Alors en fait, voici deux solutions parmi tant d'autres :

Je commence par la première :

[b]Page mère[/b]

$includes = array(
'page1' => array('file' => 'fichier1.php', 'title' => 'Titre de la page 1')
,'page2' => array('file'=>'fichier2.php', 'title'=>'Titre de la page 2')
,'page3'=>array('file'=>'fichier3.php', 'title'=>'Titre de la page 3') );

$file = "default.php"; $title="Titre par défaut";

if (isset($_GET['page']) && isset($includes[$_GET['page']])) {
$t = $includes[$_GET['page']];
$file = $t['file'];
$title = $t['title'];
}

// ...
echo "<title>$title</title>\r\n";
// ...
include($file);


ET en voici une seconde, utilisant la bufférisation de sortie :

[b]Page mère[/b]
function ob_work ($str) {
global $title;
return str_replace('%title%', $title, $str);
}

// ...

ob_start("ob_work");

// ...

echo "<title>%title%</title\r\n";

// ...

ob_end_flush();


[b]Page fille[/b]
$title = "Mon titre";

Modifié par QuentinC (22 Nov 2006 - 06:19)
Mille mercis QuentinC Smiley biggrin
C'est exactement ce que je recherchais.
Je n'ai testé que la première solution car c'est celle que je comprends le mieux. Ca marche très bien.

Encore merci pour la rapidité et l'exactitude de ta réponse Smiley cligne