Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 26/03/2011, 09h26   #1
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
Par défaut Choix langue avec bouton

Bien le bonjour

je peaufine ce 1er site, pour le HTML ça roule à peu près, mais je me perd avec l'utilisation des variables ($_POST, $_SESSION) et les cookies.

J'essaie de rendre mon site bilingue (Fra/Eng), comme il y a très peu de texte je ne crée pas 2 sites, ni 2 pages différentes (1 pour chaque langue) et dans le code HTML il y a donc 2 containers, l'un en français, l'autre en anglais, il faut bien sûr une condition pour afficher l'un ou l'autre.

j'ai rajouté un bouton qui permet de dire je change la condition, mais je n'y arrive pas, j'arrive pas en fait à ce que le bouton change la variable, j'ai essayé en écrivant un cookie 'lang', avec une fonction lang(), mais j'ai tout faux.

en desespoir de cause j'ai trouvé cette astuce du serveur qui renseigne la langue du navigateur, mais on ne peut pas changer de version

qqs conseils SVP

voilà un exemple de code qui marche pas:

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
  if(!isset($lang)) {
	$lang = substr($HTTP_SERVER_VARS['HTTP_ACCEPT_LANGUAGE'],0,2);
                    }
  if(isset($_POST['']))
        {
	if ($lang="en") { $lang="fr";}
                   else { $lang="en";}
        }
  require_once("./onglets.php");
  $menu = affiche_menu();
 
?>
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
   <title>Camargue & Costières</title>
   <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
   <meta http-equiv="Content-language" content="fr" />
   <meta name="robots" content="follow, index, all" />
   <meta name="description" content="villa en camargue à louer" />
   <meta name="keywords" content="villa, camargue, location, vacances, sud" />
   <link rel="stylesheet" media="screen" type="text/css" title="costieres" href="costieres.css" /> <!-- feuille de style -->    
</head>
 
<body>
 
<?php
   include("banniere.php");           // inclusion de la bannière
   echo $menu;                        // inclusion du menu à onglets
 if ($lang == "fr" )
  {
?>
  <div class="page">             //   *****  Page en Français  *******
  <form method="post" action="index.php"> 
  <input type="button" value ="English Version" />
  </form>
   <h1>Bienvenue à Saint-Gilles du gard</h1>
   <h3> Calme, Soleil, Nature, Culture, Spiritualité, Traditions</h3>
   <a href="Costieres/pool3.jpg" target="_blank">
   <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
   <h3> Villa confortable 150 m2 - 5 chambres - 2 salles d'eau </h3>
   <h3> Exterieur de 2200 m2 avec Parc & Piscine </h3>
   <h3> Climatisation - Barbecue - 4 parkings ombragés </h3>
   <h3> 3 WC - 2 salles d'eau</h3>
</div>
<?php
 }
else
 {
?>
<div class="page">         //  ********   Page en Anglais  *********
 
<form method="post" action="index.php"> 
<input type="button" value ="Version Française"  />
  </form>
   <h1>Welcome in Saint-Gilles of Gard</h1>
   <h3> Quiet, Sun, Culture, Spirituality, Traditions</h3>
   <a href="Costieres/pool3.jpg" target="_blank">
   <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
   <h3> comfortable house 150 m2 - 5 bedrooms  </h3>
   <h3> Garden with swimming-pool </h3>
   <h3> Climatisation - Barbecue - 4 parkings  </h3>
   <h3> 3 restrooms - 2 bathrooms</h3>
</div>
 
<?php
}
?>
 
 
 
<?php include("pied.php"); ?>
</body>
</html>
le site est là: www.villa-camargue.com

maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 11h48   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Il manque le nom de ton champ la
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 17h42   #3
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
merci de ta réponse, mais s'il ne manquait que ça ...

en clickant sur le bouton je voudrais qu'un booleen fasse la bascule entre les 2 langages et je ne vois pas comment. Dois je utiliser un bouton submit ? comment récupérer la validation ? comment changer la valeur (avec une fonction ?) , ...

