Présentation

Le multi-sites est un modèle de déploiement proposé par Osivia portal permettant d'exécuter sur une même instance nuxeo et une même instance portail plusieurs sites web. L'apport du multi-sites c'est de regrouper des éléments logiciels (portlet) et des éléments de configuration (templates, chartes, ...) qui seront communs à plusieurs sites wev. Cela permet de déployer rapidement de nouveaux portails en utilisant des composants déjà disponibles.

Diagramme de déploiement

L'architecture proposée ici se compose :

  • D'un frontal apache répondant sur N domaines différents (ou N est le nombre de sites).
  • D'une instance portail avec d'un part les composants logiciels communs déployés. D'autre part les configuration portail. On distingue toujours un portail par défaut portant des éléments minimaux et N portail par site.
  • D'une instance nuxeo avec également des composants logiciels communs déployés (appelés contributions). Par contre, sous Nuxeo chaque site a ses données propres. Il n'y a pas de configuration ou de pages communes.
  • Optionnellement, d'un serveur d'authentification couplé à un annuaire.

Portail

Philosophie

Dans une usine à site, on part du principe que tous les sites ont le même design, ou qu'à minima la charte graphique a des éléments en commun. Par exemple, tous les sites d'une même institution vont être composés d'un bandeau en haut de la page, d'une zone de recherche en haut à droite, d'un menu à gauche. Ensuite chaque site varie dans sa forme (couleurs, images utilisées, ....) et dans son fond (le contenu CMS).

L'administrateur du site définit donc des layouts et des templates qui doivent être le plus générique possible. Le nombre de templates disponibles est peu important et évolue peu car il n'y a pas d'adhérence à un site ou un contenu métier en particulier. Pour toutes les particularités des sites (listes, portlet métiers, etc.) on utilisera les fragments du mode page.

Configuration

Portail "défaut"

Le portail par défaut n'a pas de contenu éditorial en tant que tel. Il contient juste une page par défaut et un dossier template dans lequel seront regroupés tous les templates communs. La page par défaut n'a pas la variable osivia.cms.basePath (lien nuxeo). La page et le portail par défaut pointent sur un thème minimal défini dans le projet charte. Par contre tous les templates pointent sur le thème "default". Cela permet au site enfant de le surcharger.

A chaque accès à une ressource du portail, le thème appliqué est calculé dans cet ordre là :

  1. La page définit son propre thème
  2. Sinon, on cherche le thème lié au template
  3. Si le template indique le thème "default", on cherche le thème appliqué au portail courant.
  4. Si le portail courant indique le thème "default", on cherche le thème appliqué au portail default.

Dans notre cas, même si les templates sont mutualisés, chaque site applique sa propre charte. C'est donc le point (3) qui est appliqué.

Layouts

Les layouts sont aussi dépendants des thèmes, en effet on injecte les feuilles de style à appliquer dans le head. Suivant la même logique que les templates, chaque layout doit appliquer le thème default pour être calculé par le portail.

<head>
	<p:region regionName='header-metadata' />
	<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

	<p:headerContent />
	<p:theme themeName="default" />
</head>
Portails enfants

Chaque portail enfant est lié à nuxeo. Il contient une ou plusieurs pages, chacune d'entre elle définit la variable osivia.cms.basePath qui pointe sur un espace de publication Nuxeo. La page et le portail enfant référencent un thème parmi les thèmes qui sont déployés sur l'instance du portail (voir les projets chartes). Les portails enfants définissent osivia.site.hostName (le nom de domaine propre au site web). Les portails enfants peuvent redéfinir des templates à la marge.

Composants déployés

Customizer

