Utiliser la balise h1 comme titre de la page dans <head><title>

Eléphanteau du PHP | 27 Messages

29 avr. 2009, 16:17

Bonjour,

J'ai créé mon site en PHP avec des includes pour faciliter sa mise à jour.
Sur chacune de mes pages j'inclus un fichier head.php avec mes balises head.
Dans ce fichier se trouve la ligne suivante:
<TITLE>Le titre de ma page</TITLE>

Je voudrais savoir si il est possible d'y intégrer un script php qui pourrait recopier le texte de la balise <h1> à la place du titre de la page.

Afin d'avoir un titre différent sur chacune de mes pages.
sur http://www.depanne-pc.be/fr/services.html le titre serait Nos Services vu que c'est la balise H1
sur http://www.depanne-pc.be/fr/tarifs.html le titre serait Nos tarifs vu que c'est la balise H1

En espérant que ce soit possible,

Merci d'avance pour votre aide,

Subran

ViPHP
ViPHP | 3300 Messages

29 avr. 2009, 16:31

le php intervient côté serveur, cad qu'il permet de produire l'information qui construit le html, ce que tu veux faire ressemble plutot à un travail intervenant côté client cad qui serait fait en javascript
Fait du php depuis que ca existe ou presque :)

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 avr. 2009, 16:43

<?php
$titre = "Ceci est le titre de ma page";
?>

<html>

<head>
<title><?php echo $titre; ?></title>
</head>

<body>
<h1><?php echo $titre; ?></h1>
</body>

</html>
À toi d'initialiser la variable $titre comme tu le souhaites.

Mammouth du PHP | 568 Messages

29 avr. 2009, 16:50

avec par exemple une table de correspondance suivant la valeur de la variable
$_SERVER["SCRIPT_NAME"]
qui contient le nom du script en cours.

exemple
<?php
//tableau de correspondance
//tu remarquera qu'il faut passer tes page en php, donc plus de html
$array_correspondace = array(
"services.php" => "Nos services",
"tarifs.php" => "Nos tarifs"
);
?>

<!--
Réécriture des balises title et h1 => en reprennant l'exemple d'Albat
-->

<?php
$titre = $array_correspondace[$_SERVER["SCRIPT_NAME"]];
?>

<html>

<head>
<title><?php echo $titre; ?></title>
</head>

<body>
<h1><?php echo $titre; ?></h1>
</body>

</html>
Ainsi tu fait un fichier correspondace_title.php qui contient le tableau de correspondance que tu peux inclure dans toutes tes pages.

Eléphanteau du PHP | 27 Messages

29 avr. 2009, 18:24

Merci Yosh ta proposition semble ok mais ca ne fonctionne pas.

J'ai fais ceci:

Création d'un fichier correspondace_title.php
<?php 
$array_correspondace = array( 
"contact-nl.php" => "Ons bereiken", 
"faq-nl.php" => "Meest gestelde vragen", 
"portfolio-nl.php" => "Onze portfolio", 
"services-nl.php" => "Onze diensten", 
"voip-nl.php" => "Uw vaste lijn voor 20 euro per jaar!", 
"tarifs-nl.php" => "Onze tarieven" 
); 
?>
Puis dans mon fichier head.php inclus dans chaque page j'ai ajouté:
<?php 
include('correspondace_title.php');
$titre = $array_correspondace[$_SERVER["SCRIPT_NAME"]]; 
?>
au dessus de :
<title><?php echo $titre; ?></title>
Mais rien n'apparait...

Merci d'avance pour ton aide;

Subran

nb: mes pages sont en .html mais en faite le fichier est en php et devient par exemple http://www.depanne-pc.be/nl/index.php?page=services mais via url rewritting il devient services.html

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2009, 00:01

Voici la solution la plus simple : Tout en HTML/Js:

Code : Tout sélectionner

<h1 id="titre">Mon Titre</h1> <script> document.title = document.getElementById("titre").innerHTML; </script>
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

ViPHP
AB
ViPHP | 5818 Messages

30 avr. 2009, 00:58

Voici la solution la plus simple : Tout en HTML/Js:

Code : Tout sélectionner

<h1 id="titre">Mon Titre</h1> <script> document.title = document.getElementById("titre").innerHTML; </script>
Oui mais heu... c'est référençable cette technique ? Etant donné que le titre joue un grand rôle dans le référencement et que je pensais que les moteurs de recherche n'exécutaient pas js...

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2009, 10:35

