Un noyau SPIP 1.9, plusieurs sites !

Ce tutoriel tente de décrire une procédure pour utiliser la mutualisation des fichiers du noyau de SPIP 1.9, permettant d’avoir plusieurs sites SPIP utilisant un même noyau.

Pouvoir n’utiliser qu’un seul noyau de SPIP pour héberger plusieurs sites est une des grandes améliorations de SPIP 1.9. Voici une procédure pour utiliser cette fonctionnalité sur un hébergement qui permet l’url rewriting.

Nota SPIP-Contrib : la mutualisation évolue (dans la branche 1.9.3 dev), voir le dernier article sur ce sujet La mutualisation facile : modifications manuelles

Introduction

Pour ma part, j’ai mis du temps à comprendre le fonctionnement et à pouvoir rendre cela fonctionnel. Un tutoriel ne sera donc pas de trop pour ceux qui veulent aussi tenter l’expérience (testée sur Ouvaton).

Ce tutoriel s’adresse plutôt aux hébergés qu’aux hébergeurs, qui, je suppose, utiliseront les Alias ou VirtualHost d’Apache.

Ce tutoriel s’inspire du ticket 186 qui utilise des Alias.

2Déroulement2

J’ai installé un SPIP 1.9 avec plusieurs sites de deux manières : SPIP à la racine du compte, ou dans un sous répertoire. Peu de choses changent en fait, mais il est utile de les connaître !

Cas (1), à la racine du serveur :

-  http://mon_serveur.org/

avec les sites spips de type :
-  http://mon_serveur.org/mon_site/ ,
-  http://mon_serveur.org/mon_autre_site/

Cas (2), dans un répertoire du serveur :

-  http://mon_serveur.org/mes_spips/

avec les sites spips de type :
-  http://mon_serveur.org/mes_spips/mon_site/ ,
-  http://mon_serveur.org/mes_spips/mon_autre_site/

Remarquez que vous pouvez utiliser l’adresse http://mon_serveur.org/ ou http://mon_serveur.org/mes_sites/ pour avoir un SPIP aussi à cet endroit. Il vous suffit d’aller dans http://mon_serveur.org/ecrire/ ou http://mon_serveur.org/mes_sites/ecrire/ et de configurer.

Si vous avez déjà un site en SPIP 1.9 configuré, vous pouvez aussi suivre ce tutoriel pour en creer d’autres, dans un sous-dossier. Votre premier site continuera de fonctionner correctement.

21- Création des dossiers accueillant les sites2

Creer un dossier dans le répertoire hébergeant SPIP
nommé SITES (ou le nom que vous voulez, à condition de le changer partout dans le turoriel) (au même niveau que CACHE, IMG,...)

Dans ce dossier, créer un sous dossier pour chacun des sites (mon_site, mon_autre_site), et dans chacun :

des sous dossiers :
-  CACHE,
-  IMG,
-  data,
-  upload,
-  squelettes (éventuellement)

des fichiers (éventuellement) :
-  .htaccess (obligatoire ou non ?)
-  mes_fonctions.php
-  mes_options.php

22- Création et modification du .htaccess2

Le .htaccess doit être modifié pour rediriger les adresses des sites SPIP correctement.

(Ce n’est pas la méthode décrite par le ticket 186 qui modifie le fichier de configuration du serveur Apache en créant des Alias, ce qu’on ne peut pas faire dans un .htaccess)

(Il faut donc, dans notre cas, que le serveur autorise le mod_rewrite d’Apache)

Le but est que les adresses de type :
-  http://mon_serveur.org/mon_site ou http://mon_serveur.org/mes_spips/mon_site

soient redirigées vers :
-  http://mon_serveur.org/ ou http://mon_serveur.org/mes_spips/

pour être traitées par :
-  http://mon_serveur.org/spip.php ou http://mon_serveur.org/mes_spips/spip.php

Créer le fichier .htaccess, en copiant le fichier htaccess.txt .
Puis selon le cas...

3Cas (1) : racine du serveur3

Le .htaccess est à ce niveau :
-  http://mon_serveur.org/.htaccess

À l’intérieur, mettre :

  • Dans Configuration :
    • RewriteBase /
  • Dans Réglages personnalisés :
    • RewriteRule ^mon_site/(.*) /$1 [QSA,L]
    • RewriteRule ^mon_autre_site/(.*) /$1 [QSA,L]

