Personnaliser ses formulaires Ne pas avoir que des champs de texte
#1
Posted 13 March 2012 - 02:46 AM
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 ?
Merci !
#2
Posted 13 March 2012 - 06:06 AM

#3
Posted 14 March 2012 - 07:26 AM
Attached File(s)
-
Sans titre.jpg (76.35K)
Number of downloads: 51
#4
Posted 14 March 2012 - 08:28 AM
Mythril, on 14 March 2012 - 07:26 AM, said:
ça semble pas être le bon screen.
Il est préférable de coller le code de ton _form

#5
Posted 14 March 2012 - 12:27 PM
Mythril, on 13 March 2012 - 02:46 AM, said:
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:
- Tu changes dans la vue _form.php adéquate les echo $form->textField … concernés par les helper adéquats. Dans le cas ci-dessus, tu trouveras certainement la ligne suivante :
<?php echo $form->textField($model,'id_Employe'); ?>
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.
Mythril, on 13 March 2012 - 02:46 AM, said:
Je pense que tu as compris le principe ci-dessus. En tout cas, tu gagnerais à te documenter sur les helpers proposés par CActiveForm.
Quote
Merci !
Là c'est un peu différent. Il y a deux aspects :
- 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)
list($d, $m, $y) = explode('/', $this->attributDate); $this->attributDate = $y . '-' . $m . '-' . $d;
#7
Posted 19 March 2012 - 07:53 AM
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...
Co-k-ine > Oui, pourquoi ?
#8
Posted 20 March 2012 - 12:50 PM
C'est à toi de créer la fonction beforeSave dans ton model !
PS : Moi aussi je suis étudiant en informatique à annecy !
#9
Posted 27 March 2012 - 08:21 PM

J'ai eu à en faire un aussi au cour de ma scolarité.
Je cherche justement à l'améliorer en y intégrant des utilisateurs récupérés depuis un LDAP et d'autres spécificités ^^
Parcontre, la configuration/compétence matérielle/logiciel sont à quels buts?

#10
Posted 11 April 2012 - 01:03 PM
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.
Mes salutations.
#11
Posted 11 April 2012 - 01:20 PM
Quote
Supposons que votre vue affiche les employés, que votre clé étrangère s'appelle departementId, et pointe que la table departement sur le champ id.
Si vous avez utilisé les commentaires appropriés dans votre SQL, Gii a certainement généré les relations nécessaires dans vos modèles :
Modèle "Employe", quelque chose comme :
'departement' => array(self::BELONGS_TO, 'Departement', 'departementId'),
Modèle "Departement", quelque chose comme :
'employes' => array(self::HAS_MANY, 'Employe', 'departementId'),
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.
#12
Posted 11 April 2012 - 05:46 PM
voila le code ke j'ai rencontré
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'Idclt',
'nom',
'tel',
'adresse',
'gsm',
'solde',
'commentaire',
'idreg',
'idtype',
),
)); ?>
idreg , idtype sont des clés etrangeres
j'espere avoir une reponse de votre part
#13
Posted 11 April 2012 - 06:06 PM
<?php $this->widget('zii.widgets.CDetailView', array( 'data'=>$model, 'attributes'=>array( 'Idclt', 'nom', 'tel', 'adresse', 'gsm', 'solde', 'commentaire', array('name'=>'relation.champDesire'), // <- voilà à quoi ça ressemble … ), )); ?>
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.
#14
Posted 13 February 2013 - 07:10 AM
Je ne sais pas à qui tu t'adresses, mais puisque je suis l'auteur du dernier post (presque 1 an…), je te demande d'être plus précise dans ta question

A++