2013-03-10 2 views
0

Je n'ai pas trouvé de réponse à cette question ... Je fais un site web multilingue basé sur Codeigniter et MySQL. Pour les textes en langage statique, j'utilise la fonction intégrée en lang et en fonction du premier segment de l'URL/en// fr/... Je charge le fichier de langue approprié, mais comment charger et afficher les données correspondantes de la base de données? Comment puis-je conserver les données dans la base de données? J'ai la table des produits et la moitié des entrées sont des valeurs numériques, mais l'autre moitié sont des textes qui devraient être conservés en 2 ou 3 langues. J'ai la logique de garder name_en et name_fr, description_en et description_fr ... tout cela dans la même table, donc je vais doubler ces lignes à mesure que j'ajoute une nouvelle langue. Quand je vais faire une requête Select, je vais passer le segment "en" à la requête et concaténer à la fin de name_ ou de description_ pour qu'il devienne name_en ou description_fr ou category_es.Comment lire différentes entrées de la base de données pour un site multilingue avec Codeigniter?

J'espère qu'il y a beaucoup mieux, et certains d'entre vous qui ont déjà travaillé avec cela m'aideront à traverser.

Répondre

0

Je suis deux tables d'usign pour le soutien de multilingue. La première table inclut les champs d'élément. Par exemple, date, vote et etc. Deuxième table pour les champs de langues.

CREATE TABLE `item` (
    `item_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `nested_category_id` int(11) DEFAULT NULL, 
    `image_file` varchar(100) NOT NULL, 
    `date` varchar(0) DEFAULT NULL, 
    PRIMARY KEY (`item_id`) 
); 

CREATE TABLE `item_lang` (
    `item_lang_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `lang_id` varchar(2) NOT NULL, 
    `item_id` int(11) unsigned NOT NULL, 
    `url_name` varchar(255) NOT NULL DEFAULT '', 
    `meta_title` varchar(255) DEFAULT NULL, 
    `meta_description` text, 
    `meta_keywords` varchar(255) DEFAULT NULL, 
    `name` varchar(255) NOT NULL, 
    `title` varchar(255) DEFAULT NULL, 
    `description` text, 
    PRIMARY KEY (`item_lang_id`) 
); 

Si vous avez besoin d'une rangée, essayez ceci.

function get_row($id, $lg='tr'){ 

     $arr = array($id, $lg); 

     $sql = " SELECT ".$this->_table.".*, ".$this->_table_lang.".* 
        FROM ".$this->_table." 
       LEFT JOIN ".$this->_table_lang." 
         ON ".$this->_table.".".$this->_table."_id = ".$this->_table_lang.".".$this->_table."_id 
        WHERE ".$this->_table.".".$this->_table."_id = ? 
         AND ".$this->_table_lang.".lang_id=?"; 

     $data = $this->db->query($sql, $arr); 

     return ($data->row()); 
    } 
+0

Cette solution est plus optimisée que celle que j'ai pointée? En fait, je garde autant de lignes dans la deuxième table que j'ai des langues sur le site web? – MarkC

+0

Je pense que vous devez utiliser des valeurs variables dans les colonnes de la table. pas dans les noms de table. Ce n'est pas une bonne stratégie pour l'avenir. –

Questions connexes