3Cas (2) : répertoire du serveur3

Le .htaccess est à ce niveau :
-  http://mon_serveur.org/mes_spips/.htaccess

A l’intérieur, mettre :

  • Dans Configuration :
    • RewriteBase /mes_spips/
  • Dans Réglages personnalisés :
    • RewriteRule ^mon_site/(.*) /mes_spips/$1 [QSA,L]
    • RewriteRule ^mon_autre_site/(.*) /mes_spips/$1 [QSA,L]

23- Création et modification de ecrire/mes_options.php2

Il faut maintenant dire à SPIP que les adresses comportant des dossiers dans l’url (/mon_site) doivent être utilisés comme des SPIP autonomes, si leur dossier existe.

3Pour information3

Toute modification de ce fichier affectera les options de tous les sites hébergés.

Par exemple, mettre dans ce fichier :
-  $type_urls = ’propres’ ;

Donnera par défaut à tous les sites ce type d’url... Mais chaque site peut le changer dans son propre /mon_site/mes_option.php

3Cas (1) : racine du serveur3

Créer/éditer le fichier ecrire/mes_options.php :
Le mes_options.php est à ce niveau :
-  http://mon_serveur.org/ecrire/mes_options.php

Ajouter entre

<?php et ?>

ces lignes :

  if ( preg_match(',/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
        if (is_dir($f = _DIR_RACINE . 'SITES/' . $r[1]. '/')) {
                $cookie_prefix = $table_prefix = $r[1];
                	
                define('_SPIP_PATH', 'SITES/' . $table_prefix  . '/:./:dist/:formulaires/:ecrire/');
                define('_DIR_IMG', $f.'IMG/');
                define('_DIR_DOC', _DIR_IMG);
                define('_DIR_CACHE', $f.'CACHE/');
                define('_DIR_SESSIONS', $f.'data/');
                define('_DIR_TRANSFERT', $f.'upload');
                define('_FILE_CONNECT_INS', $f.'inc_connect');
                
	        $GLOBALS['dossier_squelettes'] = $f.'squelettes';
                
                if (is_readable($f .= 'mes_options.php')) include($f);
        }
  }

Un rapide détail s’impose

Par défaut, la ligne
-  $cookie_prefix = $table_prefix = $r[1] ;

Va créer des tables mysql avec des préfixes ayant le nom du répertoire contenant le site : mon_site_article à la place de spip_article par exemple. Cela permet d’héberger tous les sites sur une seule et même base de données. Vous pouvez garder le préfixe par défaut (spip), mais il faut penser à avoir plusieurs bases de données différentes pour chaque site. _ Pour cela, mettre à la place :
-  $cookie_prefix = $r[1] ;

La ligne ci dessous définit l’adresse du dossier de squelette (mon_site/squelettes) :
-  $GLOBALS[’dossier_squelettes’] = $f.’squelettes’ ;

Pour que tous les sites aient le même squelette situé dans http://mon_serveur/squelettes/ vous pouvez enlever le $f. pour n’avoir que :
-  $GLOBALS[’dossier_squelettes’] = ’squelettes’ ;

3Cas (2) : répertoire du serveur3

On ajoute ces lignes entre

<?php et ?>

du fichier http://mon_serveur/mes_sites/ecrire/mes_options.php :

  if ( preg_match(',/mes_sites/([a-zA-Z0-9_-]*)[/?],',$_SERVER['REQUEST_URI'],$r)) {
        if (is_dir($f = _DIR_RACINE . 'SITES/' . $r[1]. '/')) {
                $cookie_prefix = $table_prefix = $r[1];
                	
                define('_SPIP_PATH', 'SITES/' . $table_prefix  . '/:./:dist/:formulaires/:ecrire/');
                define('_DIR_IMG', $f.'IMG/');
                define('_DIR_DOC', _DIR_IMG);
                define('_DIR_CACHE', $f.'CACHE/');
                define('_DIR_SESSIONS', $f.'data/');
                define('_DIR_TRANSFERT', $f.'upload');
                define('_FILE_CONNECT_INS', $f.'inc_connect');
                
	        $GLOBALS['dossier_squelettes'] = $f.'squelettes';
                
                if (is_readable($f .= 'mes_options.php')) include($f);
        }
  }

En fait, toute la nuance est dans le preg_match...

24- Création et modification de mon_site/.htaccess2

(je ne suis pas sûr que ce soit indispensable)

Mettre dans Configuration :

  • Cas (1)
    • RewriteBase /mon_site/
  • Cas (2)
    • RewriteBase /mes_spips/mon_site/

Conclusion

Si vous êtes chanceux, peut être que ça fonctionne !

Pour lancer la procédure d’installation de vos sites, allez dans le répertoire écrire :
-  http://mon_serveur/mon_site/ecrire/
-  http://mon_serveur/mes_spips/mon_site/ecrire/

Il faut bien configurer l’adresse de vos sites dans l’interface privée :
http://mon_serveur.org/mon_site/ ou http://mon_serveur.org/mes_spips/mon_site/

Il se peux que vous croisiez certains problèmes par la suite, comme trouver la bonne url pour faire fonctionner un javascript... J’ai du pour la configuration d’un menu dépliant (pour l’image des + et - qui se configure dans le javascript) mettre : SITES/nom_site/squelettes/img/mon_image.gif à la place de img/mon_image.gif . SInon, rien de bien méchant.

Alors si tout fonctionne, quand Spip passera en version 2.0 (je sais que vous en rêvez déjà !), vous n’aurez qu’un seul noyau à mettre à jour !

Discussion

21 discussions

  • 5

    Bonjour,

    J’ai tout installé, ça marche parfaitement au début : installation du nouveau site, les tables se créent bien avec le préfixe, il y a bien un auteur dans la table « auteurs ».

    Mais quand je veux entrer dans le site privé, je tourne en rond.
    Il comprend bien le login et le mot de passe (si j’en mets de mauvais, j’ai bien « identifiant inconnu » ou « erreur de mot de passe »), mais si j’entre le login et le mot de passe, je me retrouve à nouveau sur la page « accès à l’espace privé » remise à zéro, où on me demande mon identifiant.

    J’ai dû faire une erreur quelque part, mais où ?

    Merci de m’éclairer !

    Monique

    Répondre à ce message

  • 1

    j’ai suivis votre article a la lettre c’est bon jusqu’a l’etape de l’installation des sites j’ai placer 3 sites un pricipale et deux dans le dossier « mes_spips » le probleme que j’ai c’est qu’il reste toujours dans l’installation et quand je veux voir le site il m’affiche ce message

    Ce site n’est pas encore configuré. Revenez plus tard...

    je ne sais pas ou j’ai pu me tromper est ce que quelqu’un peut m’aider

    • Bonjour,

      J’ai le même problème, lorsque je procède à l’installation tout est OK, jusqu’au dernier écran « n’oubliez pas vos codes » etc... je clique sur suivant, je devrais obtenir l’interface de login, mais je retombe sur l’installation étape 1

      j’utilise la version 1.9.2a de spip

      Quelle est la version que vs utilisez ?

    Répondre à ce message

  • j’ai suivis votre article a la lettre c’est bon jusqu’a l’etape de l’installation des sites j’ai placer 3 sites un pricipale et deux dans le dossier « mes_spips » le probleme que j’ai c’est qu’il reste toujours dans l’installation et quand je veux voir le site il m’affiche ce message

    Ce site n’est pas encore configuré. Revenez plus tard...

    je ne sais pas ou j’ai pu me tromper est ce que quelqu’un peut m’aider

    Répondre à ce message

  • 1

    Pour ne pas avoir de mélange avec les logos des articles et des rubriques avec les différents sites : merci de rajouter dans le fichier mes_options.php, la ligne :

    define (’_DIR_LOGOS’,_DIR_IMG) ;

    Y at’il une doc sur les variables et constantes (bien utiles) utilisées par SPIP

    Merci

    • voici une partie de mon mes_options.php

      J’ai rajouté la definition de _DIR_LOGOS

      Ai-je oublié de définir une constante utile par SPIP ?

      Existe t’il une doc pour connaitre la liste des constantes utiles par SPIP ?

      $cookie_prefix = $table_prefix = $r[1] ;

      define(’_SPIP_PATH’, ’SITES/’ . $table_prefix . ’/ :./:dist/:formulaires/:ecrire/’) ;

      define(’_DIR_IMG’, $f.’IMG/’) ;

      define(’_DIR_DOC’, $f.’DOC/’) ;

      define(’_DIR_LOGOS’, $f.’LOGOS/’) ;

      define(’_DIR_CACHE’, $f.’CACHE/’) ;

      define(’_DIR_SESSIONS’, $f.’data/’) ;

      define(’_DIR_TRANSFERT’, $f.’upload’) ;

      define(’_FILE_CONNECT_INS’, $f.’inc_connect’) ;

      $GLOBALS[’dossier_squelettes’] = $f.’squelettes’ ;

    Répondre à ce message

  • 3

    J’ai installé spip multisites depuis plusieurs semaines grâce à votre documentation.

    Mais, depuis, cette version 1.9 et 1.9.1, j’ai remarqué que le cache marchait, mal ; est-ce du au fait que je suis en multisites ?
    J’ai beau vider et revider le cache, actualiser la page et faire ctrl F5 sous Mie6, de vieilles données réapparaissent ?
    Vraiment bizzare.

    Le plus bizzarre et drôle en multisites, spip se mélange les pédales, la balise #URL_SITE_SPIP et #NOM_SITE_SPIP garde la valeur du site sur lequel on était avant, et les liens se mélangent. D’un lien « Accueil » j’ai naviguer sur 3 sites spip sur un même serveur.

    C’est très génant.

    Pour finir voilà un test complet pour mieux comprendre mon problème :

    Sous IE6 ou Mozilla, en administrateur pour tout le test

    Je modifie le titre d’un article, puis je clique sur la grosse flèche « Visiter » : la modif n’apparait pas.

    Par contre sur le lien « voir en ligne » la modif apparaît (momentanement ...)

    Je vide le cache et lien sur la flèche « visiter », la modif n’apparaît pas.

    Je recalcule la page « recalculer cette page », la modif réapparait.

    Par contre je clique sur mon fil d’ariane qui donne le lien sur la même page, et la modif disparaît.

    Je fais reclaculer cette page, et elle apparait, puis disparaît ...

    Pour garder, la modif dans ma page, en fait, je dois faire F5 et la modif réapparaît (alors que cette touche sous Spip ne va pas chercher sur le serveur).

    Un autre lien sur cette même page, dans le menu de gauche, et ca redisparait. F5, remedie au problème.

    Autant de liens sur cette même page d’accueil, et il faut F5 pour raffraichir.

    Et le cache de Spip dans tout ca, que j’ai vider, et le recalcul de la page, ne sont que momentané ...

    Avez-vous déjà rencontré ce problèmes (si problème il y a).

    Le multi-site est récent et des gens qui créént beaucoup de sites sous Spip et en multisites, il ne doit pas y en avoir beaucoup.

    Merci

    • Bonjour,

      Non, je n’ai pas eu ce genre de situation avec les caches (mais je suis la svn).
      J’ai installé une 1.9.1 et mes tests ont fonctionné, sauf que #NOM_SITE_SPIP ne fonctionnait pas au début, avant que j’ailles dans configuration et valide un nouveau nom, c’est vrai que c’était étrange cela.

      MM.

    • Sous SPIP, le bouton « visiter » ne provoque pas de recalcul, contrairement à « voir en ligne » qui force un recalcul de la page.

      Vider le cache de SPIP permet de tout faire recalculer, mais il faut penser aussi à vider le cache du navigateur. C’est ce que fait la touche f5 pour la page en cours sur le navigateur.

      Malgré cela, il peut y a peut être encore quelques coquilles, c’est possible.
      Essayez peut-être le code pour SPIP 1.9.1 que je viens de poster , il fonctionne correctement chez moi.

      MM

    • Le plus bizzarre et drôle en multisites, spip se mélange les pédales, la balise #URL_SITE_SPIP et #NOM_SITE_SPIP garde la valeur du site sur lequel on était avant, et les liens se mélangent. D’un lien « Accueil » j’ai naviguer sur 3 sites spip sur un même serveur.

      Bon, en fait, je confirme aussi ces choses, sans toutefois les comprendre, sous 1.9.1 [7502].

      Je vais tester sur une svn (version de développement, actuellement 1.9.2b3 pour voir si ça fait pareil, mais je pense que non car je l’aurais déjà remarqué (j’ai 4 sites sur 1 SPIP en local et ils fonctionnent tous correctement)

      Ce bug a certainement du être corrigé donc...

      MM

    Répondre à ce message

  • Bonjour,

    Petite synthèse des choses à faire pour SPIP 1.9.1 pour mutualiser des répertoires :

    1. Créer les dossiers

    Créer un dossier qui contiendra les répertoires des sites à mutualiser (ici : sites) à la racine de SPIP :
    /sites

    Dans chaque répertoire de site, créer les répertoires CACHE, data, IMG, upload et éventuellement squelettes :

    /sites/site_1/CACHE
    /sites/site_1/data
    /sites/site_1/IMG
    /sites/site_1/upload
    /sites/site_1/squelettes (eventuellement)

    2. Créer le fichier .htaccess

    A la racine du site, copier le fichier htaccess.txt en .htaccess et modifier la ligne RewriteBase pour qu’elle corresponde à votre configuration :

    Si SPIP est installé à la racine du serveur (http://example.net/) :
    RewriteBase /

    Si SPIP est dans un répertoire du serveur (http://example.net/spip/) :
    RewriteBase /spip/

    Créer les redirections de vos répertoires vers le répertoire contenant SPIP ; dans la partie « réglages personnalisés », ajoutez les lignes suivantes, en les adaptant à votre configuration :

    # remplacez /spip/ par la même valeur que votre RewriteBase
    RewriteRule ^(site_1|site_2|site_3)$ /spip/$1/ [R,L]
    RewriteRule ^(site_1|site_2|site_3)/(.*)  /spip/$2 [QSA,L]

    3. Créer le fichier mes_options.php

    Créez ou modifiez le fichier ecrire/mes_options.php en incluant ces lignes :

    <?php
    # remplacez /spip/ par la même valeur que votre RewriteBase
    if ( preg_match(',/spip/([a-zA-Z0-9_-]+)/?,',$_SERVER['REQUEST_URI'],$r)) {
    
    	if (is_dir($e = _DIR_RACINE . 'sites/' . $r[1]. '/')) {
    
    		$cookie_prefix = $table_prefix = $r[1];
    
    		define('_SPIP_PATH',
    			$e . ':' .
    			_DIR_RACINE .':' .
    			_DIR_RACINE .'dist/:' .
    			_DIR_RESTREINT);
    
    		spip_initialisation_parametree($e, $e);
    
    		$GLOBALS['dossier_squelettes'] = $e.'squelettes';
    
    		if (is_readable($f = $e.'mes_options.php')) include($f);
    	}
    }
    ?>

    Répondre à ce message

  • 1

    Installation multisites fonctionne bien (plugins...) sauf que le nom du premier site ouvert reste lorsque l’ on change de sites ceux-ci affichent ,dans le bandeau, le titre du premier : les articles sont ceux du bon site mais pas le titre
    l’accès à l’espace privé se fait aussi de façon aleatoire
    Problème de cache ?
    Merci de repondre vite si vous avez une idée il y’a peu d’aide sur les multisites spip

    • Bonjour,

      Je viens d’installer une 1.9.1 pour faire des tests, et je n’ai pas eu d’erreur d’accès aux espaces privés. Je l’ai cru à un moment car en restaurant un dump d’un autre site, spip m’avait effacé logiquement le nom d’utilisateur avec lequel je me connectais, mais rien de mal en fait.

      Le soucis que j’ai eu à l’installation, c’est #NOM_SITE_SPIP qui ne s’active, j’ai l’impression, qu’une fois que l’on valide un nouveau nom de site dans la configuration de l’espace privé.

      MM.

    Répondre à ce message

  • Merci pour ce tutoriel.

    Ma question est la suivante :

    Site1 = /SPIP/Site1 Domaine = www.domaine1.com
    Site2 = /SPIP/Site2 Domaine = www.domaine2.com
    etc...

    Domaine 2 est redirigé par le gestionnaire des noms vers www.domaine1.com

    Y-a-t-il un moyen de faire afficher www.domaine2.com dans la ligne d’adresse au lieu de la redirection qui affiche un autre nom de domaine ?
    Merci

    Répondre à ce message

  • 1

    Bonjour

    Merci de cette contrib, qui pourrait me servir. Mais avant de me lancer dans ces complexités, est-ce que quelqu’un peut me dire si ça pourrait servir pour publier le même article sur plusieurs sites ? C’est à dire une seule base de données avec des articles qui peuvent apparaître sur un ou plusieurs sites SPIP (noms de domaine différents), avec mises en pages différentes. J’avais pensé à faire une rubrique pour chaque site, mais chaque article ne peut appartenir qu’à une seule rubrique. Donc je repars sur l’idée d’utiliser des groupes de mots-clés (un groupe pour chaque site), mais ce serait plutôt lourd à gérer et rend difficile une hiérarchie de plusieurs niveaux pour chaque site. Est-ce que cette contrib pourrait servir ??

    • Ca ne changera pas le problème. Les mots-clés semblent le bon recours !

      Par contre, si tu as plusieurs sites, ils peuvent effectivement utiliser la même base de donnée avec des noms de domaine différents et des squelettes différents sans problème, le tout sur un seul spip avec un plugin qui permet de changer le squelette en fonction du nom de domaine justement (vhosts)

      MM.

    Répondre à ce message

  • 6

    Merci pour ce tutoriel ;
    j’ai plusieurs sites, mais je rencontre 2 petits problèmes.

    1) Mes images dans mes différents sites ne marchent plus.
    J’ai mis les images dans un répertoire distinct pour chaque site : exemples ../spip19/SITES/portailrh/images/
    les images n’apparaissent pas, car spip crée toujours une adresse du type .../spip19/portailtest/images/accueil.gif alors que mes liens dans mes squelettes sont de la forme images/accueil.jpg
    j’ai essayé plusieurs chemin mais ça ne fonctionne pas.
    En chemin absolu, ça marche, mais je n’en veux pas, car je bascule le site d’un environnement de test en prod, et les chemins et nom de sites ne sont pas forcement les mêmes.

    2) même problème pour faire en php dans un squelette, un inlude d’un fichier initialisation.ini ou il y à des variables différentes pour chaque sites. (utile pour la sécurité sous Access Master)
    Quand on tape une url comme http://zeus/drh/spip19/portailtest ou un lien comme http://zeus/drh/spip19/portailtest/rubrique.php?id_rubrique=1 les variables d’environnement SCRIPT_FILENAME donnent .../spip.php, on ne peut pas récupérer le nom du répertoire du site ;
    de plus dans un squelette, #NOM_SITE et #URL_SITE sont à blanc
    J’ai mis en dur en premiere ligne dans mes squelettes une variable avec le nom du site ... et ça marche, mais j’aimerais un moyen plus propre pour récupérer le nom du site et l’url
    pour éviter si le nom et chemin du site sont modifiés ne pas avoir à retoucher à la première ligne des squelettes.

    Merci

    • -  Pour 1)

      J’ai testé dans inc-entete.html :
      <img src='#CHEMIN{images/toto.jpg}' />

      Mon image est dans /SITES/mon_site/images/toto.jpg.
      L’image s’affiche correctement chez moi ;
      SPIP écrit l’adresse de l’image comme cela :
      <img src='SITES/mon_site/images/toto.jpg' />

      Remarque : ça marche aussi si on met l’image dans /SITES/mon_site/squelettes/images/toto.jpg.

      Est-ce que ça aide où l’image ne s’affiche toujours pas ?

      -  Pour 2)

      Déjà, ajouter _SPIP peut aider : #NOM_SITE_SPIP et #URL_SITE_SPIP.

      Je pensais que
      dirname(__FILE__)
      en php donnerait l’adresse du répertoire squelette, mais il donne l’adresse du répertoire de public.php, soit écrire...

      Donc, une autre solution simple pour récupérer le répertoire du squelette est soit d’utiliser #URL_SITE_SPIP qui ne fait qu’afficher
      $GLOBALS['meta']['adresse_site']
      (voir dans ecrire/public/balises.php), soit de définir une variable globale dans mes_options.php contenant l’adresse du répertoire du site... par exemple un
      $GLOBALS['adresse_site_mutualise'] = $e;
      ou quelque chose d’approchant.

      Salutations,
      MM. 

    • Merci pour votre réponse rapide et bien utile.

      Je ne connaissais pas #CHEMIN... ; ne l’ayant pas trouvée dans une doc 1.9 récente.
      Par contre un petit problème encore, ou un bug spip ?
      Dans mon squelette article.html, j’ai un INCLURE (menu/menutop.htm)
      et #CHEMIN semble ne pas fonctionner du tout dans un INCLURE
      j’ai été obligé de créer dans mon squelette une variable $chemin = #CHEMIN crochet images crochet et dans mon fichier des menus, déclarer les images simplement par le nom des images ...
      Avez-vous une solution à proposer ?

      Autre problème avec les CSS
      Dans un squelette comme article, la sous-classe ci dessous ne marche plus :
      .accueil (crochet)
      background-attachment : fixed ;
      background-image : url(#CHEMIN (crochet) images/grad_hd_top.gif)(crochet) ;
      suite ...
      (crochet)

      car il y a 1 caractère crochets fermant de trop, les déclarations àprès suite ne sont pas valides
      si mes classes sont dans un fichier .css, comment donner le chemin pour une image ?

      merci d’avance

    • De mémoire, include n’aime pas trop les répertoires...
      Essayer (en mettant menutop.html à la racine du dossier squelette, pas dans /menu).
      Par ailleurs, je crois qu’il faut fond= :

      <INCLURE{fond=inc-entete}{id_secteur}>


      Ou, nouvelle syntaxe possible (pas de cache du fichier cible, directement intégré dans le cache du fichier en cours (en 1.9.1) :

      #INCLURE{fond=inc-entete}

      SInon, pour stocker une variable sans passer par php depuis Spip 1.9.1, utiliser #SET et #GET :

      #SET{chemin,#CHEMIN{machin} }
      #SET{toto,texte de toto}
      #GET{chemin}

      Si le css inclus ne fonctionne pas, tester avec le codage plus lourd utilisant [ et ( :

      .accueil{
      background-attachment : fixed ;
      background-image : url( [(#CHEMIN{images/grad_hd_top.gif})] );
      }


      Y a pas de raison que ça ne marche pas !

      Dernière possibilité : mettre tout ça dans le fichier css en le renomant style.css.html pour en faire un squelette de page et l’appeler dans inc-head par :

      	<!-- Feuille de styles CSS  -->
      	<?php
      		echo "<link rel='stylesheet' href='"
      		.generer_url_public('style.css')."' type='text/css' media='all' />\n";
      	?> 	

      Le fichier styles.css.html en question commence par envoyer des entetes http particulières (a mettre avant le code css) :

         #CACHE{3600*24*7*2}
         #HTTP_HEADER{Content-Type: text/css; charset=utf-8}
         #HTTP_HEADER{Vary: Accept-Encoding}


      (attention, pour les tests, il faut recalculer la page styles.css aussi ou mettre dedans #CACHE{0} pour forcer un recalcul systématique sinon on a beau modifier le css, on n’afficherait que la cache de spip)

      Bon Spip,
      MM

      PS : pour mettre du code dans ce forum, rien de tel qu’encacrer le code par une balise html ’code’ justement.

    • Merci, ça marche

      En ce qui concerne les CSS, le plus simple est de mettre un chemin en relatif comme par exemple : url (../images/nom.gif) ;
      Car le rep images est au même niveau que CSS
      La balise #CHEMIN n’est pas nécessaire dans les fichiers CSS

      Votre solution avec le codage plus lourd utilisant [ et ( n’a rien donné

      Votre solution de fichier CSS sous forme de squelette doit fonctionner, mais je ne l’ai pas essayée
      Je l’ai aussi trouvée dans ../dist/style-prive.html

      En ce qui concerne la balise INCLURE, après beaucoup de temps, je me suis aperçu que le nom de fichier à inclure, doit avoir l’extension html et non htm !!!
      Du coup, la balise #CHEMIN, dans mon squelette inclus, fonctionne bien.
      Tout est ok.

      Merci

    • Bonjour,

      J’ai aussi un problème avec les balise suivantes :

      #NOM_SITE_SPIP => vide

      #LOGIN_PRIVE => erreur 404

      Le reste fonctionne bien, mais je suis bloqué !
      une idée ??
      Est-ce que ces balises fonctionnent pour vous ?

      Merci

    • Vérification faite, la balise #NOM_SITE_SPIP fonctionne bien si le meta est renseigné (toutes mes confuses)

      Par contre j’ai toujours une erreur 404 en retour de #LOGIN_PRIVE

      Ca merde dans la fonction login_pour_tous (balise/login_public.php, //Appeler le squelette formulaire_login)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom