Multi-sites

Un article de OviWiki.

Le multi-sites est un moyen de posséder plusieurs interfaces de navigation et/ou d'intégrer une interface multi-langues à partir d'une seule installation d'Ovidentia .

Les avantages d'un tel système en opposition à l'installation de plusieurs portails Ovidentia sont les suivants :

  • le contenu (l'information) des sites est centralisé et géré dans un seul portail (base de données commune);
  • les sites héritent automatiquement de tous changements réalisés lors des personnalisations du portail et lors des installations de modules ou mises à jour du portail;
  • l'interface d'administration est unique et permet de piloter tous les sites en même temps.

Remarque :

Lorsqu'une partie du portail contient des données privées sensibles, il est conseillé de séparer les plateformes.

Sommaire

Administration

Le site Ovidentia

Le lien "Sites" en section Administration amène sur la liste des sites configurés sur le portail. Par défaut, un seul existe et se nomme "Ovidentia". Ce dernier contient tous les paramètres personnalisables par l'administrateur pour l'accès au site principal.

Options d'un site

Menu Configuration du site :

Nom du site
Cette valeur se retrouve dans le fichier de configuration config.php (variable globale $babSiteName).
Description
À titre indicative pour l'administrateur.
Slogan du site
Peut être affiché dans les skins (variable globale $babSlogan).
Langue
Renseigne quel fichier de traduction doit être pris en compte pour l'affichage des menus et messages dans le portail.
Filtre de la langue
Le filtre empêche la visualisation des articles et des faqs dont la langue ne correspond pas à celle sélectionnée. Voir "Avoir une interface multi-langues" pour plus de détails.
Skin
Choix du skin (interface graphique) et du fichier de styles correspondant (fichier css).
Adresse de messagerie du site 
Adresse utilisée comme expéditeur dans les mails de notifications sans auteurs déterminés.
Nom à utiliser pour les emails de notifications
Nom utilisé comme expéditeur dans les mails de notifications sans auteurs déterminés.
Activer les statistiques
Option d'activation ou de désactivation des statistiques.
Remarque : les statistiques sont générales à tous les sites, l'activation dans un site activera la fonction dans les autres sites.
Composition du nom d'utilisateur
Option générale de tri par défaut des listes (tri par le prénom ou le nom).
Menu de configuration du site

Remarque :

Toutes les configurations sont propres à chaque site : options de l'agenda, paramètres de messagerie, authentification... Seul le dossier de téléchargements (dossier d'upload) doit être équivalent pour tous les sites.

Ces options concernent tous les utilisateurs anonymes essentiellement (utilisateurs non-authentifiés). La plupart peuvent être détournées par les options personnelles des utilisateurs enregistrés.

Création d'un site supplémentaire

La création d'un nouveau site se fait depuis l'onglet "Créer" dans la configuration des sites (lien "Sites" section Administration).

Menu contextuel des sites

Ajouter un nouveau site permet d'avoir un nouveau point d'entrée au portail. L'intérêt de cette opération existe lorsque ce nouvel accès utilise une nouvelle interface (modification du skin) ou un changement de langue (langue par défaut et filtre sur la langue).

Exemple avec la réalisation d'un site en langue française et un site en langue anglaise :

Exemples de multi-sites permettant de gérer différentes langues

Aide à l'intégration

Rediriger l'utilisateur d'un site à un autre

La variable $babSiteName dans le fichier config.php à la racine de la distribution contient le nom du site qui sera utilisé au lancement du portail.

Pour lancer un site plutôt qu'un autre, on peut alors effectuer un test de redirection qui sera inclut dans le fichier config.php. Le test peut s'effectuer sur l'adresse IP, sur le nom de domaine d'entrée...


Exemple 1 : Ici, on utilise un cookie pour sauvegarder la langue sélectionnée par l'utilisateur : l'utilisateur a donc accès aux différents sites et peut naviguer d'une langue à l'autre.

Utilisation d'un cookie pour sauvegarder le nom du site sélectionné par l'utilisateur. La page d'accueil contient une sélection de la langue sous forme de 2 liens envoyant les paramètres utiles au script de création du cookie :

  • URL 1 : index.php?sitelang=fr
  • URL 2 : index.php?sitelang=en


Code exemple intégré au fichier config.php à la racine de la distribution :

<?php
 
