Multi-site avec Mezzanine (Django)

29 Jui

Utilisant de plus en plus l'incroyable CMS Mezzanine basé sur le framework Django pour mes développements, pour un dès mes projets j'ai eu besoin d'utiliser une des fonctionnalités natives du CMS le mutl-site, comment cela fonctionne t'-il voici comment le mettre en place.

Configuration multi-site

Si nous suivons la documentation il est assez simple d'activer le multisite, Mezzanine utilise son propre système pour gérer les différentes instances de site. Il est possible pour chaque site d'avoir bien entendu son propre thème permettant donc leur personnalisation, nous allons voir comment configurer cela

Sites 

Dans un premier temps vous devez vous connecter à l'administration de votre site, une fois ceci fait, dans la sidebar de gauche, cliquez sur le menu "sites" (voir capture ci-dessous)

Administration Mezzanine multi-site

Vous devriez pouvoir ajouter un nouveau site, vous avez juste à rentrer le nom de domaine ainsi que le nom (voir capture ci-dessous)

Mezzanine admin multi-site

Vous devriez donc voir appararaître un menu de type dropdown en haut à droite affichant la liste de vos sites, cela vous permet en sélectionnant un des sites dans la liste de pouvoir les éditer, chacun d'eux étant bien cloisonné vous pouvez dès à présent créer une arborescence et un contenu spécifique pour chacun de vos sites

Administration Mezzanine multi-site

Thèmes

Nous en avons terminé avec la configuration pour activer votre multisite, si vous avez bien fait pointer votre virtualhost sur votre nouveau nom de domaine vous deviez pouvoir visualiser votre nouveau site, Félicitation !!
Votre nouveau site étant accessible vous remarquerez que le thème de votre site est exactement le même que le premier que vous avez déclaré sauf bien entendu le contenu et la structure.

Il faut donc ajouter quelques lignes dans votre setting.py pour expliquer à Mezzanine qu'il  faut attribuer un thème différent pour vos différentes instances de site voici le code:

HOST_THEMES = [('www.site.com', 'theme'),
               ('www.nom-de-domaine.com', 'nouveau_theme')]

Ici nous avons déclaré dans notre variable de configuration une liste contenant 2 tuples, le premier  contentant le nom de domaine de notre site principal et le nom du thème de base, le second notre nouveau site avec son thème.
Vous devez bien entendu créer votre nouveau thème et l'insérer dans votre settings, dupliquer simplement votre thème principal en faisant de petits changements comme par exemple la couleur, et renommez-le comme dans l'exemple ci-dessus, vous devriez avoir maintenant le même thème mais de différentes couleurs.

Un fichier base.html pour chaque thème

Vous vous êtes peut-être aperçu si vous avez voulu aller un petit peu plus loin qu'un simple changement de couleur, que dans votre nouveau thème les changements réalisés dans votre fichier base.html (le fichier de base de votre thème) ne sont pas pris en compte, en effet c'est une limitation du système pour la gestion de thème multisite, vous ne pouvez qu'overrider les fichiers dérivés et non pas le fichier base.html, ceci pose un réel problème si l'on veut avoir un thème totalement différent, et non pas une simple déclinaison de couleurs, etc.

Plusieurs solutions existent trouvées sur le google groupe de Mezzanine, et une particulièrement élégante et qui fonctionne très bien que j'ai utilisé en production un template loader customisé permettant de changer la gestion du chargement des template pour le multisite et donc de prendre en compte l'override du fichier base.html, voici aussi la discussion sur le Mezzanine google group.

Voilà je voulais vous présenter cette fonctionnalité qui est vraiment très utile et surtout très facile à mettre en place, si vous avez des questions n'hésitez pas à laisser un commentaire

Publié le: Lundi 29 juin 2015
blog comments powered by Disqus
Monter

© Circonflex-studio - Tous droits réservés - Mentions legales
Développeur web indépendant / Webdesigner / Intégrateur
Nice - Cannes - Monaco - Antibes - côte d'azur | site valide HTML 5

Ce site à été développé en Python avec le framework Django

"http://www.cssawards.net/nominee/circonflex-studio/"