Ferme à SPIP

Un petit article synthétique qui explique en quelques mots et captures d’écrans comment faire une « ferme à SPIP » avec le plugin "Mutualisation" à partir d’un nom de domaine principal.

ATTENTION , cet article nécessite d’utiliser une version stable > à 2.0

Les prérequis (au 1er janvier 2008) :

-  posséder un nom de domaine disponible
-  avoir la possibilité de modifier la configuration apache

Dans l’exemple suivant on supposera que l’on cherche à mettre la ferme sur le site GrmlEU [1]

Installation SPIP

Installer un SPIP (une version récente est recommandée). Pour la suite de l’exercice on supposera que le SPIP est installé dans le répertoire « /home/grml/public_html/ ».

Installation plugin mutualisation

Installer le plugin Mutualisation [2] (il est plus simple de ne pas le mettre dans le répertoire plugin) . Nous avons donc « /home/grml/public_html/mutualisation »

Configuration apache

Modifier la configuration apache

Si vous êtes sur apache2 il faut créer un fichier grml.eu.

etc/apache2/sites-available# more grml.eu 
<VirtualHost *>
ServerName grml.eu
ServerAlias *.grml.eu
DocumentRoot /home/grml/public_html
</VirtualHost>

Ce qui veut dire que tous les sous domaines de grml.eu vont pointer vers le répertoire « /home/grml/public_html ».

Ensuite il faut faire une lien symbolique pour que le domaine soit actif

cd etc/apache2/sites-enable
ln -s /etc/apache2/sites-available/grml.eu  grml.eu 

Enfin il faut prendre en compte ces changements

/etc/init.d/apache2 force-reload 

Configuration DNS

Il faut maintenant que lorsque l’on tape grml.eu, il redirige vers l’adresse ip du serveur

voici la config utilisée chez gandi

Configuration de la mutualisation

Copier le fichier /home/grml/public_html/mutualisation/mes_options.php.txt vers « /home/grml/public_html/config » et enlevez l’extension « .txt » . Ouvrez ce fichier et procédez au paramétrage.

Pour vous aider voici le fichier de config utilisé sur scriibe

<?php

        $GLOBALS['taille_des_logs']=1000;
        #parametrage a faire 
        $monTld="scriibe.net";

        require _DIR_RACINE.'mutualisation/mutualiser.php';
        define ('_ID_WEBMESTRES', 1);

        $site = $_SERVER['HTTP_HOST'];

        $type_urls = 'propres2'; # par defaut, surchargeable ci-dessous

        switch($site) {
                case "www.$monTld":
                        $site=$monTld;
                        break;
                case 'www.spip-blog.net':
                        $site='spipblog';
                        break;
                case 'spip-blog.net':
                        $site='spipblog';
                        break;
                default :
                        $site = str_replace('.scriibe.net', '', $site);
                        break ; 
        }
        define ('_SITES_ADMIN_MUTUALISATION', ''); // ici sites esclaves
        define ('_INSTALL_SERVER_DB', 'mysql');
        define ('_INSTALL_HOST_DB', 'plouf');
        define ('_INSTALL_USER_DB_ROOT', 'plouf');
        define ('_INSTALL_PASS_DB_ROOT', 'plouf');
        define ('_INSTALL_TABLE_PREFIX', 'spip');
        define ('_INSTALL_NAME_DB', 'scr_'.prefixe_mutualisation($site));
        if ($site != "$monTld") {
                demarrer_site($site,
                        array(
                        'creer_site' => true,
                        'creer_base' => true,
                        'code' => 'plouf',
                        'url_img_courtes' => true,
                        'creer_user_base' => true,
                        'mail' => 'ben.spip@gmail.com'
                        )
                );
        }
        else {
        $GLOBALS['dossier_squelettes']=":mutualisation";
        }

?>

pour celui sur GrmlEU

<?php

        if (!defined("_ECRIRE_INC_VERSION")) return;
        require _DIR_RACINE.'mutualisation/mutualiser.php';

        $site = str_replace('www.', '', $_SERVER['HTTP_HOST']);
        if ($site != $_SERVER['HTTP_HOST']) {
                include_spip('inc/headers');
                redirige_par_entete('http://'.$site.'/');
        }

        define ('_INSTALL_SERVER_DB', 'mysql');
        define ('_INSTALL_HOST_DB', 'localhost');
        define ('_INSTALL_USER_DB', 'plouf');
        define ('_INSTALL_PASS_DB', 'plouf');
        define ('_INSTALL_NAME_DB', 'grml');
        #define ('_INSTALL_TABLE_PREFIX', 'spip');
 
        define ('_SITES_ADMIN_MUTUALISATION', 'grml.eu');


        demarrer_site($site,
                array(
                        'creer_site' => true,  
                        'creer_base' => false,
                        'creer_user_base' => false,
                        'mail' => 'ben.spip@gmail.com',               
                        'code' => 'ecureuil',
                        'table_prefix' => true,     
                        'cookie_prefix' => true,   
                        'repertoire' => 'sites',     
                        'url_img_courtes' => true, 
                        'url_creer_base' => '' 
                )
        );

?>

On peut noter que pour scriibe, une base et un utilisateur mysql sont créés pour chaque site. Par contre sur GrmlEU, il n’y a qu’un user et qu’une seule base, avec un préfixe différent pour les tables de chaque site.

Notes