function bab_getCookieLang($varname, $arrLanguages) {
    if (isset($_GET[$varname]) && in_array($_GET[$varname],$arrLanguages)) {
        setcookie($varname, $_GET[$varname]);
 
        return $_GET[$varname];
    }
    elseif (isset($_COOKIE[$varname]) && in_array($_COOKIE[$varname],$arrLanguages)) {
        return $_COOKIE[$varname];
    }
 
    foreach ($arrLanguages as $bLangTmp) {
        $pos = strpos($_SERVER["HTTP_ACCEPT_LANGUAGE"], $bLangTmp);
 
        if (!isset($tmpPos) || $tmpPos > $pos) {
            $tmpPos = $pos;
 
            $bLang = $bLangTmp;
        }
    }
 
    return $bLang;
}
 
$babDBHost              = "localhost"; /* MySql database server */
$babDBLogin             = "root"; /* MySql database login */
$babDBPasswd            = ""; /* MySql database password */
$babDBName              = "mabase"; /* MySql database name */
$babInstallPath         = "Ovidentia-5-5-7/"; /* relatif path to Ovidentia distribution */
$babSlogan              = "Ovidentia: enterprise portal"; /* your slogan */
$babSiteName            = "Mon site ".bab_getCookieLang('sitelang', array('fr', 'en')); /* your site name */
$babUrl                 = "http://monsite.Ovidentia.com/"; /* url to access to your site */
$babVersion             = "5.5"; /* current version */
$babFileNameTranslation = array("&" => "_","\"" => "_","'" => "_","'" => "_",";"=>"_","~"=>"-","+"=>""); /* translation characters for files names.*/

Explications :

Nous voyons l'exemple d'un portail multi-langues. La variable $babSiteName aura 2 valeurs possibles : "Mon site fr" ou "Mon site en". La langue est fournie au script par l'intermédiaire des 2 liens réalisés en page d'accueil (paramètre sitelang). Dans le cas contraire, si aucun cookie ni de paramètre n'a encore été envoyé, on utilisera la langue du serveur (variable globale $_SERVER["HTTP_ACCEPT_LANGUAGE"]).


Exemple 2 : Ici, on utilise le nom de domaine pour réorienter d'un site à un autre.


Code exemple intégré au fichier config.php à la racine de la distribution :

<?php
 
if ($_SERVER["HTTP_HOST"] == </nowiki> "intranet.monsite.fr") {
     $babSiteName = "Mon intranet";
     $babUrl = "http://intranet.monsite.fr/"; /* url to access to your site */
}
else {
    $babSiteName = "Mon site internet";
    $babUrl = "https://www.monsite.fr/"; /* url to access to your site */
}
 
$babDBHost              = "localhost"; /* MySql database server */
$babDBLogin             = "root"; /* MySql database login */
$babDBPasswd            = ""; /* MySql database password */
$babDBName              = "mabase"; /* MySql database name */
$babInstallPath         = "Ovidentia-5-5-7/"; /* relatif path to Ovidentia distribution */
$babSlogan              = "Ovidentia: enterprise portal"; /* your slogan */
$babVersion             = "5.5"; /* current version */
$babFileNameTranslation = array("&" => "_","\"" => "_","'" => "_","'" => "_",";"=>"_","~"=>"-","+"=>""); /* translation characters for files names.*/

Explications :

Nous voyons l'exemple d'un portail avec une langue unique, mais avec deux volets séparés. La variable $babSiteName aura 2 valeurs possibles : "Mon intranet" ou "Mon site internet". On pointe sur l'un ou l'autre en testant l'URL appelée par le navigateur sur le serveur : $_SERVER["HTTP_HOST"].


Exemple 3 : Ici, on utilise le nom de domaine et un cookie de langue pour réorienter d'un site à un autre, tout en tenant compte de la langue.


La détection de la langue se fait par des liens internes de la forme index.php?sitelang=en ou index.php?sitelang=fr


Code exemple intégré au fichier config.php à la racine de la distribution :

<?php
 
function bab_getCookieLang($varname, $arrLanguages) {
    if (isset($_GET[$varname]) && in_array($_GET[$varname],$arrLanguages)){
        setcookie($varname, $_GET[$varname]);
        return $_GET[$varname];
    }
    elseif (isset($_COOKIE[$varname]) && in_array($_COOKIE[$varname],$arrLanguages)) {
        return $_COOKIE[$varname];
    }
 
    foreach ($arrLanguages as $bLangTmp) {
        $pos = strpos($_SERVER["HTTP_ACCEPT_LANGUAGE"], $bLangTmp);
 
        if (!isset($tmpPos) || $tmpPos > $pos) {
            $tmpPos = $pos;
            $bLang = $bLangTmp;
        }
    }
 
    return $bLang;
}
 
