1. Deux cas d'usage
Les catégories contextuelles peuvent être utilisées pour deux usages differents:
Préserver le portail de consultation d'une publication
Dans JCMS, les publications sont visualisées en front-office dans un portail. Le choix du portail est dépendant des catégories de la publication. Si plusieurs portails sont disponibles le choix est alors arbitraire. Les catégories contextuelle servent à lever cette ambiguité. Cela permet, par exemple, de préserver le portail courant lorsqu'on visualise une publication.
Affiner suivant plusieurs critères le portail de JCMS
La navigation dans le front office de JCMS est régie par les catégories. Les portlets du portail peuvent s'affiner en fonction de cette navigation. Mais il est parfois nécessaire d'affiner le portail en fonction de plusieurs critères. Les catégories contextuelle répondent a ce besoin tout en préservant la mécanique de navigation.
2. Mise en oeuvre
La navigation dans le portail de JCMS se fait à l'aide des catégories présentées par les portlets de navigation. Quand une catégorie est spécifiée, les portlets du portail peuvent s'affiner en fonction. L'objectif de cette section est de présenter étape par étape la mise en place de quatre portlets d'affinement. Les catégories de ces portlets permettront d'affiner le portail (de manière transverse à la navigation).
2.1 Création d'une arborescence de catégories
La première étape consiste à créer une arborescence de catégories dédiée à l'affinement de l'interface. Voici un exemple de plan de classement :
| Période | Evènement | Lieu | Thème |
| 2000-2001 | Séminaire | Etats-Unis | Sécurité |
| 2001-2002 | Réunion de travail | France | CRM |
| 2002-2003 | Conférence | Irlande | ERP |
| 2003-2004 | Formation | Angleterre | KM |
| 2004-2005 | Espagne | AJAX | |
| Allemagne |
Voici le résutat dans JCMS :

Editeur de catégories
Un portail est associé à la racine des catégories contextuelles pour simplifier la démonstration.
- Editer une première fois une catégorie .
- Taper 2 fois sur la touche "Entrée" :
- Le premier "Entrée" enregistre la catégorie.
- Le deuxième "Entrée" réouvre l'interface d'ajout de catégorie.
2.2 Création des Portlets d'affinement
Créer 4 Portlets de Navigation avec la valeur "d'affinement" pour l'option "comportement". Cette option indique au gabarit d'affichage que ces catégories seront des catégories contextuelles.

Edition d'une portlet de navigation
Voici le résutat dans le portail :

Portlet de Naivgation avec catégories contextuelles
2.3 Création de la Portlet de Navigation
Créer une Portlet de Navigation. Le gabarit d'affichage choisi est "Menu déroulant". L'option "comportement" est maintenant "Navigation".
Voici le résultat dans le portail :

Portlet de Navigation standard
2.4 Création de la Portlet Requête/Itération
2.4.1 Contenus de test
Créer des contenus de test qui seront visualisables par la portlet requête/itération. Ces contenus doivent être catégorisés avec des catégories contextuelles.
2.4.2 Portlet Requête/Itération
Créer une portlet requête/itération. Cette portlet doit affiner les resultats de requêtes sur les catégories contextuelles et propager les catégories contextuelles.

Edition d'une Porlet Requête/Itération
Voici le résultat dans le portail :

Portlet Requête/Itération avec affinement selon les catégories contextuelles
2.5 Navigation
2.5.1 Navigation standard
Cliquer sur les catégories de la portlet de navigation. Le paramètre de requête "id" est mis à jour et le portail se rafraichit en fonction. Comme l'option "Affiner sur la catégorie courante" de la portlet requête/itération est positionnée, celle ci est affinée automatiquement.

Navigation sur la catégorie "Réunion de travail"
2.5.2 Affinement de la navigation
Cliquer sur les catégories des portlets d'affinement. Le paramètre "cid" est mis à jour et le portail se rafraichit en fonction. Il peut y avoir plusieurs catégories d'affinement. Comme l'option "Affiner sur la catégorie courante" de la portlet requête/itération est positionnée, celle ci est affinée automatiquement.

Affinement sur la catégorie "France"
Quand on clique deux fois sur une catégorie, le paramètre "cid" est mis puis enlevé. Il est possible de sélectionner plusieurs catégories dans une même portlet de raffinement. C'est un choix d'implémentation qui peut être modifié.
2.6 Visualisation d'une publication
Cliquer sur les catégories de la portlet de navigation, puis visualiser une publication. La publication est affichée avec son gabarit d'affichage. Comme l'option "Propager les catégories de contexte" est positionnée, la catégorie courante précédente est ajoutée en catégorie contextuelle. La mécanique du portail tient compte de cette catégorie contextuelle pour déterminer le portail à utiliser si plusieurs portails sont possibles, cette option permet de lever l'ambiguité.

Affichage de la publication "Article E" dans la catégorie "Séminaire"
3. Fonctionnement interne
3.1 Le paramètre "cid"
Les catégories contextuelles ne fonctionnent que sur le front-office. Toutes la mécanique repose uniquement sur la gestion d'un nouveau paramètre de l'URL qui est "cid". Ce paramètre peut être présent en plusieurs exemplaires. Il représente l'identifiant d'une catégorie.
3.2 API
La classe com.jalios.jcms.portlet.PortalManager propose des méthodes utilitaires permettant la manipulation des catégories contextuelles. La méthode PortalManager.getUrlWithUpdateCtxCategories permet de construire une URL de navigation en mettant à jour les catégories contextuelles. Cette méthode est utilisée par la majorité des gabarits d'affichage (capables de présenter des catégories contextuelles) de la portlet de Navigation (Portlet Navigate).
<% int cpt = 0; %>
<jalios:foreach collection='<%= navigateSet %>' type='Category' name='itCategory'>
<jalios:if predicate='<%= itCategory.canBeReadBy(loggedMember , true, true) %>'>
<jalios:if predicate='<%= ++cpt > 1 %>'> | </jalios:if>
<a href='<%= PortalManager.getUrlWithUpdateCtxCategories(itCategory , ctxCategories, request , !box.getNavigatePortlet()) %>'><%= itCategory.getName(userLang) %></a>
</jalios:if>
</jalios:foreach>
Pour obtenir la liste des catégories contextuelles, il faut appeler la méthode getCtxCategories() de la variable jcmsContext (disponible dans toutes les JSPs).



