Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-07-2008 09:15:43

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

[1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Bonjour à tous,

Je fais une application multilingue.
Je suis en train de créer un formulaire de création de news, jusque là rien de très original et rien de très compliqué, sauf que... j'ai tout de même deux soucis:

- J'utilise un formulaire pré-créé avec le zend_form que j'appelle pour la création de la news, la modification etc.
Je voulais savoir comment vous gérer le multilingue des labels de champs ?

- J'ai également besoin de créer une liste dans ce formulaire qui présente les langues du site. Au moment de créer la news, l'utilisateur sélectionne la langue. Cette liste ce situe dans une base de donnée.
Je voudrais donc savoir comment mon formulaire pré-créé peut créer cette liste.
Est-ce que je dois faire une requête sur ma base au moment de créer la liste ? Y-a-t-il une meilleure solution?

Merci d'avance.

Hors ligne

 

#2 18-07-2008 09:34:02

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

slaughter a écrit:

Bonjour à tous,
- J'utilise un formulaire pré-créé avec le zend_form que j'appelle pour la création de la news, la modification etc.
Je voulais savoir comment vous gérer le multilingue des labels de champs ?

Salut,

Si tu as déja implémenter ta traduction sur d'autre partie du site, tu n'as besion de rien faire de plus car zend_form gere automatiquement la trduction sur les labels, il suffit d'utiliser tes mots-clefs dans les labels et c'est automatiquement traduis big_smile (J'ai sauté au plafond quand j'ai découvert ça tongue )

slaughter a écrit:

- J'ai également besoin de créer une liste dans ce formulaire qui présente les langues du site. Au moment de créer la news, l'utilisateur sélectionne la langue. Cette liste ce situe dans une base de donnée.
Je voudrais donc savoir comment mon formulaire pré-créé peut créer cette liste.
Est-ce que je dois faire une requête sur ma base au moment de créer la liste ? Y-a-t-il une meilleure solution?

A toi de voir si cette liste vaut la peine d'une requete sur la BDD...  Moi personnelement j'ai fait la liste à la main même si j'ai une liste de langue présente dans ma BDD, oui je sais c'est moin évolutif, mais en même temps les langues ont été définies dès le départ, et c'est tres rare car très lourd d'ajouter une langue par après (meme si avec zend_translate ça l'est beaucoup moin je dois l'avouer ^^).

Je crois que c'est surtout au cas par cas, moi je ne fait pas car il me faut plus de code pour lister mes 3 langues à partir de la BDD que d'écrire direct l'array qui contient les bonnes valeurs.  Et je sais que qu'il n'y aura plus jamais de langues supplémentaire sur le projet...


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#3 18-07-2008 09:52:21

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Oki.

Pour mon premier problème, ta révélation me fait grandement plaisir. C'est vrai que je n'avait pas testé la traduction automatique (faut dire que je n'y avait pas franchement pensé), je testerai ça dès ce soir.

Pour le deuxième problème, c'est un peu l'inverse de toi. Je vais surment avoir de nouvelles langues dans les mois après la création du site selon la popularité et le premier bilan des langues présentes dès le départ.
Je vais également avoir besoin de créer des listes sur autre chose (catégorie de la news par exemple) et cette liste augmentera ou changera également. J'ai juste pris les langues pour l'exemple.
Je pense donc faire un formulaire qui fait des requêtes sur des petites bases de ma table pour afficher le contenu des listes. Je ne vois pas d'autres solution.

Dernière modification par slaughter (31-10-2008 14:45:57)

Hors ligne

 

#4 18-07-2008 10:26:00

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Ha effectivement si tu as d'autre choses à lister faire une requete sur ta DB devient indispensable.  Moi je ne parlais que dans le cas des langues qui, chez moi, est excessivement statique.

Lorsque j'ai d'autre choses a listé il est certain que j'en passe par là aussi...


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#5 18-07-2008 10:41:41

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Oki. Ta réponse me convient parfaitement, à chaque situation convient un choix logique. Statique => Liste manuelle. Dynamique => liste par requête.
Aurais-tu un exemple de classe perso de formulaire hérité de Zend_Form avec la création d'une liste par requête?
Cela me serait grandement utile.

Hors ligne

 

#6 18-07-2008 10:47:26

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Pas de problème, voici mon code pour la gestion de mes roles utilisateurs

Code:

        $role = new Zend_Form_Element_MultiCheckbox('User_Role');
        $role    ->setLabel('Role')
                ->setRequired(true);
        
        $role->setMultiOptions($dbUser->getRolesList());

Ma fonction getRolesList() renvoie un array("id_role" => "Role_Name").

Ici c'est un multicheckbox, c'est valable avec un multi select ou un select wink


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#7 18-07-2008 10:51:23

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Oki. C'est parfait.
Le tout est efficace et très propre à mon gout.

Merci beaucoup. Je test tout cela ce soir.

Hors ligne

 

#8 22-07-2008 14:30:35

_Fuse_
Membre
Lieu: Aquitaine
Date d'inscription: 10-07-2008
Messages: 92

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Salut,

Très bien j'utilise  le meme code pour générer mes formulaires.
Sais tu comment fait on pour déterminer une valeur "selected" avec un Zend_Form_Element_Select ?

Hors ligne

 

#9 22-07-2008 17:25:55

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Comme pour les autres élements :

$form->getValue('mon_select');


----
Gruiiik !

Hors ligne

 

#10 23-07-2008 08:50:32

_Fuse_
Membre
Lieu: Aquitaine
Date d'inscription: 10-07-2008
Messages: 92

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Re

désolé nORKy j'ai du mal m'expliquer je voulais en fait "seter" une valeur par defaut.

J'ai trouvé depuis :

Code:

$titre = new Zend_Form_Element_Select('genre');
$titre->setValue('aaa')->addMultiOptions(array('M'=>'M.', 'aaa'=>'Mme', 'Mlle'=>'Mlle'))
->setRequired(true)
->addValidator('NotEmpty', true);

Pour que cela fonctionne, la valeur passée à setValue() doit correspondre à une des clefs du tableau passé à addMultiOptions() et non pas à une des valeur de ce tableau.
"Mme" apparaitra comme valeur par defaut dans ma listbox.

Merci quand meme de t'as réponse

++

Dernière modification par _Fuse_ (23-07-2008 09:01:53)

Hors ligne

 

#11 27-07-2008 00:44:30

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Asfaloth a écrit:

Pas de problème, voici mon code pour la gestion de mes roles utilisateurs

Code:

        $role = new Zend_Form_Element_MultiCheckbox('User_Role');
        $role    ->setLabel('Role')
                ->setRequired(true);
        
        $role->setMultiOptions($dbUser->getRolesList());

Ma fonction getRolesList() renvoie un array("id_role" => "Role_Name").

Ici c'est un multicheckbox, c'est valable avec un multi select ou un select wink

Je commence à mettre en place ce dont nous avons parlé et j'ai un petit problème de conception.
Je n'arrive pas à récupérer mes données sous la même forme que ta fonction getRoleList().

Voici ce que j'ai pour l'instant :

Code:

class bd0x_Language extends Zend_Db_Table
{
    protected $_schema = '0rigin_xtrem';
    protected $_name = '0x_language';
    protected $_primary  = 'language_id';
    
    public function getLanguageList() 
    {        
        $select = $this    ->select()
                        ->from(array('0xl' => '0x_language'),
                        array('language_id','language_name'));            
        return $this->fetchAll($select);
    }

}

Je récupère donc mes données sous cette forme :

Code:

Zend_Db_Table_Rowset Object
(
    [_data:protected] => Array
        (
            [0] => Array
                (
                    [language_id] => 1
                    [language_name] => Français
                )

            [1] => Array
                (
                    [language_id] => 2
                    [language_name] => Anglais
                )

        )
etc

et je n'arrive pas à transformer cela pour avoir :

Code:

           [0] => Array
               (
                   [1] => Français
                   [2] => Anglais
               )

J'ai bien vue la fonction fetchPairs mais lorsque je l'utilise à la place du fetchAll, je me retrouve avec l'erreur :

Code:

Fatal error: Call to undefined method bd0x_Language::fetchPairs() in ....

Pouvez vous me donner un coup de main?

[edit]
Cela marche si je fais $this->getAdapter()->fetchPairs($select); Je dois donc rajouter gedAdapter() mais je ne sais pas pourquoi ...

Dernière modification par slaughter (27-07-2008 03:19:23)

Hors ligne

 

#12 10-10-2008 19:12:53

Proglab
Nouveau membre
Date d'inscription: 25-09-2008
Messages: 4

Re: [1.5][Form] Formulaire avec liste de données (bdd) et multilingue

Code:

$resultat = $this->fetchAll($select);
return $resutat->toArray();

essaye ca à la palce de

Code:

return $this->fetchAll($select);

Ca devrait marcher wink

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages