IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Liste dynamique multilingue [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut Liste dynamique multilingue
    Bonjour à tous.

    Après avoir terminé un site immobilier avec de moteur de recherche multicritères, je souhaite sur cette base le faire évoluer : le faire en 3 langues.

    Je me suis documenté, jusque-là tout fonctionne (coockies, session) mais j’ai besoin d’un conseil concernant une requête sur une liste déroulante alimentée par la base de données.

    J’aimerai que la requête se fasse sur la colonne estate_type_en si c’est l’anglais qui est sélectionné, etc. Car pour le moment, ce que j’ai fait fonctionne comme dans mon exemple mais je trouve cela assez lourd comme code...

    Je vous remercie d'avance.

    David

    Exemple de la structure type de bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE IF NOT EXISTS `estate_type` (
      `id_estate_type` int(10) unsigned NOT NULL auto_increment,
      `estate_type` varchar(45) NOT NULL,
      ` estate_type_en ` varchar(45) NOT NULL,
      `estate_type_nl` varchar(45) NOT NULL,
      PRIMARY KEY  (`id_estate_type`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=23 ;
    et ma liste déroulante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <select name="country">
        <option value="">-----</option>	  
        <?php
        if ($_GET['lang']=='fr'){
            $sql_fr = "SELECT DISTINCT estate_type.estate_type, id_estate_type FROM estate_type  
                       INNER JOIN estate ON estate_type.id_estate_type=estate.estate_type
                       WHERE visible=1
                       ORDER BY id_estate_type ASC";
            $result = mysql_query($sql_fr);
     
            while($ln_estate_type = mysql_fetch_array($result)){
                if($ln_estate_type['estate_type']==$_REQUEST['estateType']){
                $selected="selected='selected'";
                } else {
                $selected="";
                }
                echo "<option value='".($ln_estate_type['id_estate_type'])."' $selected>".utf8_encode($ln_estate_type['estate_type']). "</option>";
            }
        }
        else if ($_GET['lang']=='en'){
            $sql_en = "SELECT DISTINCT estate_type_en, id_estate_type FROM estate_type  
                       ORDER BY id_estate_type ASC";
            $result = mysql_query($sql_en);
     
            while($ln_estate_type = mysql_fetch_array($result)){
                if($ln_estate_type['estate_type']==$_REQUEST['estateType']){
                $selected="selected='selected'";
                } else {
                $selected="";
                }
                echo "<option value='".($ln_estate_type['id_estate_type'])."' $selected>".utf8_encode($ln_estate_type['estate_type_en']). "</option>";
            }
        }
        else if ($_GET['lang']=='nl'){
            $sql_nl = "SELECT DISTINCT estate_type_nl, id_estate_type FROM estate_type  
                       ORDER BY id_estate_type ASC";
            $result = mysql_query($sql_nl);
     
            while($ln_estate_type = mysql_fetch_array($result)){
                if($ln_estate_type['estate_type']==$_REQUEST['estateType']){
                $selected="selected='selected'";
                } else {
                $selected="";
                }
                echo "<option value='".($ln_estate_type['id_estate_type'])."' $selected>".utf8_encode($ln_estate_type['estate_type_nl']). "</option>";
            }
        }	
        else{                       		
            $sql_fr = "SELECT DISTINCT estate_type.estate_type, id_estate_type FROM estate_type  
                       INNER JOIN estate ON estate_type.id_estate_type=estate.estate_type
                       WHERE visible=1
                       ORDER BY id_estate_type ASC";
            $result = mysql_query($sql_fr);
     
            if(!$result){
                echo "pas de resultats";
            }else{
                while($ln_estate_type = mysql_fetch_array($result)){
                    if($ln_estate_type['estate_type']==$_REQUEST['estateType']){
                    $selected="selected='selected'";
                    } else {
                    $selected="";
                    }
                    echo "<option value='".($ln_estate_type['id_estate_type'])."' $selected>".utf8_encode($ln_estate_type['estate_type']). "</option>";
                }
            }
        }									
        ?>	
    </select>

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Après avoir terminé un site immobilier avec de moteur de recherche multicritères, je souhaite sur cette base le faire évoluer : le faire en 3 langues.
    Humm, c'est le genre de truc qu'il aurait fallut prévoir avant même de commencer quoi que ce soit, car un site multilingue c'est particulier, ça débouche sur une conception parfois très différente.
    Des coups à reprogrammer pleins de truc.

    Au niveau de ta Bdd par exemple, normalement il ne faut pas rajouter autant de champs qu'il y a de langues, mais créer une nouvelle table si nécessaire qui va recevoir tous les contenu linguistiques cela par ligne.

    Exemple :
    (table) langues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    lang_id | code | nom |
    1       | fr   | français
    2       | en   | english
    3       | nl   | jensaisrien
    (table) estate_type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id_estate_type | lang_id | contenu
    1              | 1       | truc français (1)
    1              | 2       | truuc anglais (1)
    1              | 3       | truuuc néerlandais (1)
    2              | 1       | muche français (2)
    2              | 2       | muuche anglais (2)
    2              | 3       | muuuche néerlandais (2)
    Autre exemple
    (table) articles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    art_id | cree_le | actif
    1     | 2010-07-25| 1
    2     | 2010-07-25| 0
    (table) articles_lang
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    art_id | lang_id | contenu
    1      | 1      | permier_article
    1      | 2      | first_article
    1      | 3      | jensaistoujoursrien
    2      | 1      | deuxième_article
    2      | 2      | second_article
    2      | 3      | maisquiparleleneerlandaisici?
    etc ...
    C'est ainsi que ça devrait être.

    Ensuite, suffit de passer l'ID de la langue en paramètre, vérifier que cette langue existe dans la Bdd, sinon, affecter une langue par défaut.

    Ensuite, il ne devrait plus être utile de ce préaucuper de la langue en faisant une succession de if/elseif, mais juste faire des jointures avec la langue.

    Exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT a.contenu, a.cree_le
    FROM articles a
    INNER JOIN arlicles_lang al ON al.art_id = a.art_id
    WHERE actif = 1
    AND al.lang_id = 2
    ORDER BY article_id ASC
    Ici, seuls les articles Anglais (2) seront récupérés.

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Merci de cette réponse. Je vais regarder cela maintenant.
    Je sais que j'aurais dû prévoir cela dès le départ mais ce n'était pas le but...
    C'est plus par satifaction personnelle que je désire le faire évoluer

    PS: En tant qu Belge, il existe une région appelée la "Flamandie" LOL où de drôles de personnes parlent encore le Néerlandais Donc en tant que langue officielle il serait mal venu de ne pas la mettre sur un site web Multilingue.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Ok.

    Pense y aussi au charset, je conseil d'opter pour tu UTF-8, que de l'ISO. (avis totalement perso).
    Même si l'UTF-8 est un poil plus compliqué (quoi qu'il existe maintenant pleins de tutos qui expliquent ça bien).

    Dès fois que l'envie te prends de rajouter le Chinois dans 6 mois.
    Il y a des Chinois aussi en Belgique, non ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Pour l'UTF-8 pas de souci j'ai de bonnes sources pour celà. Quant aux langues asiatiques, je mets le Thaï Et ce n'est pas une blague

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    je mets le Thaï Et ce n'est pas une blague
    A ben là, l'UTF-8 s'impose presque.
    Mais j'ai jamais essayé ça dans des langues aussi spécifiques (j'allais dire bizarres, mais ils y en a qui risque de mal le prendre )

    Mais le plus important, c'est la conception de ta Bdd, et là, il y aura des remaniements.
    C'est la base (sans jeu d'mots), sinon -> galère, car ça débouche sur du code Php abracadabrantesque.

  7. #7
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cambodge

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2010
    Messages : 221
    Par défaut
    Bon, j'avais déjà fait ceci dans ma base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_action_type	action_type_fr	action_type_en	action_type_nl
    1	                 Vente	        Sale	                Verkoop
    2	                 Location	        Renting	        Verhuur
    3	               Location vac	Vacation Rentals	Appartementen
    Dans ma page où j'insère mon formulaire de recherche, je crée une session et un cookie. Si pas de langue sélectionnée, c'est le français par défaut.

    Mais je voudrais proposer au visiteur qu'il puisse changer de langue à n'importe quel moment de sa visite.

    Voilà pq je bloque sur cette requête tout en sachant que mes listes déroulantes sont alimentées via la bdd.

    Une petite piste? J'avais pensé à "SUBSTR" mais est ce que je peux faire ceci dans une requête?

    Merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Javascript] Question pas difficile sur des listes dynamique...
    Par mulbek dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/04/2006, 09h55
  2. afficher les contenu d'une liste dynamiquement
    Par mzt.insat dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2006, 18h02
  3. [PHP-JS] Liste dynamique
    Par SuperBn dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2006, 17h09
  4. Réponses: 1
    Dernier message: 16/01/2006, 17h36
  5. Rafraichissement liste dynamique
    Par Petitjean_85 dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo