Pré-remplir des Select ou des checkbox avec des valeurs par défaut
Déclarer une liste de valeur par défaut
Dans un SydonieDocument, on peut utiliser le fichier de configuration fields.xml pour configurer des valeurs par défaut :
<?xml version="1.0" encoding="UTF-8"?> <fields> <field propName="votreChamp.text" uiMethod="Input_Select"> <options> <values> <value>valueA</value> <value>valueB</value> <value>valueC</value> </values> </options> </field> </fields>
Par défaut, les valeurs sont affichées telles quel. On peut utiliser le fichier de configuration labels.xml pour présenter la valeur différemment (et selon la langue) :
<?xml version="1.0" encoding="utf-8" ?> <tmx version="1.4"> <header datatype="PlainText" segtype="sentence" creationtool="sydonie" creationtoolversion="1.0" srclang="en" o-encoding="utf-8" o-tmf="plaintext"> <note>Generated</note> </header> <body> <tu tuid="valueA" srclang="en"> <tuv xml:lang="en"><seg>Label for value A</seg></tuv> <tuv xml:lang="fr"><seg>Intitulé de la valeur A</seg></tuv> </tu> <tu tuid="valueB" srclang="en"> <tuv xml:lang="en"><seg>Label for value B</seg></tuv> <tuv xml:lang="fr"><seg>Intitulé de la valeur B</seg></tuv> </tu> <tu tuid="valueC" srclang="en"> <tuv xml:lang="en"><seg>Label for value C</seg></tuv> <tuv xml:lang="fr"><seg>Intitulé de la valeur C</seg></tuv> </tu> </body> </tmx>
Utilisation avancées
Pour des besoin plus spécifiques, on peut également étendre la classe (par exemple Input_Select) pour adapter le comportement du widget à nos besoins.
La méthode getOptions() permet de définir les valeurs proposées dans le select :
<?php // MonSite/Input/SelectCustom/SelectCustom.php class Input_SelectCustom extends Input_Select { function getOptions(){ return array('item', 'collection'); } }
Pour distinguer les valeurs de leurs intitulés, on peut retourner un tableau associatif :
<?php // MonSite/Input/SelectCustom/SelectCustom.php class Input_SelectCustom extends Input_Select { function getOptions(){ return array( 'item' => 'Item', 'collection' => 'Collection'); } }
Pour réutiliser les données configurées dans le fichier labels.xml, nous devons disposer d'informations complémentaires sur le SydonieDocument manipulé au moment de la création des options. Dans la méthode "getOptions()", ces informations ne sont pas disponibles. Pour pallier ce problème, on peut réécrire la méthode build($instance, $predicate).
La méthode build
La méthode build à la particularité de recevoir lors de son exécution une référence à l'objet en cours et le predicate courant. Voici un exemple simple donnant le même résultat que l'exemple précédent :
<?php // MonSite/Input/SelectCustom/SelectCustom.php class Input_SelectCustom extends Input_Select { public function build($obj, $propName) { $this->setOptions( array( 'valueA' => 'Value A', 'valueB' => 'Value B' ) ); } }
La capacité d'avoir accès à l'objet et au prédicat permet, par exemple, d'accéder aux Manager de label de l'objet en cours :
<?php // MonSite/Input/SelectCustom/SelectCustom.php class Input_SelectCustom extends Input_Select { public function build($obj, $propName) { $objectInfos = Manager_Attributes::getInstance()->getAttribute($obj->getId()); $labelManager = Manager_PackageConfig_Labels::getInstance(); $this->setOptions( array( 'item' => $labelManager->getLabel($objectInfos->getSubjectClass(), 'item'), 'collection' => $labelManager->getLabel($objectInfos->getSubjectClass(), 'collection'), ) ); } }