8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Re',

j'ai modifié le code pour tenir compte d'une éventuelle variable fichier :
<?php
$suffix = '';
// on récupère une éventuelle variable fichier passée en GET
$fichier = (isset($_GET['fichier'])) ? $_GET['fichier'] : '';
// on définit les fichiers autorisés
$fichiers = array('contact', 'aide', 'forum');
// Si cette variable est incorrecte on ne met rien
if (!in_array($fichier, $fichiers)) {
$fichier = '';
}
// Si fichier est renseigné, on change le suffixe
if ($fichier != '') {
$suffix = '?fichier='.$fichier;
}

// on définit les langues autorisées
$langues = array('fr', 'en');
// on récupère une éventuelle variable lang passée en GET
$lang = (isset($_GET['lang'])) ? $_GET['lang'] : '';
// Si cette variable n'existe pas ou quelle est incorrecte on lui affecte fr par défaut
if ($lang == '' || !in_array($lang, $langues)) {
$lang = 'fr';
}
//on définit le suffixe à rajouter à tous les liens 
if ($suffix == '') {
$suffix = "?lang=$lang";
} else {
$suffix .= "&lang=$lang";
}
?>

Même si ça semble plus compliqué que de simplement tester l'existence ou non de lang=en dans l'URL, c'est AMHA une bonne idée de toujours tester toutes ses variables (surtout en GET) pour ne pas, par exemple, faire un include d'une page inexistante... et du coup tu as déjà le suffixe à rajouter à tes liens...
J'avoue ne pas comprendre cette histoire de fichier "contact, aide, forum" :S. je veux simplement rajouter une variable dans l'url, c'est déjà comme ça que fonctionne mon site et ça marche très bien !! Smiley ohwell

Si tu veux une idée exacte de ce que je cherche tu peux aller voir mon site en dev : www.korx-crew.com

Tu as un menu déroulant en haut avec anglais et français qui permet de faire exactement ce que je cherche a faire mais avec deux drapeau bien distincts.
Modifié par Klesk (30 Jul 2008 - 12:06)
Re-Salut,

En voyant ton site je vois mieux ce que tu veux dire Smiley cligne .

Alors voilà une autre proposition :

Tout d'abord un script à insérer au début de toutes tes pages à l'aide de require_once :
[b]test_lang.php[/b]
<?php
$suffix_lang = ''; // langue en cours
$flag_french = ''; // lien drapeau français
$flag_english = ''; // lien drapeau anglais

$page_en_cours = substr( strrchr( $_SERVER['PHP_SELF'], "/" ), 1 );
$querystring = $_SERVER['QUERY_STRING'];

// si aucune variable GET ou seulement lang=fr (ce qui ne devrait pas arriver !)
if ($querystring == '' || $querystring == 'lang=fr') {
	$flag_french = $page_en_cours;
	$flag_english = $page_en_cours.'?lang=en';
}
else // sinon
{
	$var_get = explode("&", $querystring); // on créé un array avec toutes les variables
	$new_var_get = array();
	for ($i = 0; $i < count($var_get); $i++) { // on isole un éventuel "lang=en"
		if ($var_get[$i] != 'lang=en') {
			array_push($new_var_get, $var_get[$i]);
		}
		else
		{
		$suffix_lang = 'en';
		}
	}

	$nb_new_var = count($new_var_get);
	if ( $nb_new_var > 0) {
		$j = $nb_new_var;
		$flag_french = $page_en_cours.'?';
		$flag_english = $page_en_cours.'?';
		for ($i = 0; $i < count($new_var_get); $i++) { // on ajoute les variables GET
			$flag_french .= $new_var_get[$i];
			$flag_english .= $new_var_get[$i];
			$j -= 1;
			if ($j > 0) {
				$flag_french .= '&amp;';
				$flag_english .= '&amp;';
			}				
		}
		$flag_english .= '&lang=en';
	}
	else
	{
		$flag_french = $page_en_cours;
		$flag_english = $page_en_cours.'?lang=en';
	}
}

// fonction Lien_langue
function Lien_langue($href, $suffixe_lang) {
	$href = str_replace("&amp;", "&", $href);
	$href = str_replace("&", "&amp;", $href);
	if ($suffixe_lang == '' || $suffixe_lang == 'fr') {
		return $href;
	}
	if (!strpos($href, '?')) {
		$href.= '?lang='.$suffixe_lang;
	}
	else
	{
		$href .= '&amp;lang='.$suffixe_lang;
	}
	return $href;
}
?>

Puis dans tes pages, le lien du drapeau français devient :
<a href="<?php echo $flag_french ?>"><img ...Flag Français...></a>
Celui du drapeau anglais devient :
<a href="<?php echo $flag_english?>"><img ...Flag Anglais...></a>
Et pour finir, tu remplaces tous les liens par un appel à la fonction Lien_langue :
[b]par exemple[/b]
<a href="sondage.html>Sondage</a>
[b]devient[/b]
<a href="<?php echo Lien_langue('sondage.html', $suffix_lang) ?>">Sondage</a>

[b]ou encore[/b]
<a href="page_avec_variables.html?var1=111&var2=222">Une page</a>
[b]devient[/b]
<a href="<?php echo Lien_langue('page_avec_variables.html?var1=111&var2=222', $suffix_lang) ?>">Une page</a>

