Personnaliser ses formulaires

Bonjour à tous !

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 !

Pour être pratique, peux tu faire la copie d’un de te formulaire à problème pour qu’on puisse mieux t’aider?

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.

ça semble pas être le bon screen.

Il est préférable de coller le code de ton _form

Bonjour

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 :


<?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.

[/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)




list($d, $m, $y) = explode('/', $this->attributDate);

$this->attributDate = $y . '-' . $m . '-' . $d;



[/list]

Tu es étudiant à l’iut d’annecy ?

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…

Co-k-ine > Oui, pourquoi ?

Bonjour,

C’est à toi de créer la fonction beforeSave dans ton model !

PS : Moi aussi je suis étudiant en informatique à annecy !

krkrkr, votre projet de conception d’un helpdesk est fort intéréssant :)

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? :)

Bonjour

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.

Bonjour

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.

Bonjour bennouna

voila le code ke j’ai rencontré

<?php $this->widget(‘zii.widgets.CDetailView’, array(

'data'=&gt;&#036;model,


'attributes'=&gt;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


<?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.

Bonjour Xaviera

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 :D

A++