bref comment vous coderiez ce bouton ?
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 18h25   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux avoir un formulaire et un bouton ou même un simple lien (texte ou image).
La valeur de langue reçue sera simplement stockée en session.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 19h56   #5
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
oui dit comme ça, ça coule de source ... pour toi

moi je connaissais rien à HTML/CSS/PHP il y a 1 mois, aussi je bute sur beaucoup de choses

je met quoi comme formulaire ? input "submit" ? ds la ligne form je met quoi ds action "mapage.php" ? ou une autre page ?

bref je n'y arrive pas
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 00h17   #6
Membre du Club
 
Inscription : juin 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 30
Points : 43
Points : 43
salut,

pas d'action dans le formulaire afin de ne pas changer de page

le formulaire peut être ainsi
<form action="" method="post">
<input type="submit" name="lang" value="FR" />
</form>

tu récupère $_POST['lang'] comme tu le fait déja dans ton code.

ensuite il faut réfléchir "l'algo"
- est ce que j'ai deja un cookie ?
- si oui est ce que $_POST['lang'] existe, si oui on change si non on utilise le cookie
- si le cookie n'existe pas
- est ce que $_POST['lang'] existe si oui on envoie le cookie et on affecte la nouvelle valeur à $lang.
si non on utilise la valeur par défaut.

@+
moogli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/03/2011, 17h04   #7
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
Ho un gros merci, tu m'as décoincé, ce formulaire vide me perturbait

J'ai essayé d'utiliser ton algo et j'ai codé ça à "ma façon", ça marche à peu près, le menu ne se rafraichit pas en clickant sur le bouton, mais après oui, lol enfin bon, l'utilisateur éventuel va pas passer son temps à clicker sur ça

je réalise que l'idéal serait une session pour ne pas avoir à répéter la même chose à toutes les pages, mais bon ça marche

n'hésitez pas à corriger ce qui vous choque

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
// ** version française par défaut **  
   if(isset($_COOKIE['lang'])){ $lang = $_COOKIE['lang']; }  
                         else { $lang="fr";  }; 
 
   if(isset($_POST['lang']))           // ** bouton clické > switch de la langue 
       {
       if ($lang=="fr") { $lang="en";}
                   else { $lang="fr";};
       setcookie('lang', $value = $lang, time() + 365*24*3600, null, null, false, true);
        }
 
require_once("./onglets.php");
$menu = affiche_menu();  
 
?>
 
 
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
   <title>Camargue & Costières</title>
   <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
   <meta http-equiv="Content-language" content="fr" />
   <meta name="robots" content="follow, index, all" />
   <meta name="description" content="villa en camargue à louer" />
   <meta name="keywords" content="villa, camargue, location, vacances, sud" />
   <link rel="stylesheet" media="screen" type="text/css" title="costieres" href="costieres.css" /> <!-- feuille de style -->    
</head>
 
<body>
 
 
<?php
   include("banniere.php");           // inclusion de la bannière
   echo $menu;                        // inclusion du menu à onglets
if ($lang != "en" )              // par défaut: version française  
  {
?>
  <div class="page">    
  <form method="post" action="index.php"  > 
  <input type="submit" name ="lang" value="English Version" />
  </form>
   <h1>Bienvenue à Saint-Gilles du gard</h1>
   <h3> Calme, Soleil, Nature, Culture, Spiritualité, Traditions</h3>
   <a href="Costieres/pool3.jpg" target="_blank">
   <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
   <h3> Villa confortable 150 m2 - 5 chambres - 2 salles d'eau </h3>
   <h3> Exterieur de 2200 m2 avec Parc & Piscine </h3>
   <h3> Climatisation - Barbecue - 4 parkings ombragés </h3>
   <h3> 3 WC - 2 salles d'eau</h3>
</div>
<?php
 }
