[ar] [ca] [cpf] [de] [en] [es] [fr] [it]

Ce forum d’entraide est recommandé pour les utilisateurs et utilisatrices occasionnels de SPIP (Système de publication pour l’Internet). Avant de poser une question, faites une recherche sur ce site, consultez les liens utiles. Si vous ne trouvez pas de réponse, postez votre message dans la rubrique appropriée, avec un titre explicite.

Sujets : 23973 Sujets résolus :  39 %

75 visiteurs en ce moment


Accueil > Forums de discussion >  Création de squelettes > #FORMULAIRE_EDITER_ARTICLE : créer un article avec le statut "publie"

#FORMULAIRE_EDITER_ARTICLE : créer un article avec le statut "publie" depuis l'espace public Résolu

par Valéry - 7 avril 2009 09:31 - Réponse(s) : 23

Bonjour,

Je cherche à autoriser les utilisateurs de mon site à publier directement un article sans passer par l’espace privé (il s’agit d’un intranet).

La balise #FORMULAIRE_EDITER_ARTICLE permet d’afficher le formulaire mais l’article créé a le statut "en cours de rédaction" et non pas le statut "publié".

Par ailleurs il ne reprends pas la configuration et affiche tous les champs.

Quelqu’un peut-il me préciser s’il vous plaît les points suivants :

1) Existe-t-il un paramètre qui puisse passer directement en statut "publie" les articles créés ?

2) Comment retrouver la configuration en appelant ce formulaire ?

