We apologize for untranslated text, you can use the Google Translation button to get an automatic translation of the web page in the language of your choice.

Développer des extensions aux types de base

Une des principales caractéristiques de JCMS est de permettre de définir des nouveaux types de publication (types de contenu, de portlet et de formulaire). Néanmoins, à côté de ces types produits dynamiquement, JCMS gère aussi des types de base qui ne sont pas modifiables. Néanmoins, certains d'entre eux peuvent être enrichi de nouveaux champs grâce au mécanisme des extensions. Il s'agit des types :

  • Groupe (com.jalios.jcms.Group)
  • Membre (com.jalios.jcms.Member)
  • Catégorie (com.jalios.jcms.Category)
  • Document (com.jalios.jcms.FileDocument)
  • Espace de travail (com.jalios.jcms.workspace.Workspace)

1. Principes de fonctionnement des extensions

Les types de base étant codés en dur dans JCMS, il n'est pas possible de modifier leur structure. Il serait possible de faire des sous-classes par héritage mais celles-ci ne seraient pas pour autant prise en compte par le coeur de JCMS. La solution proposée par Jalios pour enrichir ces types est de leur adjoindre un type dynamique encapsulant leur nouveaux champs : l'extension.

2. Développement d'une extension

Les extensions sont gérées comme les types de publication. Leur structure est stockée dans un fichier XML situé dans le répertoire WEB-INF/data/types/ et dont le nom respecte le schéma <NomDuTypeEtendu>Extension.xml. La présence de ce fichier est obligatoire même si il n'y a pas d'extension sur ce type. La DTD des extensions est très proche de celle des types de publication, à quelques différences près :

  • la racine du document XML est <extension>
  • les extensions contiennent uniquement des balises <field> (pas de <displayTemplate>)
  • les extension ne peuvent pas contenir de champ "Zone de texte riche" (wysiwyg)
  • les extensions ne peuvent pas contenir de champ "Catégories" avec les versions de JCMS antérieures à JCMS 4.1.1

Contrairement aux types de publication, JCMS 4.1 ne propose pas encore d'interface d'édition pour définir la structure des extensions. Pour développer une extension, il faut donc actuellement éditer le fichier XML du type à étendre et ajouter les champs souhaités.

Pour simplifier ce développement, il est recommandé de développer un faux type de publication contenant les champs souhaités pour l'extension, puis de copier/coller les balises <field> dans le fichier XML de l'extension.

3. Exemple d'extension

Dans cet exemple, le type membre est enrichi

  • d'un champ textuel "Entreprise" 
  • d'un champ image "Photo"
<?xml version="1.0" encoding="UTF-8"?>
<extension type="com.jalios.jcms.Member" name="MemberExtension" >
<fields>
  <field name="entreprise"
         label="Entreprise"
         editor="textfield"
         required="false"
         compactDisplay="false"
         type="String"
         searchable="true"
         size="80"
         ml="false"
         abstract="true"
         truncate="400" />
  <field name="photo"
         label="Photo"
         editor="image"
         required="false"
         compactDisplay="false"
         type="String"
         searchable="false"
         size="80"
         maxlength="500"
         ml="false" />
</fields>
</extension >

Une fois JCMS redémarré, le formulaire d'édition d'un membre est enrichi de ces 2 nouveaux champs :

jcb extension form

4. Utilisation des extensions via l'API JCMS

La méthode getExtension() permet d'obtenir l'extension de n'importe quel type dérivant de Data. Le type de retour de cette méthode étant DataExtension, il convient de le caster avant d'accéder aux nouveaux champs. La valeur retournée est nulle si il n'y a pas d'extension. C'est en particulier le cas pour les données créées avant que l'extension ait été ajoutée.

Member mbr = channel.getMember("j_2");
MemberExtension ext = (MemberExtension)mbr.getExtension();
String photo = null ;
String entreprise = null ;
if (ext != null) {
  entreprise = ext.getEntreprise();
  photo = ext.getPhoto();
}

In brief...

Cet article [obsolete] décrit comment ajouter des champs aux types de base tels que les groupes ou les catégories via les extensions.

(Depuis JCMS 6 on utilise plutot les ExtraData ou les ExtraDBData :  )

Subject
Published

7/24/04

Writer
  • Olivier Dedieu