else   //   ***** version anglaise  *****
 {
?>
   <div class="page">
     <form method="post" action="index.php" > 
     <input type="submit" name="lang" value ="Version Française"  />
     </form>
   <h1>Welcome in Saint-Gilles of Gard</h1>
   <h3> Quiet, Sun, Culture, Spirituality, Traditions</h3>
   <a href="Costieres/pool3.jpg" target="_blank">
   <p><img src="Costieres/pool2.jpg" alt="Piscine" align="center" border="0"></p> </a>
   <h3> comfortable house 150 m2 - 5 bedrooms  </h3>
   <h3> Garden with swimming-pool </h3>
   <h3> Climatisation - Barbecue - 4 parkings  </h3>
   <h3> 3 restrooms - 2 bathrooms</h3>
   </div>
 
<?php
}
?>
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 18h32   #8
Membre du Club
 
Inscription : juin 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 30
Points : 43
Points : 43
Yop,

perso j'aurais fait un truc un peu plus dynamique afin de ne pas avoir a ajouter un elseif si j'ajoute une langue (ben oui le chinois est tendance ^^).

un truc dans le genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
// ** version française par défaut **  
if(isset($_COOKIE['lang'])){ 
	$lang = $_COOKIE['lang']; 
}  
else { 
	$lang = 'fr';  
}
// validation du formulaire
if(isset($_POST['lang'])){           // ** bouton clické > switch de la langue 
	$languePossible = array('fr','en');
	if (in_array($_POST['lang'],$languePossible); {
		//setcookie('lang', $value = $lang, time() + 365*24*3600, null, null, false, true);
		$lang = $_POST['lang'];
		setcookie('lang', $_POST['lang'], time() + 365*24*3600, null, null, false, true);
	}
}
 
require_once("./onglets.php");
$menu = affiche_menu();  
  ?>
Par contre je ne vois pas pourquoi ton menu ne change pas puisse qu'il est affiché après la définition de $lang, par contre fait attention à l'auto déclaration des variables si c'est le cas ça peut mettre le brin (car $_COOKIE['lang'], $_POST['lang'] et $lang feront référence à la même variable voir la conf du paramètre variables_order dans le php.ini pour savoir laquelle tu a. Sachant bien entendu qu'une fois passé le 1er if / else tu écrase de toute façon la valeur du post ... :/)

@+
moogli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/03/2011, 19h26   #9
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
ha oui pas mal, si je veux rajouter le néerlandais ou l'allemand, bref des gens du Nooord

pour le menu je ne comprend pas, visiblement, il rafraichit la page, mais pas la fonction, menu$ n'est pas mis à jour immédiatement, par contre aller fouiller ds PHP.ini ...

j'ai bien trop peur de tout bouziller

Merci à vous tous et si qqu'un comprend cette histoire de menu

maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 19h33   #10
Membre du Club
 
Inscription : juin 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 30
Points : 43
Points : 43
c'est p'tet pas ça le soucis, après faut voir comment fonctionne le menu, c'est peut être simplement un soucis de cache s'il y en a un.

bref pas assez de donnée pour savoir d'ou viens le problème

@+
moogli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 19h44   #11
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
là où ça devient comique c'est si tu recliques sur le bouton, alors là tu as un melting site texte en français et menu en anglais, et vice versa

arf



voila le code pour la fonction affichemenu()

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
30
31
32
33
34
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
 
<?php
    function affiche_menu()  // tableaux contenant les liens d'accès et le texte à afficher
    {   
       $tab_menu_lien  = array( "index.php", "carte.php" , "exterieur.php", "interieur.php","descriptif.php", "tarifs.php", "tourisme.php", "pont.php");
         if($_COOKIE['lang'] != "en")   
         { $tab_menu_texte = array( "Accueil", "Carte" , "Exterieur", "Interieur", "Descriptif", "Tarifs", "Tourisme", "Pont du gard" ); }
           else
         { $tab_menu_texte = array( "Home", "Maps" , "Outside", "Inside", "Descriptive", "Prices", "Tourism", "Roman Bridge" ); } 
 
 
        // informations sur la page
       $info = pathinfo($_SERVER['PHP_SELF']);
 
       $menu = "\n<div id=\"menu\">\n    <ul id=\"onglets\">\n";
 
        // boucle qui parcours les deux tableaux
        foreach($tab_menu_lien as $cle=>$lien)
        {
            $menu .= "    <li";
 
            // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
            if( $info['basename'] == $lien )
                $menu .= " class=\"active\"";
 
            $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
        }
 
        $menu .= "</ul>\n</div>";
 
        return $menu;        
    }
