Construire un plugin : comment ajouter une boite dans exec=articles ?

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page « articles » dans l’espace privé.
J’ai ouvert le capot de Barre_typo pour trouver un exemple mais je n’ai pas tout compris…
Quelqu’un saurait m’éclairer ?

merci :slight_smile:

Stéphanie

stef dn a écrit :

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page "articles" dans l'espace privé.
J'ai ouvert le capot de Barre_typo pour trouver un exemple mais je n'ai pas tout compris...
Quelqu'un saurait m'éclairer ?

pipeline afficher_gauche ou afficher_droite :
http://doc.spip.org/Les-points-d-entree-pipelines

pour un plugin toto :
<pipeline>
  <nom>affiche_droite</nom>
  <action>affiche_droite</action>
  <inclure>toto_pipeline.php</inclure>
</pipeline>

et dans toto_pipeline.php par exemple :
function Forms_affiche_droite($flux){
    if (_request('exec')=='articles_edit'){
      include_spip('inc/toto');
      $flux['data'] .= toto_afficher_insertion($flux['args']['id_article']);
    }
    return $flux;
  }

avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

@+

stef dn a écrit :

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page "articles" dans l'espace privé.
J'ai ouvert le capot de Barre_typo pour trouver un exemple mais je n'ai pas tout compris...
Quelqu'un saurait m'éclairer ?

pipeline afficher_gauche ou afficher_droite :
http://doc.spip.org/Les-points-d-entree-pipelines

pour un plugin toto :
<pipeline>
  <nom>affiche_droite</nom>
  <action>affiche_droite</action>
  <inclure>toto_pipeline.php</inclure>
</pipeline>

et dans toto_pipeline.php par exemple :
function toto_affiche_droite($flux){
    if (_request('exec')=='articles_edit'){
      include_spip('inc/toto');
      $flux['data'] .= toto_afficher_insertion($flux['args']['id_article']);
    }
    return $flux;
  }

avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

@+

Stephane a écrit :

stef dn a écrit :

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page « articles » dans l’espace privé.
J’ai ouvert le capot de Barre_typo pour trouver un exemple mais je n’ai pas tout compris…
Quelqu’un saurait m’éclairer ?

pipeline afficher_gauche ou afficher_droite :
pour un plugin toto : affiche_droite affiche_droite toto_pipeline.php et dans toto_pipeline.php par exemple : function Forms_affiche_droite($flux){ if (_request(‹ exec ›)==‹ articles_edit ›){ include_spip(‹ inc/toto ›); $flux[‹ data ›] .= toto_afficher_insertion($flux[‹ args ›][‹ id_article ›]); } return $flux; } avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

merci !
le $flux, c’est la lux ;o)

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page « articles » dans l’espace privé.

pipeline afficher_gauche ou afficher_droite :
pour un plugin toto : affiche_droite affiche_droite toto_pipeline.php et dans toto_pipeline.php par exemple : function Forms_affiche_droite($flux){ if (_request(‹ exec ›)==‹ articles_edit ›){ include_spip(‹ inc/toto ›); $flux[‹ data ›] .= toto_afficher_insertion($flux[‹ args ›][‹ id_article ›]); } return $flux; } avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

si je comprends bien l’article de la doc.spip,
le nom défini du pipeline dans plugin.xml, indique à spip après quel moment faire l’action ?
parce que tout fonctionne « correctement » avec ce code mais le cartouche est affiché en tête de page, avant le menu principal… j’ai zappé un truc ou bien ?
ou faut-il ajouter un test (mais lequel ?) après
if (_request(‹ exec ›)==‹ articles ›)
pour indiquer où placer le cartouche ?

stef dn a écrit :

si je comprends bien l'article de la doc.spip,
le nom défini du pipeline <nom></nom> dans plugin.xml, indique à spip *après* quel moment faire l'action ?

non, c'est un pipeline, donc un appel à une fonction dans le code de spip.

parce que tout fonctionne "correctement" avec ce code mais le cartouche est affiché en tête de page, avant le menu principal...

houla, probleme de div peut etre ?
ou de css ?

enregistre la page avec et sans ton pipeline, et fait un diff entre les 2, en general, c'est le plus simple pour comprendre.

j'ai zappé un truc ou bien ?
ou faut-il ajouter un test (mais lequel ?) après
    if (_request('exec')=='articles')

non, en general, on se contente à ce niveau de trier si on affiche ou non

tu as quoi comme code exactement ? et quelle declarations dans plugin.xml ?

@++

parce que tout fonctionne « correctement » avec ce code mais le cartouche est affiché en tête de page, avant le menu principal…

houla, probleme de div peut etre ?
ou de css ?

enregistre la page avec et sans ton pipeline, et fait un diff entre les 2, en general, c’est le plus simple pour comprendre.

aucune idée… le code généré est écrit avant la page elle-même, le doc html commence par le cartouche et ensuite
je ne connais pas de plugin qui insère des éléments dans le pages de spip. En existe-t-il pour exemple ?

j’ai zappé un truc ou bien ?
ou faut-il ajouter un test (mais lequel ?) après
if (_request(‹ exec ›)==‹ articles ›)

non, en general, on se contente à ce niveau de trier si on affiche ou non

tu as quoi comme code exactement ? et quelle declarations dans plugin.xml ?

Dans plugin.xml :

ajouter_boutons ajouter_boutons exportcsv_pipe.php affiche_gauche affiche_gauche exportcsv_pipe.php header_prive exportcsv_pipe.php insert_head insert_head exportcsv_pipe.php

dans exportcsv_pipe.php