Je n’ai pas trouvé de documentation ou de tutoriel sur ces points.


  • Bonjour Valéry,

    Depuis le temps tu as du trouver la solution ! C’est vrai que la documentation sur ce sujet reste maigre. J’ai beaucoup de mal à faire ce que je voudrais aussi.

    Voila mon code :

    #FORMULAIRE_EDITER_ARTICLE{nouveau}

    Ce que je voudrais c’est personnaliser le formulaire editer_article. J’ai donc ajouter deux fichiers editer_article-2.html et editer_article-2.php dans le dossier squelettes/formulaire. (en rapport à ma rubrique 2)

    Ensuite, je modifie le fichier editer_article-2.html en modifiant oui au lieu de non et sa m’ajoute les autres inputs.

    De plus en bas du fichier editer_article.html on peu ajouter des champ au formulaire repère extra dans le code.

    Maintenant je cherche à insérer un champ upload d’images !

    Si tu as une info, une doc, un article, je le prends !!

    squirrel :D


  • Bonjour

    pour pouvoir ajouter ou modifier un document existant à un article, essaye cela :

    #FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE,[(#ID_ARTICLE|afficher_documents_colonne)]}

    pour un article au statut publié, il y a cette info sur spip user
    message du 06/01/2009 11:09

    ou il montre comment mettre un article en "prop"

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

    a voir en mettant ’publie’ ce que cela donne !!

    Je fais des tests moi aussi dans ce sens la :-)

    jmica


  • Bonjour et merci pour vos contributions !

    Valery, pour le problème de configuration qui n’est pas passé quand tu appelle un formulaire perso (dans squelette/forumulaires), il faut modifier les noms de différentes fonctions présentes dans le php de ton formulaire.

    Par exemple si tu es parti de editer_article.php, modifié en editer_article_pub.php pour éviter de surcharger celui de la partie privée, il faut chercher-remplacer tous les "editer_article" par "editer_article_pub" dans ton .php .
    Chez moi après avoir fait ces modifs (10 occurences) les configurations du site sont bien prises en compte à l’affichage du formulaire personnalisé.

    Bon spipage chers spipeurs !


  • Bonjour,

    La piste du formulaire_editer_article perso est une solution correcte.

    #SET{#ID_ARTICLE}
    #FORMULAIRE_EDITER_ARTICLE_PERSO{oui,'id_rubrique','http://www.monsite.com','','',''}

    Le problème survient quand on veut définir à ce formulaire un upload de photo à joindre au nouveau article que propose le visiteur.

    [(#REM)Cette balise ajoute le formulaire d edition d article]

    #SET{#ID_ARTICLE}
    #FORMULAIRE_EDITER_ARTICLE_PERSO{oui,'id_rubrique','http://www.monsite.com','','',''}

    [(#REM)Cette balise ajoute un upload d'image]
    [(#ID_ARTICLE{new}|afficher_documents_colonne)]

    Mais le résultat est une vrai galère puisque les images se télécharge dans l’article en question est non au nouvelle article hum !

    Conclusion, il faut faire un plugin pour réaliser un tel formulaire pour un rendu public adapter.

    Je sais que Cuisine libre de Romy Tetue éffectue se genre action.

    Donc c’est possible !

    Voilà ou j’en suis de mon côté :-(

    squirrel :D


  • j’ai chercher .. j’ai pas pu m’en sortir ..

    Solution par ce plugin peut être ? :

    http://www.spip-contrib.net/cisf-plugin-saisie-facile


  • Salut,

    Histoire d’aller encore plus loin...
    Vous auriez une idée pour attribuer un mots cléf automatiquement.....
    Parce que comme le form pour les mots clef se fait après... je buche u n peu là...

    Merci d’avance


  • Salut,
    je ressort ce vieux post, car même s’il est marqué "résolu" j’ai un peu de mal à voir comment faire pour que les articles proposés dans l’espace public soient publiés sans besoin de validation par un modérateur.
    En fait, en ce qui me concerne, c’est pour publier des événements, mais je pense qu’un bout de code (en m’indiquant l’emplacement où le mettre) me suffirait.

    J’ai bien vu qu’un post propose ça : ""
    mais je ne sais pas quoi en faire.

    Merci d’avance si vous avez un début de solution.


  • Bonjour,

    Pour les articles, cette ligne doit être ajoutée au formulaire (prive/formulaires/truc.html pour le #FORMULAIRE_TRUC), disons avant le "input submit" :

    <input type='hidden' name='statut' value='publie' />

    N’oubliez pas de faire plutôt des surcharges (dans l’exemple précédent : copier l’original vers squelettes/formulaires/truc.html et n’éditer que la copie).

    Pour appliquer ça aux événements, je suppose que vous trouverez une structure à peu près similaire dans le répertoire du plugin. Là encore il est possible de faire une surcharge dans le dossier des squelettes, pour éviter de tout perdre avec les mises à jour.


  • Merci, ça fonctionne effectivement.
    Encore quelques bugs toutefois, du genre que quand les événements sont entrés de cette façon là (tous les événements sont rattachés au même article), et qu’ensuite je clique sur la date de l’événement dans le calendrier, ça me liste plusieurs événements, pas tous à la même date, car ça prend les autres événements créés précédemment par le formulaire de l’espace public.

    Mon code pour le formulaire de création de l’événement c’est ça :

    <BOUCLE_event(spip_evenements){id_evenement}>
    <BOUCLE_A(ARTICLES){id_article}>
    <div class='cadre-formulaire-editer'>
    <div class="entete-formulaire">
       #ENV**{icone_retour}
     
    [<p>(#ENV{id_evenement}|intval|?{<:agenda:titre_cadre_modifier_evenement:>,<:agenda:titre_cadre_ajouter_evenement:>})</p>]
       [<h1>(#ENV{id_evenement}|intval|?{##ENV{id_evenement}})</h1>]
    </div>
    #FORMULAIRE_EDITER_EVENEMENT{#ENV{id_evenement},#ENV{id_article},
    #EVAL{$GLOBALS[_SERVER][HTTP_REFERER]}, [(#REM) La page d'où on vient]
    #ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
    </div>
    </BOUCLE_A>
    </BOUCLE_event>

    [(#REM) pas d'evenement, on le rajoute donc il faut trouver un article
    on prend celui du premier evenement de la base]
    <BOUCLE_e2(spip_evenements){tout}{par date_debut}{0,1}>
    <div class='cadre-formulaire-editer'>
    <div class="entete-formulaire">
       #ENV**{icone_retour}
       <p><:agenda:titre_cadre_ajouter_evenement:></p>
    </div>
    #FORMULAIRE_EDITER_EVENEMENT{0,#ID_ARTICLE,#EVAL{$GLOBALS[_SERVER][HTTP_REFERER]},#ENV{lier_trad},#ENV{config_fonc},#ENV{row}}
    </div>
    </BOUCLE_e2>

    Et mon code pour cliquer sur le calendrier, c’est ça :

    #SET{date_debut,#DATE|affdate{Y-m-01}}
    #CALENDRIER_MINI{#GET{date_debut},date_debut,#URL_PAGE{agenda},#URL_PAGE{calendrier_mini_event.json}}


    <B_ev>
           
            [<h2>(#TOTAL_BOUCLE|singulier_ou_pluriel{agenda:info_un_evenement,agenda:info_nombre_evenements})&nbsp;<:le:>&nbsp;[(#ENV{date_debut,#ENV{affdate}}|affdate)]</h2>]
            <ul class="liste-items evenements">
            <BOUCLE_ev(EVENEMENTS){!evenement_passe #ENV{date_debut,#ENV{date}}}{!evenement_a_venir #ENV{date_debut,#ENV{date}}|agenda_moisdecal{1,'Y-m-d H:i:00'}}{par date_debut}{id_article?}{id_rubrique?}{id_mot?}{id_evenement_source?}>
                    <li class="item">
                            #MODELE{evenement_vevent}
                    </li>
            </BOUCLE_ev>
            </ul>
    </B_ev>
    <h3><:agenda:info_aucun_evenement:></h3>
    <//B_ev>

    Je ne comprend pas trop.
    Je vais aller dormir.


  • Il semble bien qu’en remplaçant le filtre
    agenda_moisdecal
    par agenda_jourdecal
    ça fonctionne comme je veux.


  • Je me répond à nouveau parce que en fait, avec ce nouveau filtre agenda_jourdecal, j’ai les événements du lendemain qui s’affichent, s’ils n’ont pas un horaire défini (si ils sont "toute la journée"). Or je ne voudrais vraiment que ceux du jour. Mais je ne trouve pas de page qui liste ces filtres.


  • je déterre ce post pour y apporter une réponse définitive (en tout cas ça fonctionne parfaitement pour moi).

    Ma solution passe par l’utilisation du pipeline pre_insertion au travers du fichier config/mes_options.php (cf. Déclaration hors plugin)

    dans config/mes_options.php, il faut ajouter les lignes suivantes :

    // Utilisation du pipeline pre_insertion
    $GLOBALS['spip_pipeline']['pre_insertion'] .= "|ma_fonction_pre_insertion";

    // Les nouveaux articles seront automatiquement publiés
    function ma_fonction_pre_insertion($flux){
     if ($flux['args']['table']=='spip_articles'){
       $flux['data']['statut'] = 'publie';
     }
     return $flux;
    }

    On peut naturellement personnaliser la fonction ma_fonction_pre_insertion pour que seuls les articles de la rubrique X soit autopubliés ce qui donne :

    // Les nouveaux articles de la rubrique X seront automatiquement publiés
    function ma_fonction_pre_insertion($flux){
     if ($flux['args']['table']=='spip_articles'
       && $flux['data']['id_rubrique'] == X )){
       $flux['data']['statut'] = 'publie';
     }
     return $flux;
    }

    IMPORTANT : Pour que ces modifications soient bien prisent en compte, effacer le fichier tmp/cache/charger_pipelines.php qui sera régénéré derriere avec vos modifs

    Bon spip :o)


  • Merci pour ce retour : dans quelle version a-t-il été testé svp ?


  • spip 3.0.7 mais je pense fonctionne aussi sous spip 2


  • Merci beaucoup pour ce bout de code.
    (il y a une parenthèse à enlever après le X)

    Cordialement.
    Henri


  • Merci beaucoup Frank,
    ça permet d’avancer !

    SPIP 3.0.17


  • de rien laëtitia :),

    j’ajoute que j’ai consacré un chapitre à cette question dans le carnet spip, astuce 19 : Auto publier les articles d’une rubrique par l’intermédiaire d’un pipeline (Utilisation hors plugin)

    http://contrib.spip.net/Astuces-longues-pour-SPIP


  • Super le script mis dans mes_fontions.php fonctionne à merveille.
    Les articles ont le bien le status "publié".

    Cependant, les notifications par email d’un article publié par ce procédé ne fonctionnent pas ( j’ai bel et bien activé les notifications) .

    C’est un peu gênant pour moi de ne pas être averti par email de la publication d’un article...
    Y a t-il une solution ?

    Cordialement.


  • @sirom, je rencontrais le même problème que toi, aussi, j’ai rajouté ces deux lignes au script cité ci-dessus :

    1. $GLOBALS['spip_pipeline']['pre_insertion'] .= "|ma_fonction_pre_insertion";
    2. function ma_fonction_pre_insertion($flux){
    3. if ($flux['args']['table']=='spip_articles' && $flux['data']['id_rubrique'] == 1) {
    4. $flux['data']['statut'] = 'prop';
    5. $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
    6. $envoyer_mail($GLOBALS['meta']['email_webmaster'], $sujet, $texte);
    7. }
    8. return $flux;
    9. return $envoyer_mail;
    10. }

    Télécharger


  • le pb, c’est que la rubrique reste en statut "prepa"
    et même si elle était en statut "publie", la supression du dernier art de la rub, remet en prepa la rub

    donc, il faut penser à mettre le statut de la rub en "publie" en même temps que l’article ;

    mais comment faire ?


  • un truc du genre :

    1. $GLOBALS['spip_pipeline']['pre_insertion'] .= "|ma_fonction_pre_insertion";
    2. function ma_fonction_pre_insertion($flux){
    3. if ($flux['args']['table']=='spip_articles' && $flux['data']['id_rubrique'] == 1) {
    4. $rubrique = sql_fetsel("id_rubrique, statut", "spip_rubriques", "id_rubrique=".intval($flux['data']['id_rubrique']));
    5.  
    6. if (isset($rubrique) AND $rubrique['statut'] == 'prepa')
    7. {
    8. sql_updateq('spip_rubriques', array('statut' => 'publie'), 'id_rubrique=' . intval($rubrique['id_rubrique']));
    9. }
    10.  
    11. $flux['data']['statut'] = 'prop';
    12. }
    13. return $flux;
    14. return $envoyer_mail;
    15. }

    Télécharger


  • Non,

    Amha il faut utiliser le pipeline post_edition pour avoir l’identifiant de l’article apres son insertion en bdd et utiliser la fonction

    1. article_instituer($id_article, array('statut'=>'publie','id_parent'=>$id_rubrique), true)

    Le 3eme paramatere ’true’ sert justement à calculer les statuts de la branche de rubriques

    https://core.spip.net/projects/spip/repository/entry/spip/ecrire/action/editer_article.php#L278

    voir également API editer_objet


  • Merci
    ton "truc" doit bien marcher et est très pointu...
    mais j’ai préféré mettre dans le formulaire le statut à "publie"
    rapide et simple

    Ah c’est beau de bien maîtriser spip, tu peux tout faire

    je garde ces lignes qui pourraient me servir un jour ou pour comprendre d’autres choses


  •  


Répondre à la question

« #FORMULAIRE_EDITER_ARTICLE : créer un article avec le statut "publie" depuis l'espace public »

Mots-clés

Vous pouvez étiqueter cette page de forum avec les mots-clés qui vous semblent les plus appropriés ; ils permettront aux prochains visiteurs du site de mieux se repérer :


Installation, mise à jour

Utilisation de l’espace privé

Administration, gestion, configuration du site

Créer ses squelettes

Qui êtes-vous ?