Lors de nos formations avancées sur le CMS Joomla! nous abordons la question des possibilités multi sites du CMS. C'est un fait trop souvent méconnu, le CMS Joomla! est nativement multi sites, même si quelques extensions majeures peuvent enrichir cette fonctionnalité.
La gestion multi-sites revêt plusieurs avantages:
Nous avons retenu pour ces articles 4 solutions qui sont:
C'est un fait peu connu mais qui est directement lié au fait que les liens sous Joomla! sont par défaut relatifs. Les urls qui sont générées entre les pages sont indépendantes du domaine.
Il faut commencer par préciser, au niveau du serveur, que votre site Joomla! répond à deux domaines (directive ServerAlias dans le vhost du domaine) avec par exemple:
ServerName monsite1.com
ServerAlias monsite2.com
Alors dans ce cas vous avez déjà un projet multi sites sans installer aucune extension sur votre site Joomla!. A ce moment les deux urls affichent cependant le même site.
La suite permet de préciser des arborescences et des contenus différents par site.
Vu que Joomla! ne peut définir qu'un seul élément de menu principal (la home du site) nous définirons que la page d'accueil du site1 (lien vers l'article "accueil site 1") est http://www.monsite1.com et que la page d'accueil du site2 sera http://www.monsite2.com/accueil-site2 (vers l'article "accueil site 2").
Faisons deux menus, un pour chaque site avec une page d'accueil par site. Pour cela il faut créer deux articles et deux liens de menus dans deux menus séparés:
Voici les 2 menus:
Et ici le lien de menu du premier menu:
Chaque menu est ensuite affiché par un module distinct:
Pour indiquer qu'un seul de ces modules de menu sera affiché par domaine on utilise le très connu Advanced Module Manager (version gratuite) qui permet de préciser l'affichage du module selon l'url:
Si on ne fait rien, un appel vers http://www.monsite2.com renvoie toujours vers le site 1 qui est le site par défaut, en affichant l'accueil du site1. Pour éviter cela il faut ajouter une redirection dans le .htaccess à la racine du projet Joomla!:
Si vous faites un lien vers un second article depuis l'article 1 (http://www.monsite1.com/lien-vers-article2) il suffit de préciser /lien-vers-article2 et le routeur de Joomla! fait le reste. Mais rien ne vous empêche de préciser depuis cet article1 un lien absolu comme http://www.monsite2.com/lien-vers-accueil2.
Si on appelle http://monsite1.com on a l'affichage suivant (noter l'affichage du module de menu1 seulement)
Et si on appelle http://monsite2.com on aura (noter l'affichage du module de menu2 seulement et la redirection automatique vers l'article d'accueil du site 2):
Reste la question d'un design différent par site mais là encore tout est natif puisque depuis longtemps on peut spécifier un style de template par élément de menu:
Les solutions suivantes vont ajouter chacune des fonctions supplémentaires à cette gestion multi sites comme par exemple le contrôle du partage des contenus sur les différents sites ou la génération facilité de sites clones.
Sorti en juillet 2008, JMS (Joomla Multi Sites) est la première extension majeure pour gérer plusieurs sites avec une seule installation Joomla! fonctionnant d'abord sur les version 1.5 puis 2.5, JMS a su s'adapter et se bonifier avec le temps pour être compatibles avec les dernières versions 3.x du CMS.
Le principe de JMS est qu'avec cette extension vous pouvez utiliser une seule installation de Joomla! pour gérer plusieurs bases de données ou une seule base de données avec des tables possédant des préfixes différents (par site).
Chaque site dispose aussi de son propre fichier de configuration. On peut aussi installer ou desinstaller une extension à l'intérieur d'un site "esclave". Un site "esclave" peut seulement reinstaller une extension qui a été installée précédemment sur le site "maître" et seulement si il s'agit de la même version.
Chaque site esclave dispose de ses propres répertoires template, image, media, cache, log, et tmp.
On peut aussi créer des sites esclaves depuis le front office. Ces sites esclaves peuvent être soit "libres" soit "payants" dans une logique d'usine à sites payants.
La version 1.2 de juin 2009 a apporté la possibilité de dupliquer un site dans une autre base de données. La gestion des "templates de sites" (un ensemble de règles de duplication depuis le site maître) a été aussi simplifiée avec notamment la possibilité de mettre à jour automatiquement les sites esclaves selon une mise à jour des extensions sur site template.
Avec cette version on dispose d'un panneau de contrôle pour définir quels composants sont partagés entre les sites et quelles extensions doivent être déployées ou mises à jour sur les sites esclaves à partir des sites maître ou template.
La version 1.3 de Juillet 2012 apporte la possibilité de générer des variantes de sites selon la géolocalisation ou la détection du support (les mobiles en particulier).
La gestion des sites est très simple et consiste en la déclaration du nom de domaine (ou de sous-domaine) qu'on veut partager avec le site maître (la première installation de Joomla!). Voici maintenant les différentes possibilités d'architecture et d'organisation des sites esclaves:
Soit on fonctionne avec plusieurs bases de données soit avec une seule base mais des prefixes de tables différents par site.
On peut créer un site esclave directement ou en utilisant un template de site qui est en fait une liste de regles de création et de partage des informations du site maître vers le site esclave.
Quand on partage une extension (par exemple les utilisateurs Joomla!) il n'y a pas de copie de la table mais la création d'une vue (au sens SQL) sur la table existante, c'est à dire d'une sorte de lien ou de raccourci vers la table physique.
On peut créer un site esclave selon 3 méthodes:
Même dans la 3eme option il y a des limitations sur les règles de partage. On n'a pas forcément toute latitude sur le partage des contenus par exemple. On ne peut pas définir quels contenus sont partagés ou uniquement visibles sur tel ou tel site. C'est tout ou rien. Il existe cependant des extensions de JMS comme "Partial User Sharing" ou "Articles Sharing" pour contourner ces limitations.
La documentation de JMS est assez fournie et vous guidera pas à pas dans l'installation et la configuration de vos sites que ce soit à l'intérieur du CMS ou au niveau du serveur qui héberge les le site avec la gestion des différents noms de domaines, sous domaines et vhosts.
A noter aussi la présence de l'extension "Single Sign-In for domains" qui permet une connexion automatique sur un site esclave à partir du moment qu'on est connecté sur un des autres sites (si le composant com_users est partagé).
Le support répond rapidement (en français ou en anglais) et le forum contient de précieuses informations. Le site contient aussi beaucoup de tutoriels avec des vidéos pour vous aider dans le gestion de cette extension qui reste assez complexe.
Par contre on peut regretter que le produit ne soit pas plus souvent réactualisé, la version 1.3 datant de 2012 (même si des correctifs sont arrivés en 2015).
La gestion multi sites est un sujet complexe qui ne va pas sans quelques limitations qu'il faut bien comprendre avant de choisir une extension.
Une difficulté principale réside dans la granularité du partage entre les sites. Au delà des composants natifs (com_content, com_users...) le partage n'est pas toujours assuré avec les extensions tierces ou dans le meilleur des cas il ne peut être que total. On ne pourra donc pas, par exemple, disposer de n sites avec un Jomsocial avec chacun ses propres contenus mais qui partageraient les mêmes utilisateurs.
JMS est une extension 100% payante avec différentes versions selon les options choisies. Les prix vont de 50 à 175 ce qui n'est pas cher pour une agence. Un particulier n'a en général pas besoin de ce genre d'extensions. A noter aussi que les plugins additionnels (partages partiels d'articles, connexion sso, etc...) sont aussi payants.
Plus d'info sur http://www.jms2win.com/
Profitant des limitations de JMS la société AlterBrains a édité quelques années après une extension assez similaire qui est MyghtySites. Cette extension est utilisée pour :
Les cas d'utilisation sont alors:
Elle n'est pas en ligne mais est envoyée sur simple demande. Pas aussi fournie que celle de JMS elle permet cependant de vous guider efficacement dans l'installation et la configuration de l'extensions. Le support est d'excellente qualité, réalisé par des professionnels et experts de Joomla! depuis l'époque même de Mambo!
A la différence de JMS il n'y a ici qu'un tarif unique à $59. Il n'y a pas non plus des coûts additionnels pour des plugins supplémentaires payants comme JMS. La solution est donc plus abordable mais est-ce important pour un outil qui n'intéresse principalement que des agence ?
Au delà d'un coût moindre, MightySites permet de partager des contenus de la base de données, des composants ou de tables personnalisées, ce que JMS ne peut pas faire. Il est aussi plus simple et plus rapide à prendre en main.
Plus d'info sur https://alterbrains.com/joomla-extensions/administration/multisites-manager
Si JMS et MightySites utilisent une approche assez similaire (principe du site esclave) il en va tout autrement avec SEBLOD dont la fonction multi sites se repose entièrement sur la gestion native multisites de Joomla! et les ACLs du CMS.
La gestion des sites sous SEBLOD est simplissime. En fait l'apport de SEBLOD au mutli sites de Joomla! consiste à permettre le contrôle du partage des contenus entre les sites. Il devient alors très facile de préciser que telle ou telle actualité sera visible sur tel ou tel site sans avoir à la dupliquer. Ce contrôle s'effectue au travers des niveux n'accès (les ACLs). A chaque nouveau site est associée une collection de groupes et d'ACLs de telle sorte que selon le domaine demandé Joomla! utilise le jeu d'ACL correspondant.
Ici on ne parle pas de site maître ou de site esclave ou dupliqué. L'approche est radicalement différente et quasiment native Joomla! puisque pour chaque site on définit des menus, modules et contenus auxquels on attribue les acls souhaitées.
Le grand avantage de cette méthode est qu'elle permet de définir précisément ce qu'on veut partager. Là où JMS et MightySites ont ne peuvent que difficilement partager tel contenu et non tel autre (car le partage est souvent global au niveau du composant) SEBLOD nous permet de choisir exactement ce qu'on veut partager.
Il suffit de définir les acls croisés entre les domaines pour les élements qu'on veut partager entre tel et tel site.
Par site on attribue le menu par défaut comme son template par défaut ce qui permet d'avoir des site avec des visuels très spécifiques avec un contrôle de partage des fonctions et des contenus très fin.
L'approche multi sites de SEBLOD est d'une part beaucoup plus simple (il ne s'agit que d'une association entre un domaine et un jeu d'ACLs) qu'avec les méthodes de sites Maître/Esclave utilisées par JMS ou MightySites, mais elle nécessite la prise en main de SEBLOD qui reste une extension très riche et relativement complexe.
Etant donné qu'il s'agit plus de construire un nombre quelconque de sites sur une seule installation Joomla! et qui vont partager de façon fine autant de contenus et fonctions qu'on le souhaite, cette approche n'est pas idéale quand on veut pouvoir déployer rapidement des sites images selon un site type. Ici on a un seul fichier configuration.php et chaque extension n'a aussi qu'une seule configuration unique pour tous les sites.
C'est un grand avantage de SEBLOD car la solution est totalement gratuite. Quelques dizaines d'euros ne sont cependant par un frein pour une agence qui doit développer un projet multi sites de plusieurs dizaines de miliers d'euros!
C'est souvent le point faible des solutions à base de SEBLOD. La documentation existe sur le site mais elle n'est pas très synthétique (il faut chercher les tutoriels un à un) et quasiment toujours en anglais (mais c'est le cas aussi pour les autres extensions). Une formation SEBLOD est souvent nécessaire pour vous éviter de passer des semaines à tâtonner.
Plus d'info sur http://www.seblod.com/
Le CMS Joomla!, fait trop souvent méconnu, est nativement multi sites.
Ces 3 extensions améliorent cependant cette gestion native multisites de Joomla! mais selon des approches radicalement différentes. Si votre objectif est essentiellement d'automatiser ou au moins de simplifier la création de sites "copie" prêts à l'emploi selon un site type et avec des fonctions de partage limitées, JMS et MightySites sont d'excellents choix.
Si par contre votre but est de développer plusieurs sites un peu ou très différents qui doivent partager finement certains contenus et certaines fonctions en sachant que ces partages peuvent évoluer dans le temps, alors SEBLOD est clairement la solution.