En espérant que ça t'aidera !

A+ Smiley smile
Modifié par Heyoan (03 Aug 2007 - 16:37)
hummm ça me semble très compliqué pour pas grand chose non ?? j'utilise spip comme moteur et ce dernier inclu déjà une gestion des langues via des cookies. donc en gros j'ai juste besoin de reproduire sur mes drapeau ce que fais le menu déroulant et après spip fait le reste.

ET le fameux menu ajoutes la variable dans l'url en fonction de la variable déjà présente ou non etc...
Modifié par Klesk (03 Aug 2007 - 17:14)
Klesk a écrit :
j'utilise spip comme moteur et ce dernier inclu déjà une gestion des langues via des cookies. donc en gros j'ai juste besoin de reproduire sur mes drapeau ce que fais le menu déroulant et après spip fait le reste.

Tu aurais pu commencer par là... Smiley lol

Donc mon ultime Smiley biggol solution : tu mets les drapeaux dans un formulaire et en cas de clic sur l'un ou l'autre la valeur du cookie est changée et la page est rappelée :
[b]A insérer dans les pages[/b]
<?php
$page_en_cours = substr( strrchr( $_SERVER['PHP_SELF'], "/" ), 1 );
$querystring = str_replace('&', '&amp;', $_SERVER['QUERY_STRING']);
?>
<form method="post" action="change_langue.php">
	<input type="hidden" name="page_en_cours" value="<?php echo $page_en_cours ?>" />
	<input type="hidden" name="querystring" value="<?php echo $querystring ?>" />
	<input src="http://www.korx-crew.com/test/spip/squelettes/images/flag_france.png" alt="Français" title="Français" height="13" width="20" type="image" name="flag_fr" />
	<input src="http://www.korx-crew.com/test/spip/squelettes/images/flag_uk.png" alt="English" title="English" height="13" width="20" type="image" name="flag_uk" />
</form>

[b]change_langue.php[/b]
<?php
// Détermination du drapeau cliqué
$langue = (isset($_POST['flag_fr_x'])) ? 'fr' : 'en';

// Récupération de l'URL complète
$page_en_cours = (isset($_POST['page_en_cours'])) ? $_POST['page_en_cours'] : '';
$querystring = (isset($_POST['querystring'])) ? $_POST['querystring'] : '';

setcookie("spip_lang",$langue);  

if ($querystring != '') {
$page_en_cours .= '?'.$querystring;
}

header("Location: $page_en_cours");
?>


A+
je suis une merde. J'ai même pas pensé a modifier le formulaire du menu déroulant...

Regardes le formulaire en question :



<div class="formulaire_spip formulaire_menu_lang">
<a name="formulaire_menu_lang" id="formulaire_menu_lang"></a>

<form method="post" action="#ENV{url}"><div>
	[(#ENV{url}|form_hidden)]
	<select class="forml" name="#ENV{nom}" id="#ENV{nom}" onchange="document.location.href='#ENV{url}&amp;#ENV{nom}='+this.options[this.selectedIndex].value">
	#ENV*{langues}
	</select>
	<noscript><div style="display:inline;">
		<input type="submit" value="&gt;&gt;" />
	</div></noscript>
</div></form>

</div>



En gros en l'adaptant a mes images j'ai direct la bonne fonction...Faut juste que je trouve comment faire Smiley lol

Voilà ce que retourne le source pour la balise select :



  <div class="formulaire_spip formulaire_menu_lang">
    <a name="formulaire_menu_lang" id="formulaire_menu_lang"></a>
    <form method="post" action="http://www.korx-crew.com/test/spip/spip.php?action=cookie&amp;url=%2Ftest%2Fspip%2F">
      <div>        
        <input name='action' value='cookie' type='hidden' />
        <input name='url' value='/test/spip/' type='hidden' />
        <select class="forml" name="var_lang" id="var_lang" onchange="document.location.href='http://www.korx-crew.com/test/spip/spip.php?action=cookie&amp;url=%2Ftest%2Fspip%2F&amp;var_lang='+this.options[this.selectedIndex].value">
          <option class='maj-debut' value='en'>
          English
          </option>
          <option class='maj-debut' value='fr' selected='selected'>
          fran&#231;ais
          </option>
        </select>
        <noscript>
          <div style="display:inline;">
            <input type="submit" value="&gt;&gt;" />
          </div>
          </noscript>
      </div>
    </form>
  </div>



Avec ça je pense qu'on a tout ce qu'il faut !!
Modifié par Klesk (03 Aug 2007 - 21:38)
Bon problème résolu en mettant simplement :



<a name="formulaire_menu_lang" id="formulaire_menu_lang"></a>
<form method="post" action="#ENV{url}">  [(#ENV{url}|form_hidden)]
  <input type="image" name="var_lang" value="fr" src="http://www.korx-crew.com/test/spip/squelettes/images/flag_france.png" alt="Fran&ccedil;ais" title="Fran&ccedil;ais" height="13" width="20" />
  <input type="image" name="var_lang" value="en" src="http://www.korx-crew.com/test/spip/squelettes/images/flag_uk.png" alt="English" title="English" height="13" width="20" />
  <noscript>
   <input type="submit" value="&gt;&gt;" />
  </noscript>
</form>

Pages :