Pré-remplir des Select ou des checkbox avec des valeurs par défaut

De Sydonie

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'), 
           )
       );
   }
}