Ce projet permet d'adapter Osivia Portal à des comportements métiers attendus :

  • listTemplates : permet de définir des rendus d'affichage pour les listes de document. On spécifie les schémas nuxeo qui seront retournés par la requête de liste. Le nom du template de liste est associé à une jsp du même nom qui prendra en charge l'affichage.
  • extraRequestFilters : permet d'étendre la portée de recherche des documents qui se limite par défaut à l'espace de publication du site courant. Ceci s'applique à chaque requête Nuxeo, pour la recherche mais aussi pour l'affichage de listes.
  • cmsPlayers : permet d'associer à un contenu un lecteur, c'est à dire une porlet qui sera instanciée spécifiquement pour afficher ce contenu en vue maximized. Exemple : si on navigue sur un objet Formation, on souhaite que ça soit la portlet Catalogue formation qui prenne en charge son affichage. Le rôle du lecteur (player) étant alors d'instancier correctement la portlet avec les bons paramètres.
  • cmsItemsAdapters : permet d'associer à un contenu un adapteur de navigation, comme une page particulière du site dans lequel le contenu doit s'afficher. Exemple : si on navigue sur un objet Formation, on souhaite que le contexte de navigation (c'est à dire la page, le positionnement dans le menu, le chemin de fer) soit positionné dans la page "offre de formations".
  • webURLAdapters : permet d'associer des URL virtuelles à des contenus Nuxeo qui ne sont pas directement dépendants de l'espace de publication du site web courant. Ex : monsite1.com/web correspond sous Nuxeo à monsite1-domain/accueil qui est l'espace de publication du site. Si sous monsite1 il y a un catalogue de formation, on ajoutera la règle suivante : monsite1.com/web/catalogue est associé sous Nuxeo à monsite1-domain/catalogue-formation. Ce path est virtuel car il n'y a pas d'objet "catalogue" dans l'espace de publication monsite1.
  • editableWindowAdapters : permet d'associer un type de fragment nuxeo métier à une portlet qui l'affichera côté portail dans une page. Le type de fragment doit être installé côté Nuxéo via un objet de configuration web et une contribution précisant son schéma, ses vues d'édition, etc... Ensuite l'adapter a pour rôle de récupérer ces données et d'instancier la portlet dans la région attendue.
Chartes

Le portail dans un contexte multi-sites a un composant de charte par défaut contenant les layouts utilisés par tous les sites enfant. Toutes les régions référencées par ces layouts se trouvent dans ce projet. Il contient également un thème pour permettre d'afficher les écrans d'édition de template.

Il est possible de déployer des chartes supplémentaires qui embarquent les feuilles de styles, javascript et images supplémentaires regroupées autour de la notion de thème de JBoss Portal.

Portlets

Le projet toutatice déploie de nombreuses portlet utilisables par tous les sites (listes, affichage de documents, menu, fragments, recherche, ...). Les portlets supplémentaires sont déployables par simple dépôt sur le serveur. C'est ensuite dans les templates ou dans les fragments d'une page que l'on fera l'association entre la page, le contenu à afficher et l'instance de portlet à utiliser pour ça.

Nuxéo

Vue d'un site côté Nuxeo

Chaque site dans une usine à sites se trouve dans un domaine séparé. On trouve généralement dedans :

  • Un espace de publication dans lequel chaque enfant (page, note, lien, ...) va avoir un cycle de vie dédié à la publication (en ligne, brouillon, en attente de validation).
  • Optionnellement : d'autres types de document métier (ex : catalogue de formation) gérés de manière indépendante.
  • Une banque de ressources [en projet] permettant de partager entre plusieurs pages des images, des fichiers à télécharger.
  • Et enfin, un profil de configuration ajustant les options du portail.

Objets de configuration

Les objets de configuration servent à spécialiser le comportement de chaque portail. Chaque objet de configuration comprend un libellé, un type (c'est à dire le type de configuration sur lequel l'objet va agir dans le portail), un visuel, un ordre et une coche pour savoir si la configuration est active ou non. Suivant le type de configuration, il y a ensuite plusieurs champs techniques à valoriser ou non.

Fragments standards

Définit les types de fragments utilisables dans une page web. Par défaut, on trouve le fragment html (texte riche) et le fragment liste. Les types de fragment sont proposés à l'utilisateur dans le portail par le bouton "Ajouter un fragment".

Fragments portlets

Il est possible d'instancier une portlet dans un fragment de page. On définit alors un modèle de configuration de cette portlet dans un objet de configuration.

Le paramétrage est le suivant :

  • Type : fragment type
  • Nom : au choix
  • Code : fgt.portlet
  • Code complémentaire : le nom de l'instance du portlet dans JBoss Portal
  • Il est possible de rajouter des paramètres sous forme de paires clé/valeur qui seront directement passés à la portlet lors de son affichage dans le portail.
Templates de page

Ici sont référencés les templates que le contributeur peut choisir pour sa page. Les templates apparaissent dans les écrans "Créer une web page" et "Propriétés" en front office.

Le paramétrage est le suivant :

  • Type : page template
  • Nom : au choix
  • Code : le chemin du template dans JBoss portalt. Exemple : /default/templates/tpl-3-colonnes

Remarque : un objet de configuration existe par défaut pour permettre à l'utilisateur de prendre le template du parent (ce qui arrive dans la majorité des cas). Le code est alors vide.

Styles des boîtes

Ces configurations permettent d'appliquer à des fragment un style sur l'ensemble de la boîte qui le contient. Les configurations sont sélectionnables dans les écrans d'édition de fragment.

Le paramétrage est le suivant :

  • Type : window style
  • Nom : au choix
  • Code : un style CSS disponible dans le thème appliqué à la page/au portail.
Modèles des listes

Ces configurations s'appliquent sur des fragments listes afin d'en modifier le style (présence de la description, vignette ou non, etc.). Voir la copie d'écran ci-dessus.

Le paramétrage est le suivant :

  • Type : list template
  • Nom : au choix
  • Code : un template de liste définit dans le customizer côté portail. cf la méthode :
public static List<ListTemplate> getListTemplates()
Configuration CMS avancée

Ces configurations permettent d'enrichir le comportement par défaut du portail. Elles sont une alternative au codage en java de comportements spécifiques dans le projet customizer.

Extension de la recherche

Étend le scope de recherche (affichage de liste, résultats du moteur de recherche). Le paramétrage est le suivant :

  • Type : extra request filter
  • Nom : au choix
  • Code : Code NXQL. Il sera ajouté au scope par défaut avec ce pattern : select * from Document where [clauses par défaut] OR [clause de la configuration 1] OR [clause de la configuration 1] OR [...]

Exemple :

Règles d'URL

Permet de créer des path pour des objets qui sont en dehors de l'espace de publication du site. Le paramétrage est le suivant :

  • Type : CMS to webpath adapter
  • Nom : au choix
  • Code : Le chemin Nuxeo racine des objets à mapper avec des URL web
  • Code complémentaire : l'URL affichée côté portail (ne doit pas entrer en conflit avec l'url d'un document existant sous l'espace de publiation).

Exemple :

Contextualisation de contenus

Permet d'associer pour un type d'objet donné une page dans laquelle il s'affichera en vue "maximized". Le paramétrage est le suivant :

  • Type : CMS navigation adapter
  • Nom : au choix
  • Code : Le type de document Nuxeo à contextualiser
  • Code complémentaire : le path de la page à afficher lorsque ce type d'objet est accédé.

Exemple :

Présentation du contenu

Permet d'associer pour un type d'objet donné une portlet qui la présentera en vue "maximized". Le paramétrage est le suivant :

  • Type : CMS player
  • Nom : au choix
  • Code : Le type de document Nuxeo à présenter
  • Code complémentaire : le player référencé dans le projet customizer
  • Il est possible de rajouter des paramètres sous forme de paires clé/valeur qui seront directement passés à la portlet lors de son affichage dans le portail.

Exemple :