[1GrmlEU est un site qui permet d’essayer SPIP : vous pouvez créer un SPIP en quelques clics. Les sites sont effacés tous les mois

Discussion

50 discussions

  • Bonjour,
    Je dois faire une mise à jour de ma ferme. Est-ce qu’il y a un qq part tuto sur la procédure à suivre ?
    Je m’interroge notamment dans le cas où la BDD doit être mise à jour, ça va bien se passer ?
    Merci pour vos éclairages.

    Répondre à ce message

  • 8

    Bonjour,
    J’ai mise en place une ferme SPIP 4.1.9 (PHP 7.4) d’une dizaine de sites.
    J’ai voulu faire une mise à jour complète et :
    1 - la mise à jour de SPIP via spip_loader ne fonctionne pas (page blanche). Quelle est la procédure recommandée ?
    2 - la mise à jour des plugins provoque leur inactivation sur les sites dépendants de la ferme (les anciennes versions des plugins n’étant pas conservées). Quelle est là aussi la meilleure procédure ?
    Merci pour vos conseils.

    • Bonjour,

      1. tu as quel version du loader ?
      2. oui il est recommander de travailler avec git pour géré une mutualisation car quand on met à jour les plugins cela changement le chemin si tu le fait avec SVP. Sinon il faut que chaque site est son répertoire de plugins

    • Bonjour Pierre,
      Pour spip_loader, j’utilise la version 6.1.2, et j’obtiens une erreur SHA512. Cela ne semble pas une erreur propre à la ferme, je m’en rends compte maintenant.
      Pour la mise à jour des plugins, j’ai contourné le problème en mettant en place un mini-plugin qui spécifie la nécessité d’activation de tous plugins. C’est un peu fastidieux, mais c’est pratique.
      Je ne sais pas ce que travailler avec GIT signifie, mais si ça peut aider, je suis preneur.
      Merci pour ton aide _||_

    • Faire de git clone et autre commande du coup ton chemin de plugins ne change pas
      Après tu as spip-cli qui avec des ligne de commande rajoute des plugins et les actives ou met à jour la bdd sans passer dans le BO mais je ne l’utilise pas.

    • Merci encore pour ton aide si rapide !
      Je ne connais pas du tout ces outils Git, et ne saurai pas pour l’instant procéder de cette manière. Mais j’ai partiellement résolu mes problèmes :
      1) je vais faire la mise à jour du SPIP centralisé de la ferme de manière manuelle.
      2) je vais créer un plugin pour chaque website qui liste tous les plugins et les qualifie comme nécessaires. Ainsi je mets à jour tous les plugins en 1 clic.
      Pour autant, ce qui aurait été sécurisant et pratique, c’est que le dossier Plugins de la ferme SPIP conserve les versions anciennes des plugins après mise à jour. SPIP est manifestement maintenant structuré pour rendre possible cette option, mais comment la rendre effective ?

    • A propos du problème SHA512 « spip_loader.php on line 18 », il semble que ce ne soit pas propre à la ferme mais général... Affaire à suivre.

    • @Pierre Kuhn : Cette histoire de git m’interesse...
      Quelle sont les commande git pour mettre à jour un plugin ? Pour changer de version (rétrograder comme mettre à jour la dernière version) ? Y a-t-il un petit memento quelque part à ce sujet ?
      Merci d’avance

    • J’utilise https://git.spip.net/spip-contrib-outils/checkout
      Je pense pas que tu puisse retrograder, je vois pas le besoin non plus d’ailleurs.
      Si tu git pull un dossier pour le mettre à jour cela met à jour le plugins sur la dernière version, attention au branche pour ne pas se perdre ou casser le site

    • Pour solution,
      j’ai opté pour la création d’un petit plugin « Activation Automatique » (un simple paquet.xml) dédié à chaque site, qui liste les plugins nécessaires à l’utilisation du site.
      Quand je fais une mise à jour, je n’ai qu’à le réactiver AA pour que tous les plugins soient eux-mêmes réactivés.

    Répondre à ce message

  • 6

    Bonjour,
    Je suis intéressée pour monter une ferme à SPIP.
    Quelques questions avant de me lancer :
    -  le plugin « Mutualisation » est-il toujours maintenu ? Il semble que oui, mais je préfère m’en assurer.
    -  combien de sites maximum dans une « ferme à SPIP » ?
    -  est-il possible d’avoir une peu d’aide quand les choses sérieuses commenceront ?
    -  les plugins sont-ils installés de façon individuelle pour chaque site ?
    Merci d’avance de toute réponse ou échange me permettant de mieux comprendre le fonctionnement d’une « ferme à SPIP ». (Je connais le multisite WordPress, mais il y a certainement des différences que j’essaie de cerner.)
    Merci encore et bonne journée à chacun.

    • Bonsoir,

      Si tu veux géré des sites en mutualisation, il faut maitriser SPIP en git pour faciliter les mises à jour ensuite.
      Les plugins sont commun à tous les sites, comme le core de SPIP.
      Tu n’as pas de nombre de site maxi, cela va dépendre des sites, du serveur ...
      Il faut prévoir une base par site et pas une base pour tous les sites.

      Le problème de la mutu c’est en cas de faille exploité, tous les sites seront impacté.

      Mais on peut en parler plus si tu as vraiment ce besoin.

      Cordialement
      Pierre

    • Bonjour,

      Le plugin mutualisation est maintenu par ceux qui l’utilisent (j’en fais partie).

      J’aurais tendance à dire que pour l’utiliser, il faut que tu sois en mesure de le maintenir toi aussi.

    • Euh, je comprends pas trop pour quelle raison il faudrait être en mesure de maintenir un plugin pour l’utiliser.
      Cet outil est formidable, grand merci à tous ceux-celles qui le maintiennent, (et plus généralement, grand merci à l’ensemble de la communauté des développeurs dont le travail et l’esprit de partage permet aux utilisateurs de base de disposer de merveilleux outils).
      Mais, assurément, ouf, il n’est pas nécessaire d’être codeur pour se servir de SPIP.
      Aussi je trouve qu’écrire : “J’aurais tendance à dire que pour l’utiliser, il faut que tu sois en mesure de le maintenir toi aussi" ne reflète pas la réalité (= on peut se servir d’un plugin sans devoir être capable de le maintenir) et n’est pas très encourageant (voire culpabilisant), ce qui est dommage.
      SPIP est un outil génial, invitons les débutants à affronter patiemment la courbe d’apprentissage qui peut paraître assez pentue pour le(a) débutant(e).
      Enfin, c’est comme ça que je vois les choses...

    • Alors, je vais préciser :

      • le fonctionnement du « plugin » de mutualisation facile implique de bien comprendre ce qu’il fait, et ce qu’il implique
      • d’ailleurs, ça n’est pas un plugin, mais un ensemble de scripts qui facilitent la mutualisation, en utilisant un mécanisme se trouvant en fait au cœur de SPIP
      • utiliser la mutualisation, c’est grosso-modo renoncer à SVP
      • donc installer les plugins avec Git (ou FTP, mais là, franchement, c’est long)
      • donc savoir choisir la branche de ce qui a été récupéré par Git
      • et installer manuellement les lib/ parce que Git ne les installe pas (contrairement à SVP)

      Bref, y’a du pour, y’a du contre, mais ça aide de comprendre les rouages de l’intérieur.

    • Bonjour à tous et merci pour vos réponses rapides.

      Si tu veux géré des sites en mutualisation, il faut maitriser SPIP en git pour faciliter les mises à jour ensuite.

      Ce n’est pas encore le cas, mais j’aime bien apprendre. Donc si je sais que je peux avoir des coups de pouce dans la mise en place, c’est faisable ;)

      Mais on peut en parler plus si tu as vraiment ce besoin.

      Je vais l’avoir très bientôt. Donc il faut que je teste dès maintenant (enfin plutôt cet été) et oui je veux bien avoir des interlocuteurs pour les détails au fur et à mesure de mes essais.

      J’aurais tendance à dire que pour l’utiliser, il faut que tu sois en mesure de le maintenir toi aussi.

      Jamais fait, mais prête à me lancer :) avec votre aide !

      Toutes vos remarques et indications ne me font pas peur, mais nécessitent que je passe au niveau supérieur sur SPIP. Pas de souci si je sais que je peux avoir des réponses de quelques uns.

      Je vais donc installer une ferme à SPIP test prochainement et cela me permettra d’avancer tranquillement.

      Encore merci de vos réponses. Je reviens vers vous prochainement.
      Bonne journée.

    • Mes premiers pas :

      • installer SPIP : OK
      • copier le dossier mutualisation : OK
      • modifier et mettre dans config/ le fichier mes_options.php : OK mais pas sûre d’avoir tout fait correctement
      • installer un premier site : OK
      • afficher https://mon-site/spip/ecrire/?exec=mutualisation : « Fichier mutualisation introuvable. » mais n’ayant pas fait l’étape ci-dessous, c’est probablement normal
      • configurer apache et DNS : à faire (mais pas sûre d’avoir les droits suffisants, peut-être à demander à la DSI de mon service)

    Répondre à ce message

  • Bonjour et merci pour ce plugin !

    J’ai un petit souci avec le compresseur CSS :
    La fonction compresseur_ecrire_balise_css_dist du plugin compresseur passe en entête de la page un prefetch pour le fichier CSS compressé. C’est une bonne pratique.
    Mais avec le plugin de Mutualisation et l’option ’url_img_courtes’ le prefetch ne se fait pas sur l’URL du fichier classique (http://exemple.com/local/cache-css/aaaaa.css) mais directement vers le fichier dans l’arborescence de la mutualisation (http://exemple.com/sites/monsite.com/local/cache-css/aaaaa.css).

    Le fichier CSS est donc chargé deux fois :

    1. sur http://exemple.com/sites/monsite.com/local/cache-css/aaaaa.css via le prefetch
    2. sur http://exemple.com/local/cache-css/aaaaa.css via l’inclusion dans le head
      Et c’est pas l’idéal pour les performances :(

    Voici un exemple en situation réelle :
    Si on regarde l’entête HTTP de réponse de la page via curl -sSL -D - legras-industries.com -o /dev/null on voir que le prefetch est fait sur la mauvaise URL (Link: <https://legras-industries.com/sites/legras-industries.com/local/cache-css/5efddd078ece692a340105a6e4adc57a.css?1548639575>;rel="stylesheet prefetch")

    J’ai vraiment du mal à voir à quel moment ça cloche.

    Répondre à ce message

  • 1

    Bonjour,
    Il y a a priori une erreur dans la version 1.4.4, ligne 17 et 19 de mutualiser_creer.php : il manque les quotes autour du nom de la constante _SPIP_LOGO_MUTU. Cela entraîne un warning avec la version 7.2 de PHP (et ce sera une erreur fatale avec la 7.3)
    Voici ci-dessous le code corrigé :

    if (find_in_path('images/logo-spip.png')) {
    	define( '_SPIP_LOGO_MUTU',find_in_path('images/logo-spip.png'));
    } else {
    	define( '_SPIP_LOGO_MUTU',find_in_path('images/logo-spip.gif'));
    }

    Cordialement,
    Bruno

    Répondre à ce message

  • 2

    Bonjour à tous,
    J’ai plusieurs sites installés en mutualisation et pour la première fois, je dois en rajouter un nécessitant son propre fichier mes_options.php (à ne pas confondre avec le fichier mes_options.php de la mutu elle-même).
    Mais où placer ce fichier mes_options.php dans le cas d’une mutualisation ?
    Lorsque je le place dans le sous-dossier /config propre à ce site, il ne semble pas pris en compte ?
    Merci.
    PS : j’ai posé la même question sur la liste spip@rezo.net

    • Bonjour,

      Tu as trouvé la solution ?

    • Bonjour,

      Comme évoqué, mettre le fichier dans le sous dossier config propre au site concerné.
      Exemple (avec « sites » comme dossier des différents sites) :
      /sites/mon_site_mutualise/config/mes_options.php

      Normalement, cela fonctionne.

    Répondre à ce message

  • 5

    Bonjour,
    J’utilise spip 3.2.1 avec mutualisation et via le site privé, mes logos d’article sont téléchargés sur ecrire/IMG/LOGOS et sont donc identiques sur tous les sites.
    Puis-je modifier les paramètres de config pour que les logos soient téléchargés sur un sous-dossier de sites/mysite .com pour avoir des logos d’articles différents pour chaque site ?

    • Bonjour,

      On peut voir ton fichier mes_options avec la config de la mutu ?

    • Voila, j’ai supprimé les commentaires et infos privés :

      <?php
      	if (!defined("_ECRIRE_INC_VERSION")) return;
      	if (!is_readable (_DIR_RACINE.'mutualisation/mutualiser.php')) {
      		echo _L("Fichier 'mutualisation/mutualiser.php' manquant dans la racine " . _DIR_RACINE);
      		exit;
      	}
      	require _DIR_RACINE.'mutualisation/mutualiser.php';
      
      	$site = str_replace('www.', '', $_SERVER['HTTP_HOST']);
      	if ($site != $_SERVER['HTTP_HOST'] AND !in_array($site, $www)) {
      		include_spip('inc/headers');
      		$req = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/';
      		if (isset($_SERVER['HTTPS'])
      		AND test_valeur_serveur($_SERVER['HTTPS']))
      			$protocole = 'https';
      		elseif (!isset($_SERVER["SCRIPT_URI"]) OR !($p = strpos($_SERVER["SCRIPT_URI"], '://')))
      			$protocole = 'http';
      		else $protocole = substr($_SERVER["SCRIPT_URI"],0,$p);
      		redirige_par_entete($protocole . '://' . $site . $req);
      	}
      
      	if (strpos($site, ':')) {
      		if (preg_match('/:80$/', $site)) $site = substr($site,-3);
      		else $site = str_replace(':', '_', $site);
      	}
      
      	define ('_INSTALL_SITE_PREF', $site);
      	define ('_INSTALL_NAME_DB', 'mytable');
      
      	define ('_INSTALL_SERVER_DB', 'mysql');
      	define ('_INSTALL_HOST_DB', 'localhost');
      	define ('_INSTALL_USER_DB', 'root');  
      	define ('_INSTALL_PASS_DB', ''); 
      
      	define ('_INSTALL_TABLE_PREFIX', myprefix);
      	$cookie_prefix = strtok($site, '.'); 
      
      	demarrer_site($site,
      		array(
      			'creer_site' => true,
      			'creer_base' => false,
      			'creer_user_base' => true,
      			'mail' => 'myemail@test.org',
      			'code' => '********',
      			'table_prefix' => false,
      			'cookie_prefix' => false,
      			'repertoire' => 'sites',
      			'url_img_courtes' => false,
      			'url_creer_base' => '',
      			'avant_initialisation' => ''
      		)
      	);
      ?>
    • Je vois pas pourquoi cela va dans ecrire/IMG ...
      Pas logique.

      Les docs dans la médiathèque sont identique partout du coup ?
      Ensuite je vois une base pour tous les sites .... pas top si tu as de gros site je pense.

    • J’ai en fait 3 sites distincts mais disons frères jumeaux, ils utilisent la même base de données, et les tables supplémentaires sont identiques pour les 3 sites.
      Les photos des utilisateurs sont enregistré pour les trois sites dans IMG/LOGOS et IMG/INTRO, donc communs aux 3 sites.
      Le problème est juste que pour les logos des articles qui devraient être distincts et non communs.

    • Je sais pas si cela est possible par contre ...

    Répondre à ce message

  • 7

    Bonjour,

    Il m’arrive de surcharger la présentation de certains plugins dans l’espace privé dans par exemple : sites/monsite.com/squelettes/prive/formulaire/...

    Mais en mutualisé cela ne fonctionne plus. Une idée comment corriger ce souci ?

    En attendant, j’ai mis mes fichiers personnalisés à la racine de spip dans le dossier squelettes. Ce qui n’est pas très pratique car je ne peux choisir sur quel sites doit s’appliquer le/les fichiers modifier.

    • Bonsoir

      Est sans le dossier prive ?

      PS : Pourquoi surcharger les configuration de plugins ?

    • Non j’ai déjà essayé. Cela ne fonctionne pas.

      Pour certains plugins je change un peu la présentation html dans l’espace privé.

    • Dans ce cas pourquoi ne pas faire amélioré les plugins ?

    • Parce que ce n’est pas vraiment une amélioration. Voici l’issue d’un plugin que je souhaiterais surcharger :

      https://contrib.spip.net/Identite-Extra#forum487993

    • en effet, j’ai jamais fais ça en mutu.

    • Flute. Pas de solution alors ?

    • Salut,

      Tu peux surcharger le prive dans le dossier squelettes de ton site hein^

      Il est également possible de ne pas mutualiser les plugins... (c’est bien mieux amha en production)

      # desactiver le dossier plugins classique
      define('_DIR_PLUGINS','');
      # Definir un dossier plugins pour chaque site
      define('_DIR_PLUGINS_SUPPL',_DIR_RACINE.'sites/'.$site.'/plugins/'); 
      # Definir un dossier plugin/auto pour chaque site
      define('_DIR_PLUGINS_AUTO',_DIR_RACINE.'sites/'.$site.'/plugins/auto/'); 

      Les plugins-dist et le core de spip restent mutualisés mais chaque site a ses plugins persos

    Répondre à ce message

  • Bonjour,

    Nous mettons à disposition des établissements de notre académie une ferme de SPIP environ 110 hébergements actuellement. Nous utilisons pour cela le plugin mutualisation facile version 1.3.5 stable installé via la gestion des plugins. Nous souhaitons mettre à jour les plugins de l’ensemble des sites via la fonction l’admin de mutualisation « ecrire/ ?exec=mutualisation »

    Le script Upgrader intégrés à la mutualisation et servant à automatiser les mises à jour (extensions et noyau) semble ne pas fonctionner.

    L’option « Upgrader tout » n’a aucune action, le mode débogueur du navigateur nous apporte pas plus d’informations.

    Cependant, d’autres fonctionnalités sont opérationnelles (calcul des volumétries : documents, cache,...).

    Merci par avance de toute aide qui me sera apportée !

    Le plugin couteau suisse Version locale : 1.9.12 Révision : 101356 est aussi installé, nous avons activé L’Ecran de sécurité et mises à jour automatiques. L’écran de sécurité s’installe et se met à jour sans problème ainsi que les mises à jour automatiques.
    Serveur Debian 7.11 wheezy
    Server version : Apache/2.2.22 (Debian)
    php5 vers : 5.4.45-0+deb7u7
    SPIP 3.1.3 [23214]

    Répondre à ce message

  • 1

    J’aime beaucoup l’idée mais en terme de sécurité, cela ne craint pas trop d’avoir tout ses sites sur un seul noyau SPIP ? Si un compte utilisateur ftp est compromis, cela met tout les autres domaines en danger non ?

    • Cela dépend comme tu donnes tes accès ftp.
      Il vaut mieux garder le ftp pour l’admin général et donner des ftp restreint ensuite.

    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