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.
L'architecture proposée ici se compose :
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.
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à :
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é.
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>
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.
Ce projet permet d'adapter Osivia Portal à des comportements métiers attendus :
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.
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.
Chaque site dans une usine à sites se trouve dans un domaine séparé. On trouve généralement dedans :
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.
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".
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 :
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 :
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.
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 :
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 :
public static List<ListTemplate> getListTemplates()
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 :
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 :
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 :
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 :
Exemple :