Créer un objet AttributeType
Les AttributeTypes sont des éléments permettant de typer les attributs d'un objet. Ces AttributeTypes sont par essence composites, c'est à dire qu'ils sont constitués eux même d'attributs.
Sommaire
Exemple de configuration d'un object
<?xml version="1.0" encoding="UTF-8"?> <configuration> <class> <name>SydonieDocument_Test</name> <extends>Abstract_SydonieDocument</extends> <mandatoryProp /> </class> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workDate</predicate> <objectClass>AttributeType_Date</objectClass> </attribute> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workDateTime</predicate> <objectClass>AttributeType_DateTime</objectClass> </attribute> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workDateInterval</predicate> <objectClass>AttributeType_DateInterval</objectClass> </attribute> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workText</predicate> <objectClass>AttributeType_Text</objectClass> </attribute> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workInt</predicate> <objectClass>AttributeType_Int</objectClass> </attribute> <attribute entityLevel="work" minOccur="1" maxOccur="1" mandatory="0"> <predicate>workComposite</predicate> <objectClass>AttributeType_Composite</objectClass> </attribute> </configuration>
Pour résumer ce package SydonieDocument_Test possède les attributs suivants ayant chacun leur type (AttributeType) :
- (AttributeType_Date) workDate
- (AttributeType_DateTime) workDateTime
- (AttributeType_Text) workText
- (AttributeType_Int) workInt
- (AttributeType_DateInterval) workDateInterval
- (AttributeType_Composite) workComposite
- (+ tous les attributs hérités du package SydonieDocument)
Construction d'un AttributeType
Certains AttributeType sont définis directement dans Sydonie, d'autre peuvent être définis suivant les besoins de l'application. Ainsi, les AttributeType suivant de ce fichier de configuration sont définis dans le répertoire SYDONIE/AttributeType/ :
- AttributeType_Date
- AttributeType_DateTime
- AttributeType_Text
- AttributeType_Int
- AttributeType_DateInterval
Dans notre exemple, l'AttributeType_Composite est défini du coté de l'application, dans le répertoire SYDONIE_SITE/AttributeType/Composite.
Ci-dessous, le répertoire contenant les configurations et classes pour le fonctionnement de l'AttributeType_Composite
Composite/ ├── Composite.php ├── Composite_Ui_Xhtml.php ├── config.xml ├── fields.xml ├── labels.xml └── templates ├── edit.tpl.php └── view.tpl.php
Un AttributeType est, par héritage, une SydonieEntity. Sa définition est donc proche de la définition d'un nouveau SydonieEntity / SydonieDocument.
config.xml
Le fichier de configuration d'un AttributeType permet de définir ses attributs. Par exemple, pour définir un AttributeType propre à la description d'un lieu, nous pourrions avoir besoin des informations suivantes :
- la dénomination du lieux
- les coordonnées de ce lieux
Pour l'AttributeType_Composite, nous définissons trois attributs :
- compositeText qui contiendra du texte
- compositeDate qui contiendra une date
- compositeDateTime qui contiendra une date ainsi que des heures, minutes et secondes.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <class> <name>AttributeType_Composite</name> <mandatoryProp> <prop>id</prop> </mandatoryProp> </class> <attributes> <attr type="text">compositeText</attr> <attr type="date">compositeDate</attr> <attr type="datetime">compositeDateTime</attr> </attributes> </configuration>
Chaque attribut possède donc un type que l'on peut qualifier de "primitif". Ce type primitif définit la manière dont le champ sera stockée dans la base de donnée associé à l'application. Il existe pour l'heure quatre types primitifs :
- text
- int
- date
- datetime
Les types définis sont ceux se trouvant dans le répertoire SYDONIE/Abstract/AttributeType/BasicType.
AttributeType.php
La classe AttributeType.php (dans notre exemple Composite.php) permet de définir les comportements de base de l'AttributeType : elle permet de définir les valeurs par défaut de ses attributs (dans notre exemple compositeText, compositeDate et compositeDateTime).
<?php class AttributeType_Composite extends Abstract_AttributeType { public function getInstanceHeading() { return $this->getCompositeText(); } public static function initCompositeText($values) { return ''; } public static function initCompositeDate($values) { return new DateTime(); } public static function initCompositeDateTime($values) { return new DateTime(); } } ?>
Templates d'AttributeType
Lors de la fabrication d'un template d'un objet ayant un AttributeType_Composite, nous sommes amené à demander la manière dont s'affiche cet AttributeType_Composite.
Par exemple, dans le template d'édition de notre SydonieDocument_Test (SYDONIE_SITE/SydonieDocument/Test/templates/edit.tpl.php) :
<div> <?php echo $ui->input('title'); ?> <?php echo $ui->input('description'); ?> <?php echo $ui->input('workDate'); ?> <?php echo $ui->input('workDateTime'); ?> <?php echo $ui->input('workDateInterval'); ?> <?php echo $ui->input('workText'); ?> <?php echo $ui->input('workInt'); ?> <?php echo $ui->input('workComposite'); ?> </div>
Ou encore, dans le template de visualisation de SydonieDocument_Test (SYDONIE_SITE/SydonieDocument/Test/templates/edit.tpl.php) :
<ul> <li><?php echo $ui->label('workDate.date');?> : <?php echo $ui->prop('workDate'); ?></li> <li><?php echo $ui->label('workDateTime.dateTime');?> : <?php echo $ui->prop('workDateTime'); ?></li> <li><?php echo $ui->label('workDateInterval');?> : <?php echo $ui->prop('workDateInterval'); ?></li> <li><?php echo $ui->label('workText.text');?> : <?php echo $ui->prop('workText'); ?></li> <li><?php echo $ui->label('workInt');?> : <?php echo $ui->prop('workInt'); ?></li> <li><?php echo $ui->label('workComposite');?> : <?php echo $ui->prop('workComposite'); ?></li> </ul>
Les fichiers edit.tpl.php, view.tpl.php de l'AttributeType_Composite permettent de définir ces briques de visualisation.
Composite/ ├── ... └── templates ├── ... ├── edit.tpl.php ├── view.tpl.php └── ...
edit.tpl.php
L'écriture du template d'édition d'un AttributeType fonctionne de la même manière que le template d'édition de tout object SydonieEntity.
<?php echo $ui->input('compositeText'); ?> <?php echo $ui->input('compositeDate'); ?> <?php echo $ui->input('compositeDateTime'); ?>
view.tpl.php
L'affichage des attributs d'un AttributeType nécessite un formatage dans le cas ou la données n'est pas du texte (ie: au cas ou le type de l'attribut n'est pas "text").
<?php echo $ui->prop('compositeText'); echo ' - '; echo $ui->prop('compositeDate')->format('Y-m-d'); echo ' - '; echo $ui->prop('compositeDateTime')->format('Y-m-d'); ?>