Navbars et php

Eléphanteau du PHP | 39 Messages

11 mars 2020, 21:26

Bonsoir (ou bonjour!) à tous !
Je suis confronté à un petit problème intéressant.

J'utilise php require once pour "générer" ma navbar et mon footer sur mes pages.
Seulement voilà, dans ma navbar ce trouve un <a> qui sert a envoyer l'utilisateur vers une version traduite en anglais de cette même page.
J'avais trouver une solution de pure logique qui est de faire un require sur mon element navbar qui ne contient pas mon ancre de traduction et en l'ajoutant ensuite "à la main" sur toutes mes pages. Ca marche mais déjà ce n'est pas pratique et ce n'est pas super beau dans mon code.
Je ne veux pas non plus qu'on me sorte un code tout fait et tout beau mais plutot qu'on me dirige vers une des nombreuses autres solutions possible à mon problèmes ! :)
J'avais en tête de dire à php de récuperer l'url de la page actuel de l'utilisateur et ensuite d'envoyer l'utilisateur via une ancre en echo vers cette même page mais traduite en anglais ( donc avec un url différent, vu que mes pages française sont traduite à la main en anglais. Donc par exemple si j'ai une page test.php qui est en français, alors sa version anglaise sera testEN.php) Mais j'ai l'impression que si je fais cela, je vais avoir un super long code dans ma nav avec plein de if et de elseif vu le nombre de page que comporte mon site... :? :?

Merci à vous pour vos coups de pouces ! :)

Mammouth du PHP | 1341 Messages

11 mars 2020, 21:52

si test.php devient systématiquement testEN.php, alors il suffit de faire une manipulation de chaines par ajouter EN au bon endroit à partir de la variable issue de https://www.php.net/manual/en/reserved.variables.server en remplaçant par exemple ".php" par "EN.php"

Eléphanteau du PHP | 39 Messages

11 mars 2020, 22:30

C'est une manière de faire, effectivement !
Sauf que j'ai aussi des pages en anglais qui ont une url completement différente de l'url de leur version française.

Mammouth du PHP | 1341 Messages

11 mars 2020, 22:33

un tableau avec en index le nom en fr, en valeur le nom en en, ainsi pas besoin de if, ceci par les pages qui ont un nom autre.
si le nom de la page n'est pas dans le tableau, alors le système de mon premier message.

Eléphanteau du PHP | 39 Messages

11 mars 2020, 23:02

Ok alors disons que je vais adapter les pages anglaise de mon site pour utiliser la variable $_SERVER.
Donc au-dessus de mon html j'entre la variable $_SERVER['PHP_SELF'] pour récuperer le nom du fichier en cours.
Ensuite, dans ma nav pour le lien qui envoie vers la page traduite en englais je dois faire:
<li><a href="<?= $_SERVER['REQUEST_URI'] ?>EN.php">English version </a></li>
Est-ce que j'ai tout bon ? :)
J'ai décidé d'utiliser cette variable donc je dois adapter le nom de mes pages qui ont un nom différent de en anglais, ce qui n'est pas encore trop génant.
Mais j'avoue la fonction en tableau m'interessais aussi mais mes connaissances avec les array en php est trop faible pour comprendre vraiment comment cela fonctionne :/
Je ne serais pas contre quelques explications et à la limite une démonstration afin d'enrichir mes connaissances ! ( le manuel de php est assez flou, surtout qu'il ne parle que de clé et de valeur. Et pas des index ni des noms

Mammouth du PHP | 1341 Messages

11 mars 2020, 23:07


Eléphanteau du PHP | 39 Messages

11 mars 2020, 23:14

le problème avec $_SERVER['PHP_SELF'] est qu'il me fais bien un echo de mon url mais en incluant le .php à la fin.
Il n'y a pas une variable qui permet de faire le echo sans le .php ?

EDIT: j'ai trouvé!

Je défini un nom de variable à mon serveur[PHP_SELF] et j'utilise un substr pour lui enlever son .php et ainsi ajouter ensuite un echo "EN.php" :)

ce qui donne par exemple ->

$url = $_SERVER['PHP_SELF'];
$url = substr($_SERVER['PHP_SELF'], 0, 5);

<li><a href="<?= $url; ?>EN.php">English version </a></li>

Mammouth du PHP | 1341 Messages

11 mars 2020, 23:52

$url = substr($_SERVER['PHP_SELF'], 0, 5);
cela fonctionne si la longueur du nom du fichier est tout le temps la même. c'est le cas ?

Eléphanteau du PHP | 39 Messages

12 mars 2020, 00:09

Non et evidemment je dois a chaque fois changer $url = substr($_SERVER['PHP_SELF'], 0, 5); pour l'adapter a mes autres liens.
donc je dois a chaque fois le réécrire en haut de mon html et le modifier selon mon besoin sur la page en cours
Une autre solution envisageable ?

Mammouth du PHP | 1341 Messages

12 mars 2020, 00:13

j'ai pas compris.
quel est le code html généré avant ce qu'il faut faire ? et celui à obtenir ?

Eléphanteau du PHP | 39 Messages

12 mars 2020, 00:28

par exemple le code de ma page test ressemble à ça ( et c'est là que je dois modifier mon substr :

Code : Tout sélectionner

$url = $_SERVER['PHP_SELF']; $url = substr($_SERVER['PHP_SELF'], 0, 5); ?> <html> <head> <link rel="stylesheet" href="Style/test.css"> <link rel="stylesheet" href="Style/footer.css"> <title>test</title> <?php require_once('Required/head.php'); ?> </head> <header> <?php require_once('Required/test.php'); ?> </header> <body>
tandis que mon require de nav ('Required/test.php') lui ressemble à ça et n'a pas besoin de modification:

Code : Tout sélectionner

<nav> <ul> <li><a href="/index.php">Accueil</a></li> <li><a href="/presentation.php">En savoir plus</a></li> <button class="dropbtn" onclick="myFunction()"><?php echo $user['pseudo']; ?> <i class="fa fa-caret-down"></i> </button> <div class="dropdown-content" id="myDropdown"> <img id="navbar-avatar" src="membres/avatars/<?php echo $user['avatar']; ?> " /> <a href="/profil.php">Mon profil</a> <a href="/chatbox.php">Chatbox</a> <a href="/formulairedecontact.php">Formulaire de contact</a> <a href="/deconnexion.php">Déconnexion</a> </div> <li><a href="<?= $url; ?>EN.php">English version </a></li> </ul> </nav>

Mammouth du PHP | 1341 Messages

12 mars 2020, 00:30

$url = substr($_SERVER['PHP_SELF'], 0, 5);
si la longueur varie, il ne faut pas coder en dur la longueur de la chaine.
à noter, qu'en relisant la discussion, la solution la plus facile à mettre en oeuvre a été donné.

Eléphanteau du PHP | 39 Messages

12 mars 2020, 00:57

On peut aussi utiliser str_replace:
$url = $_SERVER['PHP_SELF'];
$php = ".php";
$enphp = "EN.php";
$newurl = str_replace($php, $enphp, $url);

ce qui donnera dans le nav: <li><a href="<?= $newurl; ?>">English version </a></li>