Plugin séances

Dans la gestion d’événements, il arrive d’avoir à mettre en rapport un spectacle (film, concert ou autre), un lieu et une date. Il est alors possible d’envisager plusieurs modes de présentation : pour un spectacle donné, les dates et lieux de celui-ci, de même à partir d’une date donnée, ou d’un lieu déterminé.
Ce plugin s’adresse plutôt aux sites de programmation culturelle ou événementielle (festival ou autre) pour la tenue de leur agenda de spectacles, films,…

Pour ce plugin, un spectacle (film, concert, conférence,…) est défini par un article. Le plugin rajoute la possibilité de définir les endroits (lieux, salles, scènes,…) eux-mêmes rattachables en option à un article. Les séances sont définies par un article de rattachement, un endroit et une date (avec éventuellement une remarque supplémentaire). Seule la date de début est définie. Une rubrique est alors comparable à une section, une thématique, ou à l’ensemble de la programmation.

Installation

Comme tout plugin. Celui-ci installe deux nouvelles tables spip_seances et spip_seances_endroits. Il ajoute également un champ « seance » sur la table spip_rubrique.

Fonctionne à partir de spip-2.0.10 inclus.
Compatible Champs Extra 2.

Désinstallation - désactivation

On peut soit désactiver (dans ce cas décocher simplement l’activation du plugin), les tables sont alors conservées, soit désinstaller en cliquant sur le lien correspondant (les tables sont alors supprimées).

Utilisation

Définir un endroit (obligatoire).
Il est obligatoire de définir au moins un endroit.
Dans « Édition » > « Séances / endroits »
Un endroit est défini au minimum par son titre. On peut lui adjoindre un descriptif ou le rattacher à un article. Les noms des endroits peuvent être numérotés « x. » pour définir des priorités dans l’affichage (voir plus loin).

Définir les endroits
Liste des endroits des séances
Formulaire de saisie pour les endroits


Définir des séances
Il est nécessaire pour cela d’activer le mode « séances » pour la rubrique.
Ceci étant fait, pour chaque article de celle-ci on pourra alors définir des séances.

Activer les séances
(dans la colonne de gauche)
Désactiver les séances


Remarque : la désactivation du mode séances pour une rubrique supprime les séances enregistrées pour tous les articles de celle-ci. Cette action est immédiate, elle constitue donc un moyen de supprimer toutes les séances d’une rubrique.
Le mode séance n’est pas hérité par les rubriques filles. Il faudra donc l’activer pour chaque rubrique d’une branche éventuellement.

Pour chaque article de la rubrique il est alors possible de définir des séances.

Listes des séances définies
Formulaire de définition d’une séance


Les séances peuvent être dupliquées (pratique lorsque seul un élément est modifié, jour, lieu par exemple)
Il est possible de supprimer une séance ou toutes les séances d’un article.

Remise à zéro
En fin de saison il peut être utile de supprimer toutes les séances de tous les articles. Pour cela dans « configuration » choisir « Configuration plugin séances » et supprimer toutes les séances enregistrées. cela ne désactive pas le mode séance pour les rubriques où il est activé.

Réinitialiser les séances


Dans les squelettes

La boucle SEANCES
<BOUCLEn(SEANCES){critères...}>

les critères de la boucle SEANCES

  • id_seance sélectionne la séance dont l’identifiant est id_seance. Comme l’identifiant de chaque séance est unique, ce critère ne retourne qu’une ou zéro réponse.
  • id_article sélectionne toutes les séances associées à un article.
  • date_seance ou age_seance sélectionne toutes les séances d’une date donnée ou d’un age donné (positif ou négatif) age_seance = 0 pour aujourd’hui par exemple ou age_seance <= 0 pour l’avenir.
  • id_endroit sélectionne toutes les séances se déroulant dans un endroit donné (ou dans une sélection d’endroits avec le critère IN)

par extension
id_rubrique sélectionne toutes les séances de tous les articles contenus dans une rubrique. (utile si une rubrique représente un genre, une section d’un festival,…).

statut restreint l’affichage des séances à celles rattaché à un article publié.

