J’ai un petit soucis à l’utilisation de Yii. J’ai généré tout ce qui va bien par rapport à ma base de données (Une 10aine de tables, avec différents liens entre elles). Pour cela tout fonctionne bien. Par la suite, j’ai généré les formulaires et cela fonctionne, encore, correctement.
Par contre, le tout n’est pas très ergonomique. Par exemple, je voudrais ajouter une entrée dans ma table contenant des clefs étrangères. Ces clefs sont en fait des ID (ici d’un employé). Du coup, dans le formulaire, il faut taper “à la main” l’ID de l’employé. Pas très pratique pour l’utilisateur. Est-il possible de remplacer ce champ de texte par un menu déroulant avec le nom des employés (récupérés via une jointure SQL par exemple) ? Désolé si je ne suis pas très clair.
De la même façon, j’ai une contrainte “Check” sur un champ. Je voudrais remplacer le champ de texte par un combo box avec les deux seuls valeurs que ce champ peut prendre. Comment faire ?
Enfin, plusieurs de mes champs demandent des dates. Cependant, étant au format “Date” de MySQL (Imposant le YYYY-MM-DD), l’insertion n’est pas des plus aisées pour un utilisateur français. Existe t-il un moyen “d’assister” l’utilisateur dans l’entrée de sa date ?
Voila un screen des formulaires actuels. Je voudrais remplacer ces champs de texte demandant un ID par une liste déroulante… En proposant autre chose que les ID.
En fait, si tu utilises Gii pour générer tes vues, tu n’auras effectivement que des champs texte. Deux solutions s’offrent à toi:
[list=1]
[*]Tu changes dans la vue _form.php adéquate les [font="Courier New"]echo $form->textField …[/font] concernés par les helper adéquats. Dans le cas ci-dessus, tu trouveras certainement la ligne suivante :
En partant du principe que le modèle « employés » s’appelle Employe et que le champ de jointure sur l’id de l’employé s’appelle idEmploye dans le modèle cible, il faudra modifier la ligne de code ci-dessus par :
<?php echo $form->dropDownList($model,'id_Employe',
CHtml::listData(Employe::model()->findAll(), 'id', 'nom_Employe'),
array('empty' => '» Sélectionnez l\'employé dans la liste')
); ?>
[*]Ou bien tu utilise l’extension Giix (au dessus de Gii) qui est plus intelligente à ce niveau notamment.
[/list]
Je pense que tu as compris le principe ci-dessus. En tout cas, tu gagnerais à te documenter sur les helpers proposés par CActiveForm.
Là c’est un peu différent. Il y a deux aspects :
[list=1]
[*]La saisie / sélection de la date au format français. Il vaudrait mieux utiliser le widget CJuiDatePicker pour cela. Exemple :
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model'=>$model,
'attribute'=>'attributDate',
'name'=>'NomModele[attributDate]',
'language'=>Yii::app()->language, //il faut aussi paramétrer dans [b]protected/config/mail.php[/b] la langue source (anglais) et la langue de l'application (français)
'options'=>array(
'showAnim'=>'fold', // 'show' (the default), 'slideDown', 'fadeIn', 'fold'
'showOn'=>'both', // 'focus', 'button', 'both'
'buttonText'=>Yii::t('ui','Afficher le calendrier'),
'buttonImage'=>$baseUrl.'/images/calendar.png',
'buttonImageOnly'=>false,
'changeMonth'=>true,
'changeYear'=>true,
'showButtonPanel'=>true,
'autoSize'=>false,
'yearRange'=>'1910:2020',
'maxDate'=>'+0'
),
));
?>
[*]La sauvegarde de la date dans la base de données. Il faut obligatoirement donner le bon format sous peine de voir stocker une valeur nulle. Dans l’événement beforeSave du modèle (je suppose que c’est un champ date et non datetime, sinon il faudrait adapter)
tellibus > Merci pour ces précisions ! Je pense avoir bien compris le truc. Par contre pour la date, quand je veux utiliser ton code il me dit (à raison) que calendar.png n’existe pas. Il n’y a pas de calendrier de base dans Yii ?
EDIT 2 : Pour une raison que j’ignore, tous les caractères de mon calendrier sont en japonais… Pourquoi ?
EDIT 3 : C’est réglé ! Par contre je n’ai pas de fonction “beforeSave” dans mon modèle…
J’ai un ptit soucis, en fait j’ai travaillé avec gii pour generer mon application. Je voudrais dans une vue afficher le titre de l’id d’une clé etragere au lieu que juste l’id qui s’affiche.
Pour votre vue d’employés, Gii a généré quelque chose comme
<?php echo $model->departementId; ?>
Il suffit de remplacer par
<?php echo $model->departement->nom; ?>
, ou autre champ adéquat
J’espère que c’est clair. Si vous êtes anglophone, je vous recommande les didacticiels de Larry Ullman (via la pages Tutorials, c’est là où j’ai personnellement rapidement pu démarrer correctement avec Yii.
Est-ce que vos relations sont définies dans le modèle ?
Pour votre information, la question que vous posez est plutôt basique. Vous gagneriez beaucoup à consulter le guide de Yii et les tutoriels de Larry Ullman.