THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bon, j'ai pédalé un peu pour y arriver, ça marche, je donne donc mon code pour un chti menu de 2 drapeaux pour 2 langues, les drapeaux ont un survol (rollover onmousehover) et sont en état "actif" quand on est sur une langue sinon en état "innactif".
drapeaux.jpg
Pour le design je glisse mes drapeaux dans une div consacrée à ce menu, voici dans l'ordre le code pour le fichier entete.html, les descriptions CSS et les drapeaux dans une archive zippée téléchargeable ici.

Code HTML avec les conditionnelles :

            <div id="langue">
            #FILTRE_egalite(#LANG||2||<a href="index.php?lang=1" title="Français"><img src="images/drap_fr_off.gif" onmouseover="this.src='images/drap_fr_on.gif'" onmouseout="this.src='images/drap_fr_off.gif'" alt="Français" /></a>
            <img src="images/drap_en_on.gif" alt="English" />)
            
            #FILTRE_egalite(#LANG||1||<img src="images/drap_fr_on.gif" alt="Français" />
            <a href="index.php?lang=2" title="English"><img src="images/drap_en_off.gif" onmouseover="this.src='images/drap_en_on.gif'" onmouseout="this.src='images/drap_en_off.gif'" alt="English" /></a>)
            </div>

Description CSS à personnaliser selon vos besoins :

/* Menu des langues */
#langue {
	padding: 5px;
	display: block;
	margin: 0px;
	position: absolute;
	height: 25px;
	width: 70px;
	top: 50px;
	right: 30px;
}
#langue img {
	margin: 0px 5px;
	padding: 0px;
	border-style: none;
}

Si ça peut servir… smile

Offline


Merci Momo smile

Je suppose que tu as utilisé le plugin fichierlang ?

Offline


Oui bien entendu, cela ne marche qu'avec le module de langue actif…

J'ai cherché un peu pour avoir le basculement de page à page dans la seconde langue… et je sèche là-dessus aucune substitution simple ne marche, ici on retourne à l'accueil du site, en général, de toute façon on fonctionne en session, il est très rare de vouloir une page dans une autre langue durant le surf.

Pour ajouter une langue c'est assez simple, on ajoutera un boucle conditionnelle (et une variable pour la nouvelle langue) et c'est bon.

Offline


Si cela intéresse quelqu'un, voilà le bout de code php de mon menu pour basculer de langue en restant sur la même page :

                	<?php 	$lang=#LANG;
                    		$urltemp="#URLCOURANTE";
                            $urltab=explode("&lang",$urltemp);
							if ($urltab[0]=="/index.php") $amp="?";
                            else $amp="&";
                            if ($lang==1) 
                            {
                            	$url=$urltab[0]."".$amp."lang=2";
                                $src="8.gif";
                                $alt="English Version";
                            }
                            else
                            {
                            	$url=$urltab[0]."".$amp."lang=1";
                                $src="9.gif";
                                $alt="Version Française";
                            }
                            ?>
                	<li><a href="<?php echo $url; ?>" title="<?php echo $alt; ?>"><img src="/images/labels/<?php echo $src; ?>" alt="<?php echo $alt; ?>" /></a></li>

A adapter, je pense qu'on peut faire mieux, mais pour l'instant ce bout de code fait ce que je lui demande.

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Bonjour

Voila une astuce pour changer de langue la page que l'on visualise, pour cela j'ai utiliser le code de momo-fr:
Pour la page d'accueil (index_page.html)

<div id="langue">
            #FILTRE_egalite(#LANG||2||<a href="#index.php?lang=1" title="Français"><img src="images/drap_fr_off.gif" onmouseover="this.src='images/drap_fr_on.gif'" onmouseout="this.src='images/drap_fr_off.gif'" alt="Français" /></a>
            <img src="images/drap_en_on.gif" alt="English" />)
            
            #FILTRE_egalite(#LANG||1||<img src="images/drap_fr_on.gif" alt="Français" />
            <a href="#index.php?lang=2" title="English"><img src="images/drap_en_off.gif" onmouseover="this.src='images/drap_en_on.gif'" onmouseout="this.src='images/drap_en_off.gif'" alt="English" /></a>)
            </div>

Pour les autres pages:

<div id="langue">
            #FILTRE_egalite(#LANG||2||<a href="#URLCOURANTE&lang=1" title="Français"><img src="images/drap_fr_off.gif" onmouseover="this.src='images/drap_fr_on.gif'" onmouseout="this.src='images/drap_fr_off.gif'" alt="Français" /></a>
            <img src="images/drap_en_on.gif" alt="English" />)
            
            #FILTRE_egalite(#LANG||1||<img src="images/drap_fr_on.gif" alt="Français" />
            <a href="#URLCOURANTE&lang=2" title="English"><img src="images/drap_en_off.gif" onmouseover="this.src='images/drap_en_on.gif'" onmouseout="this.src='images/drap_en_off.gif'" alt="English" /></a>)
            </div>

Moi j'ai mis ça dans entete.html, donc j'ai deux fichiers entete.html et entete2.html.

Patbonf

