2010-11-11 10 views
1

J'ai une application faite avec cakephp, et j'ai fait i18n sur la base de données, en suivant les instructions sur le livre cakephp. La chose est que sur la table à l'affichage de l'index, je ne peux pas trier par les champs qui sont traduits. Le champ n'existe pas réellement sur la base de données, donc voici où je suppose que le problème vient, mais je peux insérer des données sur le terrain, donc l'i18n fonctionne correctement.cakephp paginator champs de tri avec i18n

J'ai essayé plusieurs façons de régler le paginateur, mais aucune ne fonctionne.

Par exemple, j'ai essayé:

Paginator->sort('Name','name'); 
Paginator->sort('Name','I18n__name'); 
Paginator->sort('Name','I18n__name.content'); 

Comme je vois, sur les requêtes, il va chercher le champ comme se référant à I18n__name.content », donc je pensais que cela fonctionnerait, mais il doesn 't.

Des suggestions?

Répondre

1

Je l'ai enfin trouvé. Je pense que cela devrait fonctionner hors de la boîte dans cakephp. Mais jusqu'à ce qu'ils ajoutent ceci, il y a un moyen de le faire fonctionner.

Sur l'paginatro utiliser le formulaire:

Paginator->sort('Name','I18n__name.content'); 

Et puis, la seule chose qui doit être fait est d'ajouter la fonction suivante dans le modèle.

function hasField($fieldName) { 
    if (parent::hasField($fieldName)) 
     return true; 
    else 
     switch ($fieldName) { 
      case "content": 
       return true; 
      default: 
       return false; 
     } 
    return false; 
} 

Et voilà, maintenant les champs traduits peuvent être classés dans une table paginée.

0

Je l'habitude d'utiliser quelque chose comme

echo $this->Paginator->sort('Name', __('Content', true)); 

puis laissez la fonction __() rendre un nom traduit si nécessaire. Ou ai-je mal compris le problème?

Vive Arno

+0

aide __() est pour les champs statiques, de sorte que les traductions doivent être dans les fichiers po. J'utilise le Comportement de Traduction, de sorte que chaque fois que j'ajoute une nouvelle entité dans la base de données, je peux fournir les traductions. Les traductions sont donc stockées dans la base de données. – 1000i1

Questions connexes