?>
maxiNoob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 21h19   #12
Membre du Club
 
Inscription : juin 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 30
Points : 43
Points : 43
heu déjà devrait pas y avoir balise html l@. cette balise est unique et au début du fichier html, donc le fichier qui inclus le menu.

ensuite tu utilise directement le cookie, tu devrais plutôt passer en argument de la fonction affiche_menu la valeur de la langue. Cela évitera le problème que tu a qui est du au fait que le cookie n'est pas lisible directement après l'envoie mais seulement au ré-affichage de la page (car on lit les cookie une fois placer mais pas "en même temps").

ta fonction deviendrais donc
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
30
31
32
<?php
    function affiche_menu($lang='fr')  // tableaux contenant les liens d'accès et le texte à afficher
    {   
       $tab_menu_lien  = array( "index.php", "carte.php" , "exterieur.php", "interieur.php","descriptif.php", "tarifs.php", "tourisme.php", "pont.php");
         if($lang != "en")   
         { $tab_menu_texte = array( "Accueil", "Carte" , "Exterieur", "Interieur", "Descriptif", "Tarifs", "Tourisme", "Pont du gard" ); }
           else
         { $tab_menu_texte = array( "Home", "Maps" , "Outside", "Inside", "Descriptive", "Prices", "Tourism", "Roman Bridge" ); } 
 
 
        // informations sur la page
       $info = pathinfo($_SERVER['PHP_SELF']);
 
       $menu = "\n<div id=\"menu\">\n    <ul id=\"onglets\">\n";
 
        // boucle qui parcours les deux tableaux
        foreach($tab_menu_lien as $cle=>$lien)
        {
            $menu .= "    <li";
 
            // si le nom du fichier correspond à celui pointé par l'indice, alors on l'active
            if( $info['basename'] == $lien )
                $menu .= " class=\"active\"";
 
            $menu .= "><a href=\"" . $lien . "\">" . $tab_menu_texte[$cle] . "</a></li>\n";
        }
 
        $menu .= "</ul>\n</div>";
 
        return $menu;        
    }
?>
et seulement ça dans le fichier de la fonction

pour l'utiliser soit tu la garde ainsi soit (et donc utilisation du fr en défaut soit tu met le cookie ou plutôt la variable $lang que tu génère avec le 1er code

soit affiche_menu($lang);

Après tu devrais faire plus simple en utilisant l'égalité plutôt que la négation (dans le test de la langue) et a la limite modifier la fonction pour du multilingue

@+
moogli est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/03/2011, 23h34   #13
Candidat au titre de Membre du Club
 
Avatar de maxiNoob
 
Inscription : octobre 2009
Messages : 128
Détails du profil
Informations personnelles :
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : octobre 2009
Messages : 128
Points : 10
Points : 10
pour l'entête HTML, ds un autre de mes messages de noob, un intervenant m'a dit le contraire, qu'il fallait mettre ça ds toutes mes pages PHP

le problème avec le cookie, c'est qu'il faut tj le mettre en début de code, c'est chiant et pas simple à cogiter je trouve, si je le met pas en début de page index, je le met où ? dans la fonction ?

ds ton code, pour la fonction, tu mets en argument: $lang="fr" là vraiment je comprend pas le sens de ça

en tout cas merci de m'aider

j'ai donc mis $menu=affiche_menu($lang) et ça marche nickel !

Bravo
maxiNoob 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 22h07.


 
 
 
 
Partenaires

Hébergement Web