Tags K-Sup
Définition d'un tag
Un tag doit être de type DefaultPluginTag ou doit l'étendre.
Lors de la définition du tag, les propriétés suivantes peuvent être définies :
- identifiantTag : identifiant du tag
- extracteur : bean de type ExtracteurTag qui défini la facon dont le contenu du tag est extrait du texte parsé
- interpreteurs : liste de beans de type AbstractInterpreteurTag qui définissent comment sera interprété le tag selon un contexte donné
- baliseOuvrante : chaine de caractères définissant le début du tag
- baliseFermante : chaine de caractères définissant la fin du tag
- order : ordre d'interprétation du tag (1000 par défaut)
<bean id="tagMailto" class="com.kportal.extension.module.plugin.toolbox.DefaultPluginTag">
<property name="identifiantTag" value="[mailto]"/>
<property name="extracteur">
<bean class="com.kportal.tag.extracteur.impl.ExtracteurHtmlEnDehorsDuTag">
<property name="identifiantTag" value="[mailto]"/>
</bean>
</property>
<property name="interpreteurs">
<bean class="com.kportal.tag.interpreteur.impl.InterpreteurMailto">
<property name="contextesTag">
<list>
<util:constant static-field="com.kportal.tag.util.ContexteTagUtil.DEFAUT"/>
</list>
</property>
</bean>
</property>
<property name="baliseOuvrante" value="<a"/>
<property name="baliseFermante" value="</a>"/>
</bean>
Extracteur
L'extracteur permet de récupérer au sein d'un texte, le contenu du tag ainsi que les balises ouvrante/fermante.
La classe de l'extracteur doit implémenter ExtracteurTag et définir une méthode getContenuTagPresentDansTexte qui retourne le contenu du tag dont les balises sont passées en paramètre.
public class DefautExtracteurTag implements ExtracteurTag {
@Override
public String getContenuTagPresentDansTexte(String texte, String baliseOuvrante, String baliseFermante) {
String contenuTag = StringUtils.substringBetween(texte, baliseOuvrante, baliseFermante);
if (contenuTag != null) {
contenuTag = baliseOuvrante + contenuTag + baliseFermante;
}
return contenuTag;
}
}
Interpreteurs
Les interpréteurs du tag ont deux fonctions :
- parser le tag et retourner le résultat
- calculer les références vers les fiches/médias
Un tag peut avoir N interpréteurs, ceux-ci sont déclarés lors de la définition du tag ou peuvent être ajoutés via un ListToAddBean.
Chaque interpréteur défini la liste des contextes qu'il prend en charge.
<property name="interpreteurs">
<bean class="com.kportal.tag.interpreteur.impl.InterpreteurMailto">
<property name="contextesTag">
<list>
<util:constant static-field="com.kportal.tag.util.ContexteTagUtil.DEFAUT"/>
</list>
</property>
</bean>
</property>
Ordonancement des tags
Dans certains cas, il est nécessaire d'ordonnancer l'interprétation des tags : par construction, il est possible de générer des tags imbriqués
C'est le cas notamment du tag "centre d'intêret" qui peut-être utilsé comme paramètre du tag liste de fiche. Afin d'obtenir une interprétation correcte des tags, le tag "centre d'intêret" doit être interprété avant le tag "liste de fiches"
Cet ordonnancement est controlé par l'attribut "order" lors de la déclaration du tags dans le fichier de contexte, par exemple:
...
<!--TAGS CENTRES D'INTERET -->
<bean id="tagCentresinteret" class="com.kportal.extension.module.plugin.toolbox.DefaultPluginTag">
<property name="identifiantTag" value="[centresinteret]"/>
<property name="extracteur" ref="defautExtracteurTag" />
<property name="order" value="#{TAG_DEFAULT_ORDER-100}" />
<property name="interpreteur">
<bean class="com.kportal.tag.interpreteur.impl.InterpreteurCentresinteret"/>
...
Par défaut, tous les tags ont un ordre positionné à "1000". 4 tags ont été priorisés spécifiquement pour être interprétés prioritairement :
- Le tag [centresinteret], ordre=900
- Le tag [media;video;], ordre=950
- Le tag [media;audio;], ordre=950
- Le tag [media;pdfviewer;], ordre=950