! [spip-dev] Redéfinition des répertoires

Il est à présent possible de modifier l'emplacement de certains répertoires de Spip, ce qui permet notamment de partager du code pour ceux qui font tourner plusieurs sites sous Spip chez le même hébergeur (avec utilisation de $table_prefix dans mes_options notamment).

Les répertoires concernés sont:

- ecrire/lang (qui contient toutes les traductions de l'interface, 4Mo aujourd'hui)
- ecrire/img_pack (qui contient toutes les icones de l'espace privé, 800Ko aujourd'hui).

Pour changer ces emplacements, il faut définir 2 constantes dans mes_options.php3.
Par exemple, s'il existe déjà une installation de Spip dans un répertoire nommé spip,
une deuxième installation dans un répertoire au même niveau pourra partager ces deux répertoires ainsi
(_DIR_RESTREINT vaut "ecrire/" ou rien selon que le script appelé se trouve au-dessus ou dedans):

  <?php
  define('_DIR_IMG_PACK', (_DIR_RESTREINT . '../../spip/ecrire/img_pack/'));
  define('_DIR_LANG', (_DIR_RESTREINT . '../../spip/ecrire/lang/'));
  ?>

NE PAS OUBLIER LE "/" FINAL !

On peut aussi donner un chemin absolu, sous réserve que le php.ini le permette.
Cette fonctionnalité permet aussi d'adresser ses propres fichiers de langues ou ses propres icones.

A noter également que les fichiers ecrire/inc_* sont chargés dans un répertoire indiqué par la constante _DIR_INCLUDE, égal à _DIR_RESTREINT par défaut, que l'on peut aussi définir dans mes_options mais attention: chaque répertoire ecrire/ des sites doit comporter inc_version et bien sur inc_connect. En particulier, l'installation d'un site supplémentaire exige la présence des fichiers inc_*; ce n'est qu'après l'installation qu'on pourra supprimer ces fichiers, à l'exception des deux mentionnés et après déclaration dans mes_options de la constante _DIR_INCLUDE à la valeur idoine.

Bonjour,

Dans le même esprit, je pense qu'il faudrait permettre l'usage de plusieurs
répertoires CACHE.
Si c'est actuellement possible de faire un truc du style:

$full_url = sprintf($HTTP_HOST);
if(eregi("site1.com", $full_url)){
$GLOBALS['dossier_squelettes'] = "SQUEL/site1";
define('_DIR_CACHE', "CACHE/SITE1/");
}else{
$GLOBALS['dossier_squelettes'] = "SQUEL/site2";
define('_DIR_CACHE', "CACHE/SITE2/");
}

Le compilateur gère bien la nuance, attaque bien les bons répertoires etc.
Mais l'option "vider la cache" du back office est un peu brutale, puisqu'il
supprime uniquement les fichiers du domaine en cours (site1.com/ecrire => les
fichiers présents dans CACHE/SITE1/ sont bien supprimés) et toutes les
entrées de spip_cache donc y compris SITE2 sans pour autant supprimer les
fichiers respectifs.

Il faudrait donc que soit tous les fichiers soient supprimés partout (en base
et en fichiers), soit que l'option soit contextuelle.

Merci beaucoup. C'est presque parfait en tout cas.

Je suis d'accord pour les squelettes, mais pas pour les pages:
ce partage de source n'implique pas que tous les sites ont les memes administrateurs (ça peut etre l'hébergeur qui met le répertoire à disposition
pour l'ensemble des hébergés sans que ceux-ci se connaissent) donc aucun n'a le droit de vider le cache des autres.

La question se pose néanmoins pour les squelettes mais en amont: si tous les sites référencent le même $dossier_squelette, le résultat de leur compilation pourrait être partagé (mais évidemment pas le résultat de leur exécution puisque chaque base donnera un résultat différent). Ca milite pour différencier le cache des squeletes
et celui des pages.

      Emmanuel