function exportcsv_ajouter_boutons($boutons_admin) {

return $boutons_admin;
}
// css privé
function exportcsv_header_prive($flux) {
$flux.= « \n ».‹  ›.« \n »;
return $flux;
}

function exportcsv_affiche_gauche($flux) {
if (_request(‹ exec ›) == ‹ articles ›) {
include_spip(‹ inc/exportcsv_petitions ›);
$flux[‹ data ›] .= exportcsv_afficher_petition($flux[‹ args ›][‹ id_article ›]);
return $flux;
}
}

Dans inc/exportcsv_petitions.php

function exportcsv_afficher_petition($id_article) {

debut_cadre_relief(« petition-24.gif »);
echo ‹ 

‹ ._T(‹ exportcsv:pet_titre ›). › :

 ›;
echo ‹ 

 ›.exportcsv_signatures($id_article) .‹ 

 ›;
fin_cadre_relief();
}

function exportcsv_signatures($id_article) {
$sql = spip_query(…);
}

stef dn a écrit :

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page « articles » dans l’espace privé.

pipeline afficher_gauche ou afficher_droite :
pour un plugin toto : affiche_droite affiche_droite toto_pipeline.php et dans toto_pipeline.php par exemple : function Forms_affiche_droite($flux){ if (_request(‹ exec ›)==‹ articles_edit ›){ include_spip(‹ inc/toto ›); $flux[‹ data ›] .= toto_afficher_insertion($flux[‹ args ›][‹ id_article ›]); } return $flux; } avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

tout fonctionne « correctement » avec ce code mais le cartouche est affiché en tête de page, avant le menu principal…

bonjour,
j’ai trouvé le problème : la fonction appelée par le point d’entrée (toto_afficher_insertion), faisait afficher directement le code à insérer (echo). Avec l’enregistrement du code dans une variable retournée par la fonction, tout est rentré dans l’ordre.

Par contre, si je change la condition
if (_request(‹ exec ›)==‹ articles ›) par if (_request(‹ exec ›)==‹ controle_petition ›)
le code retourné n’est pas inséré dans la page…
y a-t-il une explication logique ?

merci en tout cas pour l’exemple, dès que j’ai 5mn je reprends ça dans doc.spip !

stef dn a écrit :

stef dn a écrit :

Bonjour,
je cherche comment insérer via un plugin, un cadre_relief() ou boite_info() à gauche de la page « articles » dans l’espace privé.

pipeline afficher_gauche ou afficher_droite :
pour un plugin toto : affiche_droite affiche_droite toto_pipeline.php et dans toto_pipeline.php par exemple : function Forms_affiche_droite($flux){ if (_request(‹ exec ›)==‹ articles_edit ›){ include_spip(‹ inc/toto ›); $flux[‹ data ›] .= toto_afficher_insertion($flux[‹ args ›][‹ id_article ›]); } return $flux; } avec ta fonction toto_afficher_insertion($id_article) dans inc/toto.php

tout fonctionne « correctement » avec ce code mais le cartouche est affiché en tête de page, avant le menu principal…

bonjour,
j’ai trouvé le problème : la fonction appelée par le point d’entrée (toto_afficher_insertion), faisait afficher directement le code à insérer (echo). Avec l’enregistrement du code dans une variable retournée par la fonction, tout est rentré dans l’ordre.

Par contre, si je change la condition
if (_request(‹ exec ›)==‹ articles ›) par if (_request(‹ exec ›)==‹ controle_petition ›)
le code retourné n’est pas inséré dans la page…
y a-t-il une explication logique ?

oui :o)
la recherche de pipeline n’est pas implémentée dans exec/controle_petition.php
il faut modifier le code de spip (aarh! j’aime pas ça) dans ce fichier, après :
echo $commencer_page(_T(‹ titre_page_controle_petition ›), « forum », « suivi-petition »);
debut_gauche();

ajouter :
echo pipeline(‹ affiche_gauche ›, array(‹ args ›=>array(‹ exec ›=>‹ controle_petition ›,‹ id_article ›=>$id_article),‹ data ›=>‹  ›));

Stephane a écrit :

je ne sais pas pourquoi, mon message n’apparait pas sur la liste… je te fais donc suivre ca en direct

stef dn a écrit :

Par contre, si je change la condition
if (_request(‹ exec ›)==‹ articles ›) par if (_request(‹ exec ›)==‹ controle_petition ›)
le code retourné n’est pas inséré dans la page…
y a-t-il une explication logique ?

il manque l’appel au pipeline.
ajoute une copie de /ecrire/exec/controle_petition.php dans ton plugin
(dans /plugins/toto/exec/) puis remplace debut_droite(); par :
echo
pipeline(‹ affiche_gauche ›,array(‹ args ›=>array(‹ exec ›=>‹ controle_petition ›,
‹ type ›=>$type),‹ data ›=>‹  ›));
creer_colonne_droite();
echo
pipeline(‹ affiche_droite ›,array(‹ args ›=>array(‹ exec ›=>‹ controle_petition ›,
‹ type ›=>$type),‹ data ›=>‹  ›));

debut_droite();
echo
pipeline(‹ affiche_milieu ›,array(‹ args ›=>array(‹ exec ›=>‹ controle_petition ›,
‹ type ›=>$type),‹ data ›=>‹  ›));

mais ca, c’est pour la 1.9.2, pour la 2.0, le fichier a changé, il
faudrait ajouter directement les pipeline dans spip, c’est plus logique.

@++

merci :slight_smile: c’est plus « propre » que ma solution.
c’est vrai qu’à priori, si on peut ajouter des éléments dans certaines pages privées pourquoi pas dans toutes ?

a+
Stéphanie