Magento permet très facilement de mettre sa boutique en maintenance, via le dépôt d'un fichier maintenance.flag à la racine du projet. Dans le cas d'un projet multi boutiques, toutes les boutiques seront impactées par cette maintenance. Ce point peut être contrariant dans certains cas.
Nous allons voir ici une astuce permettant de cibler uniquement une boutique.
L'objectif est de conserver la simplicité de maintenance par un simple dépôt de fichier. Pour cette astuce, le pré-requis est la configuration multi boutiques au niveau vhost, via la variable MAGE_RUN_CODE.
Modification du fichier index.php
La première étape consiste à modifier le fichier index.php pour gérer ce nouveau cas.
<?php
/*
[...]
*/
$maintenanceFile = 'maintenance.flag';
// Maintenance par boutique, ajout de la nouvelle définition de fichier
if (isset($_SERVER['MAGE_RUN_CODE'])) {
$maintenanceRunCodeFile = 'maintenance.' . $_SERVER['MAGE_RUN_CODE'] . '.flag';
}
/*
[...]
*/
// Gestion de la maintenance pour toutes les boutiques
if (file_exists($maintenanceFile)) {
include_once dirname(__FILE__) . '/errors/503.php';
exit;
}
// Gestion de la maintenance par boutique
if (isset($maintenanceRunCodeFile) && file_exists($maintenanceRunCodeFile)) {
include_once dirname(__FILE__) . '/errors/503.php';
exit;
}
/*
[...]
*/
Si la variable MAGE_RUN_CODE est définie, le programme regarde si un fichier de type maintenance.MAGE_RUN_CODE.flag. Le cas échéant, la boutique concernée sera mise en maintenance.
Quant à la maintenance classique, son fonctionnement n'est pas altéré.
Exemple
Un e-commerçant possède deux boutiques (boutique_une et boutique_deux), gérées par un seul Magento. Suite à une refonte graphique importante de sa boutique_deux, il souhaiterait la mettre en maintenance le temps de la migration. A la racine de son site, il lui suffira de poser un fichier nommé maintenance.boutique_deux.flag . Il pourra ainsi procéder à sa mise à jour sans que sa boutique_une ne soit en maintenance.
Si un e-commerçant a, par exemple, cinq boutiques, il pourra mettre plusieurs boutiques en maintenance en utilisant plusieurs fichiers maintenance.MAGE_RUN_CODE.flag
Si vous avez des questions ou des remarques, n'hésitez pas à en faire part dans les commentaires.