Formulaire d’ajout/modification d’articles côté public à partir de SPIP2.1

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour SPIP.

A partir de SPIP 2.1, et plus encore en SPIP3, plus besoin de plugin ou procédure compliquée pour l’édition côté public de vos articles.

Une illustration de possibilités, adaptable pour tous les objets SPIP.

La base

L’appel du formulaire #FORMULAIRE_EDITER_ARTICLE{id_article, id_rubrique, retour, lier_trad} est décrit dans la documentation de SPIP pour un article comme pour les autres objets SPIP.

Avec cette simple ligne dans votre squelette vous pouvez publier un formulaire fonctionnel d’ajout ou de modification d’un article ou de tout objet SPIP.

Rendre ces formulaires publics :
Comme indiqué dans la documentation, vous appelez le formulaire dans un squelette de votre choix.

En pratique, ça peut donner :
Pour un nouvel article :

#FORMULAIRE_EDITER_ARTICLE{new, XXX, #SELF}

où XXX est le numéro de la rubrique dans laquelle vous souhaitez que les articles soient enregistrés.

Pour l’édition d’un article :
Dans une boucle ARTICLES, qui donnera la valeur du #ID_ARTICLE, ou en remplaçant #ID_ARTICLE par #ENV{id_article} si vous passez le numéro d’article dans l’url :

#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #SELF}


Pour l’édition d’un article, de son logo et de ses documents joints - en SPIP3 (dans une boucle ARTICLES) :