Last edited by patbonf (16-07-2009 12:10:27)

Offline


Petite rikiki H.S - ne concernant pas les codes sources donnée ici mais sur l'utilisation des drapeaux sur un site web:

Juste une petite précision concernant les drapeaux pour les langues cela peut offenser certaines personnes de certain pays, allez pas dire à un belge qu'il est français et ainsi de suite, car le drapeau revêt une dimension national alors que le nom de la langue nom, un petite liste déroulante ou les code iso des langues c'est bien aussi smile

Offline


Dites-moi si je me trompe mais pour la page d'accueil il faut enlever le # avant index.php, c'est plutôt :

 <div id="langue">
            #FILTRE_egalite(#LANG||2||<a href="index.php?lang=1" title="Français"><img src="images/drap_fr_off.gif" onmouseover="this.src='images/drap_fr_on.gif'" onmouseout="this.src='images/drap_fr_off.gif'" alt="Français" /></a>
            <img src="images/drap_en_on.gif" alt="English" />)
            
            #FILTRE_egalite(#LANG||1||<img src="images/drap_fr_on.gif" alt="Français" />
            <a href="index.php?lang=2" title="English"><img src="images/drap_en_off.gif" onmouseover="this.src='images/drap_en_on.gif'" onmouseout="this.src='images/drap_en_off.gif'" alt="English" /></a>)
            </div>

Offline


Le # c'est que pour les variables THELIA.

Effectivement il ne servait à rien devant index.php

Alfouine,


Au royaume des aveugles, les borgnes sont mal vus.

Offline


Salut,

voici ma méthode pour 3 langues, on peut en ajouter facilement.
Je me suis inspiré pour finir de ce qui est présenté par Alfouine dans ce topic.
Ce n'est pas top pour les urls réécrites, mais ça fonctionne bien.
Pour les boutons, on peut en créer trois différents par langue ou utiliser comme je l'ai fait la méthode des "portes coulissantes" en css.

PHP dans la page .html (ne pas oublier : "$parsephp=1;" dans la page .php

<?php
// un peu de mise en ordre pour commencer
$lang="#LANG";
$enon="";
$fron="";
$eson="";
$frhref="href";
$enhref="href";
$eshref="href";
// +++++++++++++++++++++++++++++++++++++++++++++++
$urltemp="#URLCOURANTE"; //url en cours

if (preg_match("?lang",$urltemp))// seulement le language ?
{
$urltab=explode("?lang",$urltemp);//on saucissonne
$sep="?";
}
// +++++++++++++++++++++++++++++++++++++++++++++++
if (preg_match("&lang",$urltemp))// params divers + le language ?
{
$urltab=explode("&lang",$urltemp);//on saucissonne
$sep="&";
}
// +++++++++++++++++++++++++++++++++++++++++++++++

else $sep="?"; // sinon séparateur = ?

$url=$urltab[0].$sep; // construction de la nouvelle url
// +++++++++++++++++++++++++++++++++++++++++++++++

switch ($lang) // les boutons
{
case "1":
$fron="-on"; // preparation choix classe affichage
$frhref="id"; // neutralise le href
break;
case "2":
$enon="-on";
$enhref="id";
break;
case "3":
$eson="-on";
$eshref="id";
break;
default:
$fron="-on";
$frhref="id";
echo "big bug, pas de langue !"; //peu probable…
}
?>
<div id="bt_lang">
<?php
echo '<a class="bt-fr'.$fron.'" '; //affichage classe
echo $frhref.'="'.$url.'lang=1"></a>'; //appel page+langue

echo '<a class="bt-en'.$enon.'" ';
echo $enhref.'="'.$url.'lang=2"></a>';

echo '<a class="bt-es'.$eson.'" ';
echo $eshref.'="'.$url.'lang=3"></a>';
?>
</div><!-- bt_lang -->

Les CSS

#bt_lang {
	width: 105px;
	height: 35px;
	float: right;
	margin-right: 10px;
}

a.nobt1, a.nobt2, a.nobt3 {
	display: none;
}

a.bt-fr {
	width: 35px;
	height: 35px;
	background: url(decor/1/bt-lang.gif) no-repeat 0 -35px;
	display: inline-block;
}

a.bt-fr-on {
	width: 35px;
	height: 35px;
	background: url(decor/1/bt-lang.gif) no-repeat 0 0px;
	display: inline-block;
}

a.bt-fr:hover {
	width: 35px;
	height: 35px;
	background: url(decor/1/bt-lang.gif) no-repeat 0 -70px;
	display: inline-block;
}

a.bt-en {
	width: 35px;
	height: 35px;
	background: url(decor/2/bt-lang.gif) no-repeat 0 -35px;
	display: inline-block;
}

a.bt-en-on {
	width: 35px;
	height: 35px;
	background: url(decor/2/bt-lang.gif) no-repeat 0 0px;
	display: inline-block;
}

a.bt-en:hover {
	width: 35px;
	height: 35px;
	background: url(decor/2/bt-lang.gif) no-repeat 0 -70px;
	display: inline-block;
}

