Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/08/2007, 12h28   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 12
Points : 1
Points : 1
Par défaut Récupérer l'adresse actuelle et la modifier

Bonjour,
Je développe un site en français et en anglais, et je voudrais que lorsque l'on clique sur le drapeau anglais qui se trouve en haut de page sur une page en français qu'il m'envoi vers la version anglaise de cette même page, et que si une page au même nom n'existe pas, il renvoi sur l'index de la version anglaise (et vise versa).
Je vais donner un exemple. L'utilisateur est sur la page www.monsite.com/fr/fiches/infos.php et clique sur le drapeau qui s'y trouve, si www.monsite.com/en/fiches/infos.php existe, c'est la que le liens va le rediriger, si il n'éxiste pas l'utilisateur sera redirigé vers www.monsite.com/en/.

Je ne suis pas super doué en php. J'ai quelque idées mais je ne saurais pas comment procéder. J'essai de développer mon petit script sur la version française, il me suffira de le copier sur la version anglaise en inversant fr et en dans le code. Pour info mon drapeau anglais est dans un include qui est appelé dans toutes les pages française du site (pareil à l'inverse sur la version anglaise).

Je me disais que je pourrais commencer par récupérer l'adresse actuelle de la façon suivzante :
Code :
$current_adress = '../' . basename($_SERVER["PHP_SELF"]);
je suppose que c'est bon.
Après je ne sais pas comment faire pour qu'il me prenne la valeur de $current_adress, qu'il remplace le /fr/ par un /en/, et la mette dans une variable du nom de $target_adress.
Ensuite je pense qu'une boucle permettrai de finir ma fonction :
Code :
1
2
3
4
if ($current_adress existe sur le serveur) {
alors echo <a href="$current_adress">
}
else echo <a href="/en/">
La encore je ne sais comment formuler tout sa, ni quelle fonction utiliser pour qui vérifie si current adress existe.
Est ce que quelqu'un saurais m'aider sur mon problème ?

Merci d'avance
saith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 20h26   #2
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Salut, je vois ton problème, je crois que tu peux faire comme cela (cela fonctionnera sur toutes les pages du site dans chaque dossier) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
// Pour afficher le drapeau
 
$url = 'http://www.tonsite.com/"'.$_SERVER['PHP_SELF'];
 
$a_url = explode('/',$url);
 
$fr_ind = array_search('fr',$a_url);
$en_ind = array_search('en',$a_url);
 
$a_new_url = $a_url;
 
if($fr_ind !== false) {
$newUrl[$fr_ind] = 'en';
$newUrl = implode('/',$a_newUrl);
echo '<a href="'.$newUrl.'">Anglais</a>';
}
elseif($en_ind !== false) {
$newUrl[$en_ind] = 'fr';
$newUrl = implode('/',$a_newUrl);
echo '<a href="'.$newUrl.'">Français</a>';
}
Je n'ai pas essayer mais cela devrait marcher..

C'est un peu compliquer pour si peu, tu devrais faire un peu comme les templates avec un seul fichier pour les deux langues et un paramètre en GET
comme : mapage.php?lang=fr

puis dans ta page tu fais :

Code :
1
2
3
4
5
 
if($lang == 'fr' or $lang == 'en')
require 'tonsite.com/'.$lang.'/'.basename($_SERVER['PHP_SELF']);
else
require 'tonsite.com/fr/'.basename($_SERVER['PHP_SELF']);
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 02h52   #3
Membre chevronné
 
David DRAPEAU
Consultant OpenERP
Inscription : juin 2003
Messages : 807
Détails du profil
Informations personnelles :
Nom : David DRAPEAU

Informations professionnelles :
Activité : Consultant OpenERP

Informations forums :
Inscription : juin 2003
Messages : 807
Points : 728
Points : 728
Envoyer un message via MSN à zyongh Envoyer un message via Skype™ à zyongh
Par défaut pas de variable

On ne met jamais de variables dans un include(), include_once(), require() ou require_once() et ce pour une des failles de sécurité les plus connues si ce n'est LA plus connue.

Cependant la solution proposée est bonne dans l'idée excepter le fait qu'il faille changer les variables par des constantes.
zyongh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 08h43   #4
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

Voici quelques idées pour les sites multilingues : http://php.developpez.com/faq/?page=...te-multilingue

Pour ce qui est de ton adresse, il vaut mieux utiliser un paramètre en effet, c'est plus simple. Sinon si ton souci c'est juste d'avoir une URL avec un dossier en ou fr juste après la racine, tu peux faire de la réécriture de liens (mais c'est plus compliqué).
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 16h55   #5
Membre régulier
 
Homme Mallory
Étudiant
Inscription : septembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Mallory
Âge : 22
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant
Secteur : Enseignement

Informations forums :
Inscription : septembre 2006
Messages : 213
Points : 75
Points : 75
Envoyer un message via MSN à Oprichnik Envoyer un message via Skype™ à Oprichnik
Bien sur que ma solution est bonne tel quel tu as oublié de ceci :
Code :
1
2
3
 
 
if($lang == 'fr' or $lang == 'en')
Oprichnik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2007, 19h19   #6
Invité de passage
 
Inscription : septembre 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 12
Points : 1
Points : 1
Merci Oprichnik, j'ai repris ton code et je l'ai quelque peut modifié (à cause de variables qui changaient de nom et pour que sa se rapproche de ce que je voulais). Je te remercie énormément car je n'aurais pas su coder sa.

Par contre je ne sais, si le code final a des failles de sécurité :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<?php
$url = $_SERVER['PHP_SELF'];
$a_url = explode('/',$url);
case du table.
$fr_ind = array_search('fr',$a_url);
$en_ind = array_search('en',$a_url);
$a_new_url = $a_url;
 
if($fr_ind !== false) {
$a_new_url[$fr_ind] = 'en';
$newUrl = implode('/',$a_new_url);
if (file_exists($_SERVER["DOCUMENT_ROOT"].$newUrl)) {
    echo '<a href="'.$newUrl.'"><img src="/fr/images/layout/picto_uk.gif" alt="English version"  class="txt-pre-header-right" /></a>';
} else {
    echo '<a href="/en/"><img src="/fr/images/layout/picto_uk.gif" alt="English version"  class="txt-pre-header-right" /></a>';
}
}
elseif($en_ind !== false) {
$a_new_url[$fr_ind] = 'fr';
$newUrl = implode('/',$a_new_url);
if (file_exists($newUrl)) {
    echo '<a href="'.$newUrl.'"><img src="/en/images/layout/picto_fr.gif" alt="English version"  class="txt-pre-header-right" /></a>';
} else {
    echo '<a href="/fr/"><img src="/en/images/layout/picto_fr.gif" alt="English version"  class="txt-pre-header-right" /></a>';
}
}
 
?>
saith est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h45.


 
 
 
 
Partenaires

Hébergement Web