/*language and site name*/
if (bab_getCookieLang('sitelang', array('fr', 'en')) == "en") {
    if ($_SERVER["HTTP_HOST"] ==  "intranet.monsite.fr") {
        $babSiteName = "My intranet";
        $babUrl = "http://intranet.monsite.fr/"; /* url to access to your site */
    }
    else{
        $babSiteName = "My website";
        $babUrl = "https://www.monsite.fr/"; /* url to access to your site */
    }
}
else {
    if ($_SERVER["HTTP_HOST"] == </nowiki> "intranet.monsite.fr") {
        $babSiteName = "Mon intranet";
        $babUrl = "http://intranet.monsite.fr/"; /* url to access to your site */
    }
    else {
        $babSiteName = "Mon site internet";
        $babUrl = "https://www.monsite.fr/"; /* url to access to your site */
    }
}
 
$babDBHost              = "localhost"; /* MySql database server */
$babDBLogin             = "root"; /* MySql database login */
$babDBPasswd            = ""; /* MySql database password */
$babDBName              = "mabase"; /* MySql database name */
$babInstallPath         = "Ovidentia-5-5-7/"; /* relatif path to Ovidentia distribution */
$babSlogan              = "Ovidentia: enterprise portal"; /* your slogan */
$babVersion             = "5.5"; /* current version */
$babFileNameTranslation = array("&" => "_","\"" => "_","'" => "_","'" => "_",";"=>"_","~"=>"-","+"=>""); /* translation characters for files names.*/

Explications :

Nous voyons l'exemple d'un portail multi-langues. La variable $babSiteName aura 4 valeurs possibles : "Mon site internet", "Mon intranet", "My website", "My Intranet".

On commence par tester la langue en la fournissant au script par l'intermédiaire des 2 liens réalisés en page d'accueil (paramètre sitelang).

Puis on teste l'URL appelée par le navigateur sur le serveur : $_SERVER["HTTP_HOST"]. Une fois ces deux tests (langue puis URL) effectués, on renseigne $babSiteName et $babUrl.

Plusieurs interfaces pour plusieurs points d'entrée

Chaque site peut s'attribuer un skin et une mise en forme (fichier de style css) unique. Pour cela, il suffit de le renseigner dans la configuration des sites. Le fichier config.php à la racine de la distribution sera utilisé pour effectuer un test de redirection vers chaque site.

Choix d'un skin pour le site

La liste déroulante des skins s'appuient sur les répertoires de mêmes noms créés dans le dossier "skins" à la racine du site. Les fichiers de styles quant à eux sont situés à l'intérieur de chaque skin : racine d'Ovientia/skins/monskin/styles/.

Avoir une interface multi-langues

Il est possible de réaliser un portail multi-langues, le fonctionnement étant cependant limité dans Ovidentia.

Interface :

Tout comme le choix d'un skin, une langue par défaut peut être configurée pour chaque site. Cette opération indique quels fichiers de traduction Ovidentia doit utiliser pour l'affichage des menus et tous messages dans le portail (les fichiers de traduction étant des fichiers XML). Cela n'a aucun impact sur les paramètres de langues fournis aux thèmes d'articles ou aux faqs.

Contenu :

Certaines fonctions de publication dans le portail ajoute un paramètre de langue au contenu : les faqs, les articles et les sections.

Un filtre de langue peut être appliqué sur un site, supprimant alors l'affichage du contenu publié dans une autre langue que celle spécifiée. Le filtre se fait depuis le menu de configuration du site.

Choix d'un filtre pour le site

Les options :

Pas de filtre
Aucun filtre ne sera appliqué sur le contenu du portail.
Filtre sur la langue
Un filtre sur la langue choisie sera appliqué sur le contenu du portail.
Exemple : un filtre sur la langue française est appliqué : seuls les articles français seront accessibles dans le portail, quels que soit le pays de la langue (français de France, de Belgique...).
Filtre sur la langue et le pays
Un filtre sur la langue et le pays sera appliqué sur le contenu.
Exemple : un filtre sur la langue française et sur le pays est appliqué : seuls les articles français seront accessibles dans le portail, cependant nous tenons compte du pays de la langue donc un article écrit en français belge ne sera pas vu dans le portail).

Remarque :

En ce qui concerne les thèmes d'articles, le paramètre de langue n'est pas pris en compte par le filtre appliqué sur le site : les thèmes ne sont donc pas filtrés. Le paramètre de langue sert uniquement à initialiser la langue par défaut lors de la création des articles.Concrètement, un thème d'articles avec l'option de langue "français" sera visible dans un site contenant un filtre sur la langue anglaise. Cependant les articles écrits en français dans ce thème ne seront pas visibles. L'option de langue dans les thèmes d'articles ne s'applique donc qu'aux articles.