a.bt-es {
	width: 35px;
	height: 35px;
	background: url(decor/3/bt-lang.gif) no-repeat 0 -35px;
	display: inline-block;
}

a.bt-es-on {
	width: 35px;
	height: 35px;
	background: url(decor/3/bt-lang.gif) no-repeat 0 0px;
	display: inline-block;
}

a.bt-es:hover {
	width: 35px;
	height: 35px;
	background: url(decor/3/bt-lang.gif) no-repeat 0 -70px;
	display: inline-block;
}

On doit pouvoir créer un code plus esthétique et plus concis, mais celui-ci fonctionne pour toutes les pages, c'est tout ce que je lui demande.

Offline


Un petit bug apparu à l'usage : perte du chemin (id rubrique ou dossier) lors d'un changement de langue de suite après déconnexion ou connexion dans une page dosssier ou rubrique. Peut-être que la solution va être de renvoyer sur une autre page à la connexion/déconnexion ?

La suite prochainement…

---------------
La suite :

Incident du à mon système de navigation qui comporte plusieurs modèles de pages rubrique  et dossier ? Pas forcément, le lien (récupéré par #URL_COURANTE) pointe  bien vers rubrique ou dossier.php?lang=xx mais  ne communique pas le paramètre "id".
Pour ce cas spécial, je vais tout simplement renvoyer à la page d'accueil par un header('Location: http://www…, si l'id de la rubrique ou du dossier est perdu en route, la langue ne l'est pas, ce qui permet de garder un peu de cohérence.

smile

Last edited by Léon (24-10-2009 22:13:31)

Offline


Affichage des attributs techniques non désiré, lors d'un changement de langue sur les pages compte_modifiererr.html et formulerr.html

Normal puisque je réaffiche la page sans avoir validé le formulaire ?

je vais tenter d'employer le même remède que précédemment ?

----------------

Pas évident, car il y a des passages subtils entre pages dans le code de Thelia pour analyse des formulaires.

Je vais tout simplement bloquer la possibilité de changer de langue sur ces pages.

C'est fait, mais ce n'est qu'un pis-aller.

---------------
Dès que possible je testerai le plugin langue V2 et sa boucle, et je donnerai les résultats.

Last edited by Léon (09-11-2009 19:51:07)

Offline


Pour mieux maîtriser le mécanisme, (beaucoup de soucis avec l'url rewrining I ou 2) j'ai déconnecté le .htaccess et passé tout le site en #URL au lieu de #REWRITEURL

J'ai un peu modifié le script de manipulation des boutons.

Tout marche nickel, même por les pages immédiates avant et après déconnexion ainsi que pour les pages "erreurs" des formulaires.

Les CSS sont inchangés.

Le nouveau code :

<!-- fonc_boutonslangues pour 3 langues et 3 boutons-->
<?php
// un peu de mise en ordre pour commencer
$lang="#LANG";
$enon="";
$fron="";
$eson="";
$frhref="href";
$enhref="href";
$eshref="href";
// +++++++++++++++++++++++++++++++++++++++++++++++
$urltemp = $_SERVER['REQUEST_URI'];
// +++++++++++++++++++++++++++++++++++++++++++++++
if (strpos($urltemp,"?")==false)  // pas de parametre ?
{
$sep="?";
$url=$urltemp; //  
$url=$preurl.$sep; // construction nouvelle url
}
// +++++++++++++++++++++++++++++++++++++++++++++++
else if (stristr($urltemp,"?lang")==true)  // seulement le language ?
{
$urltab=explode("?lang",$urltemp);// on saucissonne
$sep="?";
$preurl=$urltab[0];
$url=$preurl.$sep; // construction nouvelle url
}
// +++++++++++++++++++++++++++++++++++++++++++++++
else   // params divers + le language ?
{
$urltab=explode("&lang",$urltemp);// on saucissonne
$sep="&";
$preurl=$urltab[0];
$url=$preurl.$sep; // construction nouvelle url
}

// +++++++++++++++++++++++++++++++++++++++++++++++
switch ($lang) // les boutons
{
case "1":
$fron="-on"; // preparation choix classe affichage
$frhref="id"; // neutralise le href
break;
case "2":
$enon="-on";
$enhref="id";
break;
case "3":
$eson="-on";
$eshref="id";
break;
default:
$fron="-on";
$frhref="id";
echo "big bug, pas de langue !"; //peu probable
}
echo "<div id='bt_lang'>";

echo '<a class="bt-fr'.$fron.'" '; //affichage classe
echo $frhref.'="'.$url.'lang=1"></a>'; //appel page+langue

echo '<a class="bt-en'.$enon.'" ';
echo $enhref.'="'.$url.'lang=2"></a>';

echo '<a class="bt-es'.$eson.'" ';
echo $eshref.'="'.$url.'lang=3"></a>';

echo "</div><!-- bt_lang -->";

?>

j'essayerai à nouveau l'url-rewriting un peu plus tard.

Bémol :
http://forum.thelia.fr/viewtopic.php?id=4279

Peut-être est-ce ce souci qui malmène suivant les cas l'url rewriting ?
A explorer.

Last edited by Léon (15-11-2009 16:32:00)