C'est vrai, c'est le gros inconvénient de cette solution quant au référencement naturel mais on peut inclure des balises META pour spécifier des mots-clés fixes.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 568 Messages

30 avr. 2009, 10:55

Ma technique me semble plus approprié que la solution en JS mais bon tu fais comme tu le sens.

Par contre erreur de ma part tu remplace
$_SERVER["SCRIPT_NAME"]
par
basename($_SERVER["SCRIPT_NAME"])
Et le tour est joué.

Il faut tout de même t'assurer que tes fichiers soit bien identique à ceux référencé dans ton tableau $array_correspondace

Bon codage.

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2009, 13:45

Moi aussi je penche plus pour la solution de Yosh :pouce:
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 27 Messages

30 avr. 2009, 13:50

Oui la solution de Yosh est la bonne mais ... ca ne fonctionne pas encore :d

J'ai donc rectifié.

Ceci au dessus de <head>
<?php 
include('correspondace_title.php');
$titre = $array_correspondace[basename($_SERVER["SCRIPT_NAME"])]; 
?>
Et ceci entre les balises Title:
<?php echo $titre; ?>
Avec un fichier correspondace_title.php:

<?php 
$array_correspondace = array( 
"contact-nl.php" => "Ons bereiken", 
"faq-nl.php" => "Meest gestelde vragen", 
"portfolio-nl.php" => "Onze portfolio", 
"index.php?page=services" => "Onze diensten", 
"voip-nl.php" => "Uw vaste lijn voor 20 euro per jaar!", 
"tarifs-nl.php" => "Onze tarieven" 
); 
?> 
Mes pages sont accessible via http://www.depanne-pc.be/nl/index.php?page=services ou http://www.depanne-pc.be/nl/services.html grace au URL REWRITTING . Je pense que c là que ca coince dans le fichier correspondace_title.php

Qu'en penses-tu Yosh?

Merci pour ton aide!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 avr. 2009, 14:24

Effectivement, ça peut être un problème quand tu te base sur le nom du script dans l'URL qui change par URL rewriting.

Premièrement tu dois faire un débogage pour connaitre le "script name" dans le code :
<?php 
include('correspondace_title.php');
$titre = $array_correspondace[basename($_SERVER["SCRIPT_NAME"])];
// DEBUG
echo "<p>" . basename($_SERVER["SCRIPT_NAME"]) . "</p>";
?>
A fin de connaitre le vrai nom du script rencontré dans ton environnement.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 568 Messages

30 avr. 2009, 15:31

Effectivement, ça peut être un problème quand tu te base sur le nom du script dans l'URL qui change par URL rewriting.

Premièrement tu dois faire un débogage pour connaitre le "script name" dans le code :
<?php 
include('correspondace_title.php');
$titre = $array_correspondace[basename($_SERVER["SCRIPT_NAME"])];
// DEBUG
echo "<p>" . basename($_SERVER["SCRIPT_NAME"]) . "</p>";
?>
A fin de connaitre le vrai nom du script rencontré dans ton environnement.
+1

Et ensuite à toi de voir comment tu peux adapter ma solution.

De ce que je vois, tu passe un paramètre ?page=services

Donc à partir de là, il faut que ton tableau de correspondance référence les différentes valeurs de la variable page passé en paramètre, par exemple comme ceci
<?php 
$array_correspondace = array( 
"services" => "Nos services", 
"tarifs" => "Nos tarifs"
); 
?>
Ensuite, il ne te reste plus qu'a faire
<?php
$titre = $array_correspondace[$_GET["page"]];
?> 
Et devrait fonctionner.

Tient nous au courant.

Eléphanteau du PHP | 27 Messages

30 avr. 2009, 19:45

J'ai créé le fichier test.php
<?php 
include('correspondace_title.php');
$titre = $array_correspondace[basename($_SERVER["SCRIPT_NAME"])];
// DEBUG
echo "<p>" . basename($_SERVER["SCRIPT_NAME"]) . "</p>";
?>
http://www.depanne-pc.be/nl/test.html et http://www.depanne-pc.be/nl/index.php?page=test donne tout deux index.php

Donc .... je ne sais pas si ca va fonctionner.... faudrait que ca donne test pour que les autres donnent services , tarifs, ...

Qu'en pensez-vous?

Mammouth du PHP | 991 Messages

30 avr. 2009, 19:53

Ya pas de raison que ca ne marche pas ;)

essaye aussi la solution de Yosh


Bye Hawk
DevOps, Symfony4, Hoa