<BOUCLEn(SEANCES){id_rubrique}{age_seance <= 0}{statut = publie}{par date_seance}>

les balises de la boucle SEANCES

  • #ID_SEANCE
  • #ID_ARTICLE : id de l’article de rattachement de la séance
  • #ID_ENDROIT : id de l’endroit rattaché à la séance
  • #DATE_SEANCE tous les filtres de date sont applicables à #DATE_SEANCE
  • #REMARQUE_SEANCE : remarque éventuelle sur la séance (« en présence du réalisateur », « Attention, exceptionnellement… ».

Exemple : affichage des dates d’un spectacle donné (donc des séances rattachées à un article donné). Dans une boucle englobante de type ARTICLES :

<B_dates><ul>
<BOUCLE_dates (SEANCES) {id_article}{par date_seance}>
[<li>(#DATE_SEANCE|affdate) - [(#DATE_SEANCE|heures)]h [(#DATE_SEANCE|minutes)]</li>]
</BOUCLE_dates>
</ul></B_dates>

La boucle SEANCES_ENDROITS
<BOUCLEn(SEANCES_ENDROITS){critères...}>

Les critères

  • id_endroit id de l’endroit
  • id_article id de l’article éventuellement rattaché à un endroit
  • nom_endroit nom de l’endroit

Les balises

  • #NOM_ENDROIT : nom de l’endroit
  • #ID_ENDROIT : son id
  • #ID_ARTICLE : id de l’article décrivant plus précisément l’endroit éventuellement
  • #DESCRIPTIF_ENDROIT : descriptif de l’endroit.

Filtres du plugin séances

|heure_seance [(#DATE_SEANCE|heure_seance)] est équivalent à [(#DATE_SEANCE|heures)]h[(#DATE_SEANCE|minutes)], avec un format d’affichage plus convivial (20h au lieu de 20h00).

|heure_fin_seance le nom de ce filtre n’est pas forcément le plus approprié, mais il détermine la date de fin d’une séance à partir de sa date de début et de sa durée. Cette dernière peut être stockée dans un champ de l’article correspondant au film, au concert ou autre. Cette donnée peut être passée sous la forme 1h30, 1.30, 1,30, 1:30 (pour 1 heure 30).
[(#DATE_SEANCE|heure_fin_seance{#SUR_TITRE})] si la durée est stockée dans le sur-titre de l’article.

Les dates et les âges

les critères age et age_relatif sont applicables aux séances avec age_seance et age_relatif_seance. Ainsi on pourra utiliser {age_seance < 0} pour obtenir les séances à venir.

À partir de spip 3.0.8, les requêtes sql ont été modifiées et simplifiées. Le critère {age = 0} retourne les séances ayant lieux dans les 24 heures avant et après la requête.
Pour avoir les séances du jour, il est possible d’utiliser une expression du type

en dehors d'une boucle 
[(#SET{aujourdhui,[(#DATE|affdate{'Y-m-d'})]})]

puis dans une boucle sur la table SEANCES avec ou sans jointure
<BOUCLE_a (SEANCES)....{date_seance like #GET{aujourdhui}%}....>

Les jointures.

Il est possible de faire des jointures principalement sur la table spip_articles.

Exemple afficher les 5 prochains spectacles par ordre de date avec leur titre et les endroits de celles-ci. La jointure sur la table seances_endroits se fera automatiquement dans ce cas.

<B_prochains><ul>
<BOUCLE_prochains (SEANCES articles){age_seance <= 0}{par date_seance}{0,5}{statut=publie}>
<li>[(#TITRE)] [(#DATE_SEANCE|affdate)] - [(#DATE_SEANCE|heure_seance)] - [(#NOM_ENDROIT)]</li>
</BOUCLE_prochains>
</ul></B_prochains>

Afficher les dates et lieux d’un spectacle donné

<B_lesseances><ul>
<BOUCLE_lesseances (SEANCES seances_endroits){id_article}{par date_seance}{statut=publie}>
	<li>[(#DATE_SEANCE|affdate)] - #NOM_ENDROIT - #REMARQUE_SEANCE*</li>
</BOUCLE_lesseances>
</ul></B_lesseances>

Afficher les séances des spectacles d’une rubrique donnée.

<BOUCLE_lesseances (SEANCES seances_endroits){id_rubrique}{par date_seance}{statut=publie}>
	<li>[(#TITRE)] - [(#DATE_SEANCE|affdate)] - #NOM_ENDROIT - #REMARQUE_SEANCE*</li>
</BOUCLE_lesseances>

Voir dans le dossier tests du plugins pour d’autres exemples de boucles.

Squelettes définis par le plugin

flux rss
rss_seances_article, rss_seances_rubrique, rss_seances fournissent respectivement les flux rss pour un article, une rubrique ou tout le site. (On pourra les modifier pour qu’ils affichent les séances à venir ou toutes les séances passées et à venir).

l’appel se fait classiquement par #URL_PAGE dans le contexte d’un article ou d’une rubrique pour les deux premiers.

// dans le contexte d'un article
[(#URL_PAGE{rss_seances_article,id_article=#ID_ARTICLE})]
// dans celui d'une rubrique
[(#URL_PAGE{rss_seances_rubrique,id_rubrique=#ID_RUBRIQUE})]
// pour tout les séances du site
[(#URL_PAGE{rss_seances})]

agenda ical
De même ical_seances_article, ical_seances_rubrique, ical_seances fournissent respectivement les agenda au format iCalendar auxquels on peut s’abonner via le client ou le service en ligne adéquat (ical, lithning, netvibes,…) pour un article, une rubrique ou tout le site.
En outre un squelette ics_seance (sans S) permet de télécharger un fichier au format .ics, que l’on peut importer ou ajouter à la volée dans son agenda favori.

Les méthodes d’appel sont semblables à celles des fluxx rss.

Dans les deux cas (flux rss et ical) si aucune séance n’est définie, les squelettes ne retournent rien et produisent donc une erreur 404.

À faire

Gestion plus fine des autorisations (avec cfg ?).
Compatibilité Champs Extra 2 À partir de la version 1.1

Plugin disponible sur la zone

Merci à Matthieu pour ses chats et programmer spip
Merci à Cédric pour la partie activation des séances sur une rubrique inspirée du plugin agenda.

Discussion

4 discussions

  • 5
    Etienne

    Bonjour,
    J’essaie de passer mon site en spip4. J’ai pu activer le plugin séances en modifiant le fichier paquet.xml avec compatibilite=« [3.0.0 ;4.0.*] »
    Je retrouve bien mes séances comme il faut et l’affichage de mon site public est correct.
    Mais je ne peux pas ajouter de nouvelle séance à un article. Au moment de l’enregistrement de la séance j’ai le message d’erreur : seance_edit : Accès interdit
    Je ne peux pas non plus créer de nouvel endroit : une fois cliqué sur « icône créer endroit », j’ai un cadre avec marqué « sans titre » mais rien d’autre qui permette d’ajouter quoi que ce soit ni d’enregistrer.
    Bref, est-il prévu une version pour spip4.0 ? J’ai lu quelque part que spip3.2 ne sera plus supporté dans quelques mois et j’essaie d’anticiper.
    Merci ! et Bon courage !

    Répondre à ce message

  • 3

    Bonjour,

    SPIP 3.2 + Séances 2.0.5
    L’onglet « Édition > Séances / Endroits » affiche la page de gestion des endroits, mais pas des séances.

    Serait-il possible de pouvoir accéder à la gestion des séances qui se trouve ici « ?exec=seances » ?
    Cependant, les séances ne sont pas « facilement » gérables car chaque séance est nommée « Sans titre » et aucun affichage des associations Article / Endroit n’est disponible.

    Merci,
    françois

    • Bonjour

      L’onglet « Édition > Séances / Endroits » affiche la page de gestion des endroits, mais pas des séances.

      la page se nomme ainsi pour éviter les confusions avec d’autres plugins éventuels qui géreraient aussi des « endroits », c’est tout. Les séances se gèrent (création, modification, suppression) sur chaque article puisque c’est la philosophie du plugin (un article représente un film, un spectacle ou autre…) .

      Serait-il possible de pouvoir accéder à la gestion des séances qui se trouve ici « ?exec=seances » ?

      Là c’est spip qui génère un squelette par défaut pour chaque objet défini. Mais toujours par philosophie du plugin, les séances n’ont pas de titre. Effectivement là il faudrait créer un squelette spécifique en mettant à la place du titre : titre de l’article de rattachement / date de la séance.

    • Ben voilà avec la version 2.2 on a une page qui liste toutes les séances en cours et qui permet de les trier, de les supprimer les modifier.
      Plugin compatible avec spip 3.2

    • Génial domiw : merci beaucoup, ça facilite la mise à jour des séances !

    Répondre à ce message

  • 6
    Etienne

    Bonjour,
    Je profite du confinement pour me pencher sur un vieux problème. Peut-être pourras tu me donner des pistes.
    J’ai une boucle en page d’accueil :

    <B_prochain>
    <div class="menu menu_articles" id="articles_recents">
    	</br><h2>La prochaine date ...</h2></br>
        <ul>
    		<BOUCLE_prochain(SEANCES articles) {age_seance < 0} {par date_seance} {0,1}>
    		  <BOUCLE_prochainS(SEANCES articles) {date_seance==^(#DATE_SEANCE|affdate{Y-m-d})}>		  
    		  <li class="hentry clearfix">
    		  	     		  	     
    		  	     <div class="cartouche">
    		  		   #DEBUT_SURLIGNE		  		
    		  		  [(#LOGO_ARTICLE||image_reduire{200,200})]
    		  		  
    		  		  <BOUCLE_lesseances (SEANCES seances_endroits){id_article}{age_seance < 0}{par date_seance}{statut=publie}>
    				 <h5 class="#EDIT{surtitre} surtitre">[(#DATE_SEANCE|nom_jour) ][(#DATE_SEANCE|affdate) ][à (#DATE_SEANCE|heures)h][(#DATE_SEANCE|minutes)]</h5>
    				  [<h5 class="#EDIT{surtitre} surtitre">(#NOM_ENDROIT)</h5>]
    				</BOUCLE_lesseances>
    				
    				  <h10 class="titre"><a href="#URL_ARTICLE">#TITRE</a></h10>
    				  [<h5 class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</h5>]
    				   #FIN_SURLIGNE
    			     </div>  
    							
    				  #DEBUT_SURLIGNE
    				  [<div class="#EDIT{descriptif} descriptif">(#DESCRIPTIF|image_reduire{400,400})</div>]
    				   <br class="nettoyeur" />
    				  [<div class="#EDIT{chapo} chapo">(#CHAPO|image_reduire{400,400})</div>]
    				  <br class="nettoyeur" />
    				  [<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{400,400})</div>]
    				  <br class="nettoyeur" />
    				  [<p class="#EDIT{hyperlien} lien"><:voir_en_ligne:> : <a href="(#URL_SITE)" class="spip_out">[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]})]</a></p>]
    				  #FIN_SURLIGNE
    
    				  <br /><hr size="5"><hr size="5">
    								 
    		  </li>
    		  </BOUCLE_prochainS>
    		</BOUCLE_prochain>

    Si dans l’appel de la séance je change age_seance < 0 en age_seance > 0 j’obtiens bien comme je le souhaite la séance la plus ancienne au lieu de la prochaine séance.
    Mais, si je n’ai pas de séance postérieure à la date du jour dans ma base de donnée, je me retrouve avec un gros bug d’affichage et tout mon css perturbé.
    En gros, si il existe une séance « à venir » quelque part, même si ça n’est pas elle qui est appelée, ou même qu’elle n’est qu’un résidu dans la base de donnée d’un article supprimé, mon affichage est correct.
    Mais dès lors que je n’ai plus aucune date « à venir », l’article souhaité est bien appelé, mais avec un affichage complètement perturbé.

    La même manip mais dans mon menu de navigation, où mes séances apparaissent aussi en résumé, laisse apparemment un affichage correct dans les deux cas.

    Te remerciant,

    • Bonjour
      Si je comprends bien tu cherches à afficher les prochaines séances (pour une même date la plus proche) sur ta page d’accueil. La première boucle retourne la date de la prochaine séance la plus proche et ensuite la seconde porte sur celles qui ont lieu ce même jour que celui retourné.
      Dans la boucle les_seances pourquoi le critère date_seance==^(#DATE_SEANCE|affdate{Y-m-d}) n’est-il pas repris ??

      Il faudrait que tu supprimes les #EDIT{surtitre} qui ne portent pas en fait sur l’édition du surtitre de l’article. (tu peux garder la classe css si tu le souhaites)

      <h5 class="surtitre">[(#DATE_SEANCE|nom_jour) ][(#DATE_SEANCE|affdate) ][à (#DATE_SEANCE|heures)h][(#DATE_SEANCE|minutes)]</h5>
      [<h5 class="surtitre">(#NOM_ENDROIT)</h5>]

      Tu fermes bien tes balises ouvertes dans la partie <B_prochain> en toute fin de ta boucle dans un </B_prochain> ?

    • Etienne

      Salut et merci,

      reprendre le critère date_seance==^(#DATE_SEANCE|affdateY-m-d) dans la boucle les_seances crée une erreur de squelette.

      Supprimer les #EDITsurtitre ne change rien à mon bug d’affichage.

      En fait, si je simplifie beaucoup ma boucle ça ne change rien au problème :

      <B_prochain>
      <div class="menu menu_articles" id="articles_recents">
      	</br><h2>La prochaine date ...</h2></br>
          <ul>
      		<BOUCLE_prochain(SEANCES articles) {age_seance < 0} {par date_seance} {0,1}>
      		  <BOUCLE_prochainS(SEANCES articles) {date_seance==^(#DATE_SEANCE|affdate{Y-m-d})}>		  
      		  <li class="hentry clearfix">
      		  	     		  	     
      		  	     <div class="cartouche">
      		  		   #DEBUT_SURLIGNE		  		
      		  		  [(#LOGO_ARTICLE||image_reduire{200,200})]
      		  		  
      		  		  <h10 class="titre"><a href="#URL_ARTICLE">#TITRE</a></h10>
      				  [<h5 class="soustitre">(#SOUSTITRE)</h5>]
      				   #FIN_SURLIGNE
      			     </div>  
      
      		  </li>
      		  </BOUCLE_prochainS>
      		</BOUCLE_prochain>
          </ul>
      </div>
      </B_prochain>

      J’ai bien la prochaine séance qui s’affiche.

      Je change age_seance < 0 en age_seance > 0, j’ai bien la séance la plus ancienne qui s’affiche. A condition d’avoir quand même quelque part une séance dans le futur bien qu’elle ne soit pas appelée.

      Il suffit que j’aille changer la date de la seule séance du futur et que je la mette au passé, pour que mon bug de mise en page apparaisse. Testé 10h d’affillée hier soir dans toutes les configurations possibles.

      En fait j’ai toujours eu ce bug mais je me débrouillais pour avoir toujours une séance future quitte à mettre un article bidon.
      Là mon but final, une fois que ce bug sera réglé, c’est d’utiliser /b_prochain> pour pouvoir afficher l’article le plus ancien (qui dit « désolé on n’a pas de séance ») si la boucle ne renvoit pas de séance future.
      Bon sinon je pense que je devrais pouvoir contourner en utilisant plutôt un article (« désolé pas de séance ») avec une séance associée loin dans le futur, associé au mot-clé « antibug » et en appelant un critère  !titre_mot=antibug dans ma première boucle.

      Mais c’est de la bidouille.

    • Etienne

      Oui bon en fait !titre_mot= ne fonctionne pas (j’avais vu ça quelque part), mais je règle effectivement mon problème avec  !id_article=280 ou 280 est l’id de l’article daté (séance) loin dans le futur qui est appelé ensuite entre et /B_prochain>. Article qui dit « désolé on n’a pas de séance en vue ».

      Ceci dit je ne comprends toujours pas le pourquoi de cette nécessité d’avoir obligatoirement une séance future pour avoir une mise en page correcte.

    • Si ta mise en page est éclatée quand il n’y a pas de séance future c’est que fort probablement des balises du style div, ul ou autres ne sont pas fermées.
      Qu’est-ce que donne le code de ta page dans ce cas. Firefox signale ces erreurs.

    • Etienne

      RESOLU
      Bon, désolé du bruit. Finalement je me suis rendu compte qu’une fois que j’ai résolu la question dans le inclure/recent (colonne principale du sommaire), c’est dans le inclure/breve (colonne de gauche) que ça c’est mit à dysfonctionner alors que jusque là ça allait. Arghhh !!
      Alors que j’avais passé une partie de la nuit dernière à bidouiller ce inclure/breve pour y faire apparaître mon affichage correctement !
      Et finalement, il a fallu juste changer :

      <br /><h2 class="menu-titre">Prochainement ...</h2>
       <B_program>
       [ma boucle etc ...]
       </B_program>

      en :

      <B_program>
      <br /><h2 class="menu-titre">Prochainement ...</h2>
       [ma boucle etc ...]
       </B_program>

      A partir de là j’ai pu utiliser

      « du texte rien que du texte, sans boucle »
      /B_truc>
      pour afficher un texte si pas de séance prévue, autant dans le inclure/breve que dans le inclure/recent, sans bug d’affichage.
      La nuit dernière entière pour finir avec ce truc si simple !

      Mes excuses et encore merci.
      Tu peux peut-être supprimer cet échange inutile du forum

    • Etienne

      Argh je viens d’écrire un message qui a disparu d’un coup. Je recommence :
      RESOLU
      Une fois la question réglée dans ma colonne principale de page d’accueil, par la manip donnée plus haut (exclusion d’un article « antibug »), ça s’est remis à dysfonctionner par la colonne de gauche que j’avais mis quelques heures à régler la nuit dernière.
      Et finalement je me rends compte que dans le inclure/breve (colonne de gauche), si je remplace :

      <br /><h2 class="menu-titre">Prochainement ...</h2>
      <B_program>
      <div id="agenda">
      <ul class="level1">	
      <BOUCLE_program etc...
      </ul>
      </li><br />
      </BOUCLE_program>
      </ul></B_program>
      </div>

      par :

      <B_program>
      <br /><h2 class="menu-titre">Prochainement ...</h2>
      <div id="agenda">
      <ul class="level1">
      [ma boucle etc...]			    
      <BOUCLE_program etc...
      </ul>
      </li><br />
      </BOUCLE_program>
      </ul></div>
      </B_program>

      Ben là ça fonctionne, je n’ai plus de bug d’affichage nulle part sur ma page.
      Je peux me passer de mes histoires d’article « antibug » daté (séance) dans le futur et exclu d’une première boucle.
      Il me suffit de continuer mes codes comme ça :

       "du texte tout simple sans boucle"
      <//B_programm>

      (ou //B_prochain pour la colonne principale)
      Et tout va bien, si j’ai pas de séance dans le futur j’ai un petit texte à la place (j’arrange un peu le texte avec des styles, mais c’est pas indispensable).
      Y avoir passé une nuit blanche pour finir par un truc si simple !
      Vraiment désolé du bruit. Tu peux supprimer du forum si ça encombre.

    Répondre à ce message

  • Bonjour,

    Le fichier ics_seance.html génère un fichier _seance_1234.ics_ donc avec des tirets bas en début et fin, ce qui est problématique ;-)

    Il y a 2 apostrophes en trop dans filename, ligne 1 :

    [(#HTTP_HEADER{Content-Disposition: attachment;[ filename="<:seance:prefixe_ics_seance:>(#ID_SEANCE|concat{.ics})"]})]
    devrait être :
    [(#HTTP_HEADER{Content-Disposition: attachment;[ filename=<:seance:prefixe_ics_seance:>(#ID_SEANCE|concat{.ics})]})]

    françois

    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