#FORMULAIRE_EDITER_LOGO{article,#ID_ARTICLE,#SELF,#ENV**}
#FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #SELF} 
<INCLURE{fond=plugins-dist/medias/prive/objets/editer/colonne_document,objet=article,id_objet=#ID_ARTICLE,env} />

Si vous souhaitez vérifier/restreindre les droits

Vous pouvez vérifier/restreindre le droit de proposer un article. Par exemple :
Est-ce que l’auteur est bien loggé :

[(#SESSION{id_auteur}|oui) 
#FORMULAIRE_EDITER_ARTICLE{new, "0", #SELF}
 ]

Est-ce que l’auteur a le droit de modifier l’article en question (pour l’édition d’un article pré-existant, donc dans une boucle ARTICLES) :

[(#AUTORISER{modifier,article,#ID_ARTICLE})  #FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE, #ID_RUBRIQUE, #SELF} 
 ]

N.B. : la gestion des autorisations se définit via le plugin « Autorité », où en surchargeant dans votre fichier mes_options.php les fonctions « autoriser ».

Et si vous voulez personnaliser votre formulaire ?

Il faut alors faire vos propres formulaires, à partir des originaux.
Dans votre dossier « squelettes », dans lequel vous rangez vos squelettes personnalisés, dans un sous dossier « formulaires », vous copiez les fichiers suivant :
-  editer_article.html
-  editer_article.php

Vous trouverez les originaux dans le dossier original « /privé/formulaires/ » de votre SPIP.

Si vous voulez qu’ils soient utilisés partout, y compris dans l’espace privé, vous les copiez sans modifier les noms (principe de la « surcharge »).

Si vous voulez les appeler ponctuellement à certains endroits, pour porposer par exemple une version allégée du formulaire de rédaction, il faut les personnaliser :

Vous les renommez, par exemple :
-  editer_article_public.html
-  editer_article_public.php

Puis vous ouvrez votre « editer_article_public.php » tout frais, et à chaque fois que vous trouvez l’occurence « editer_article », vous la remplacez par « editer_article_public »
Ainsi par exemple, « formulaires_editer_article_charger_dist » devient « formulaires_editer_article_public_charger_dist », etc.

Et voilà, bravo, c’est prêt !

Tous vos appels de formulaires -décrits plus haut- devront alors être fait avec ce nouveau nom, par exemple :

#FORMULAIRE_EDITER_ARTICLE_PUBLIC{#ID_ARTICLE, #ID_RUBRIQUE, #SELF} 

Pré-définir des valeurs
Vous pouvez dans le fichier editer_article_public.html définir des valeurs en remplaçant des champs par des input hidden.
par exemple :

<input type='hidden' id='statut' name='statut' value='prop' />


Ca peut aussi être fait dans editer_article_public.php, via la fonction formulaires_editer_article_public_charger_dist.

Retirer des champs
Vous pouvez retirer des champs du formulaire editer_article_public.html si vous le souhaitez (à l’exception du titre et du champ rubrique, sauf à les avoir pré-définis comme ci-dessus).

Et aussi
A voir également d’autres illustrations ici
[EDIT 1mars2017] Des options complémentaires dans cette discussion

Discussion

31 discussions

  • Bonsoir

    Ayant beaucoup cherché pourquoi la liste des rubriques ne s’affichaient pas avec le code

     #FORMULAIRE_EDITER_ARTICLE{new, #ID_RUBRIQUE, #SELF}

    j’ai fini par trouver que le traitement ajax ne se faisait pas (je ne sais pas pourquoi).

    J’ai mis dans mes_options (trouvé dans ecrire/inc/chercher_rubrique.php) :

    define('_SPIP_SELECT_RUBRIQUES', 100000); 

    /* mettre 100000 pour desactiver ajax */

    SPIP 3.0.16

    Si ça peut aider quelqu’un

    Cilou

    Répondre à ce message

  • Bonjour,

    je viens de mettre à jour un site en 3.017

    sur ce site on pouvait écrire un article en mode public librement grâce à la balise #FORMULAIRE_EDITER_ARTICLE sans devoir s’enregistrer

    et là boum on ne peut plus....message d’erreur...pas les droits suffisants...

    je pense évidemment que c’est pour des raisons de sécurité...

    Y a t-il quand même une solution ?

    Répondre à ce message

  • 2

    Bonjour à tous ! Superbe contribution !
    Cependant je souhaite allez un peu plus loins en espérant que quelq’un puisse m’aider !

    Via le Plugin autorité, je souhaite bloquer l’accès des rédacteurs à l’espace privé pour leur offrir un espace de rédaction simplifier via #FORMULAIRE_EDITER_ARTICLE coté publique.
    Le formulaire est déjà opérationnelle mais...

    La fonction pour bloquer l’accès a l’espace privé aux rédacteurs fonctionne à merveille... même un peu trop !

    Quand ils rédige leur article et le valide, cela du coup n’a aucun effet, ou quand ils choisissent la rubrique dans laquelle ils soumettent leur article, redirection vers un page d’erreur : Accès interdit à l’espace privé.

    En bref : comment permettre aux redacteurs d’utiliser ce formulaire, sans qu’il n’est accesà l’espace privé !

    En espérant que vous pourrez m’apporter de l’aide =)

    • Sur Spip3, le plus simple que j’ai trouvé est de surcharger le squelette de l’administration.

      Prenez le squelette de
      /prive/squelettes/page.html
      et recopier le dans votre dossier
      /squelettes/prive/squelettes/page.html

      et ajouter le test que vous voulez avant l’inclusion :
      par exemple, renvoyer les redacteurs vers la UNE, sinon (donc les administrateurs) afficher l’admin :

      <BOUCLE_test(CONDITION){si #SESSION{statut}|=={1comite}}>
      #HTTP_HEADER{Location:../?&page=sommaire}
      </BOUCLE_test>
      <INCLURE{fond=prive/squelettes/structure}{env}{type-page=#ENV{type-page,#ENV{exec}}}{composition=#ENV{composition,''}}>
      <//B_test>
    • Cette piste me semble intéressante en effet ; créer une redirection pour les rédacteurs. Il faut juste en complément que je trouve comment masquer le liens « Espace Privé » à ces derniers.

    Répondre à ce message

  • Je rencontre un problème.
    Avec :
    #FORMULAIRE_EDITER_ARTICLE new, 19, #SELF

    le formulaire continue d’afficher « à l’intérieur de la rubrique : Racine du site » ; plutôt que de la rubrique 19 de mon site.

    de plus les articles ainsi rédigés ne sont pas « enregistrés » par le site : introuvable ensuite ds l’espace privé .

    Je cherche une réponse.

    Merci

    Répondre à ce message

  • Cette évolution est intéressante mais c’est dommage qu’elle ne soit pas bien documentée.
    Tous les exemples donnés plus haut ne sont pas satisfaisants.

    Ce qui serait bien c’est de pouvoir reproduire exactement le processus de publication dans l’espace privé.

    D’abord le formulaire d’édition d’article seul.
    Après l’avoir rempli et validé, affichage du texte et du formulaire d’ajout de documents, avec lien pour modifier l’article.

    Si une âme charitable a réussi un tel exploit, je le prie de nous en faire profiter.

    Répondre à ce message

  • Bonjour,

    j’aimerais savoir comment offrir la possibilité aux contributeurs de laisser un pseudo et un mail si ils le souhaitent. Ceci ne serait pas obligatoire. C’est le contributeur qui décide.
    merci pour votre aide.

    Répondre à ce message

  • 1

    Bonjour,
    Je souhaite utiliser cette sympathique contrib pour permettre la publication ouverte de contenu (tout visiteur doit pouvoir proposer un article).
    Mais une expérience passée sur Spip2 avec le plugin « Publication Ouverte » me fait craindre les robots spammeurs qui créent des articles fantômes et vides. Je souhaiterait donc les bloquer. Y-a-t-il moyen d’ajouter une captcha ou autre contrôle antirobots quelque part dans le formulaire d’édition/création d’article ?

    • Je complète ma question tant qu’à faire...
      En fait, seul un rédacteur identifié peut proposer du contenu. Comment rendre ce formulaire accessible à tous, même non authentifiés ?

    Répondre à ce message

  • 4
    citoyen

    Bonjour et merci pour cette contrib,

    Je suis sous Spip 3 et je cherche comment depuis l’interface publique du site, créer un article qui aurait directement par default le statut publié en ligne sans devoir moi même venir changer le statut des nouveaux articles proposés. Un genre de modération à posteriori des articles ?!

    Je ne sais pas ci cela est possible et je n’ai pas trouvé de contrib ou plugin à ce sujet.

    Merci d’avance.

    • Dans la partie de l’article qui parle de

      <input type='hidden' id='statut' name='statut' value='prop' />

      remplacer le

      value='prop'

      par

      value='publie'
    • citoyen

      Génial, un grand merci pour cette réponse rapide !

    • la solution ne fonctionne pas si le auteur es un redacteur !!!

      I tried with no success :

      autoriser_exception('instituer', 'article', $id_article,  true);
      $myresult = formulaires_editer_objet_traiter('article'...);

      How can I use la fonction autoriser_exception() to give the correct permission ?

    • ok
      this is the answer :

      autoriser_exception('publierdans','rubrique',$id_rubrique);
      $myresult = formulaires_editer_objet_traiter('article'...);

    Répondre à ce message

  • citoyen

    Pour mettre un article à la poubelle :

    Dans editer_article.html :

    [(#REM) modifier le statut de l’article]

    Répondre à ce message

  • 1

    Bonjour,
    Est-il possible pour les auteurs de supprimer leur propre article depuis le site public ?
    Merci !

    • Bonjour,
      Je ne sais pas si tu y est arrivé.... mais oui c’est possible je l’ai fais en faisant la même démarche que pour créer un article avec auteur_supprime_article tu suis exactement la démarche décrite dans cette contrib, ensuite dans le formulaire supprime_article que tu as créer, tu ajoutes la ligne suivante avant le bouton enregistré (auquel tu auras changé la valeur à supprimer) en fin de code :

      le rédacteur pourra mettre son article à la poubelle sans ton intervention, il te faut le plugin autorite pour autoriser les auteurs à modifier leurs articles

    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