Différences entre versions de « Plugin SPIP »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
m
Ligne 2 : Ligne 2 :
  
 
* [http://www.spip.net/rubrique205.html Le développement de SPIP et ses outils]: documentation officielle
 
* [http://www.spip.net/rubrique205.html Le développement de SPIP et ses outils]: documentation officielle
 +
* [http://www.spip-contrib.net/Developper-avec-SPIP Développer avec SPIP]: une liste de liens sur SPIP-Contrib; noter que certaines fonctionnalités des plugins sont des reprises de l'existant < v1.9, par exemple la définition de balises personnalisées.
 
* [http://doc.spip.org/@Plugin-xml Plugin.xml]: référence de la syntaxe
 
* [http://doc.spip.org/@Plugin-xml Plugin.xml]: référence de la syntaxe
* [http://doc.spip.org/@Les-points-d-entree-pipelines Les points d’entrée (pipelines)]: les ''hooks'', quoi
+
* [http://www.spip.us/@ Glossaire]: un index de tous les boucles/balises/filtres et autres mots-clefs de SPIP
* Formulaires:
+
 
** [http://www.spip.net/fr_article3796.html Formulaires CVT par l’exemple]
+
= Le SPIP_PATH =
** [http://www.spip.net/fr_article3800.html Les formulaires CVT de SPIP 2.0]
+
 
* [http://www.spip-contrib.net/Developper-avec-SPIP Développer avec SPIP]: une liste de liens sur SPIP-Contrib; noter que certaines fonctionnalités des plugins sont des reprises de l'existant < v1.9, par exemple la définition de balises personnalisées.
+
Il s'agit du répertoire de recherche de SPIP, pour les squelettes, mais aussi pour les fichiers PHP personnalisés, (définitions de balises, de pages privées, etc.), les modèles, etc.
* Le "SPIP_PATH", pour chercher les squelettes, dans l'ordre: <code>squelettes, (racine), squelettes-dist, prive, ecrire</code> (cf. <code>ecrire/inc/utils.php:_chemin()</code>)
+
 
 +
Dans l'ordre: la variable globale <code>$mes_squelettes</code> (chemins séparés par ':'), puis <code>squelettes, plugins/mon_plugin-1, plugins/mon_plugin-2, ..., (racine), squelettes-dist, prive, ecrire</code>
 +
 
 +
Références:
 +
* <code>ecrire/inc/utils.php:_chemin()</code>
 +
* [http://www.spip.us/fr_article3347.html Où placer les fichiers des squelettes]
  
 
= API =
 
= API =
  
 
http://doc.spip.org/ a pour but de documentation l'API de SPIP, une page par fonction, modifiable par tous.
 
http://doc.spip.org/ a pour but de documentation l'API de SPIP, une page par fonction, modifiable par tous.
En pratique, peu de fonctions sont documentées. Qui plus est, cette documentation étant sensées être la documentation officielle, le code source se contente d'y faire référence, sans détailler ces fonctions - donc il n'y a pas plus d'informations dans les fichiers .php de <code>ecrire/</code>.
+
En pratique, peu de fonctions sont documentées. Qui plus est, cette documentation étant la documentation officielle, le code source se contente d'y faire référence, souvent sans plus de détails.
  
La meilleure source de documentation reste la lecture directe du code source, et l'étude d'autres plugins.
+
La meilleure source de documentation reste la lecture du code source, et l'étude d'autres plugins.
  
 
= Passer de 1.9 à 2.0 =
 
= Passer de 1.9 à 2.0 =
Ligne 27 : Ligne 33 :
 
* Créer <code>plugins/mon_plugin-0.1/exec/monprefixe_mapage.php</code>
 
* Créer <code>plugins/mon_plugin-0.1/exec/monprefixe_mapage.php</code>
 
* Y définir <code>exec_monprefixe_mapage()</code> (ou <code>exec_monprefixe_mapage_dist()</code>)
 
* Y définir <code>exec_monprefixe_mapage()</code> (ou <code>exec_monprefixe_mapage_dist()</code>)
 +
* On y accède via http://www.monsite.tld/ecrire/?exec=prefixe_index
  
 
Contenu du fichier:
 
Contenu du fichier:
Ligne 74 : Ligne 81 :
 
Pour le contenu, on peut soit l'écrire avec des <code>echo</code>, soit faire appel à un squelette dans <code>plugins/mon_plugin-0.1/prive/mon_squelette.html</code>:
 
Pour le contenu, on peut soit l'écrire avec des <code>echo</code>, soit faire appel à un squelette dans <code>plugins/mon_plugin-0.1/prive/mon_squelette.html</code>:
 
  recuperer_fond('prive/mon_squelette', $_GET);
 
  recuperer_fond('prive/mon_squelette', $_GET);
 +
 +
Note: le préfixe n'est techniquement pas obligatoire pour le nom de la page, mais c'est une bonne habitude à prendre pour éviter les conflits avec d'autres plugins.
  
 
Exemples: <code>ecrire/exec/sites_tous.php</code>, et <code>acces_restreint_3_0/exec/acces_restreint</code> dans le plugin "Accès restreint".
 
Exemples: <code>ecrire/exec/sites_tous.php</code>, et <code>acces_restreint_3_0/exec/acces_restreint</code> dans le plugin "Accès restreint".
Ligne 110 : Ligne 119 :
 
== Formulaire ==
 
== Formulaire ==
  
Paramètre <code>formulaire_action</code>
+
Techniquement: traitement déclenché par le paramètre <code>formulaire_action</code>
  
On peut s'appuyer sur les outils "CVT" (charger/vérifier/traiter) de SPIP. Cette approche crée les formulaires statiques, un par squelette (pas prévu pour la génération dynamique).
+
On peut s'appuyer sur les outils "CVT" (charger/vérifier/traiter) de SPIP. Cette approche crée les formulaires statiques, un par squelette (pas prévu pour la génération dynamique):
 +
* [http://www.spip.net/fr_article3796.html Formulaires CVT par l’exemple]
 +
* [http://www.spip.net/fr_article3800.html Les formulaires CVT de SPIP 2.0]
  
 
TODO
 
TODO
  
 
== Pipeline ==
 
== Pipeline ==
 +
 +
[http://doc.spip.org/@Les-points-d-entree-pipelines Les points d’entrée (pipelines)]: les ''hooks'', quoi; une description partielle
  
 
La listes des hooks SPIP est dans <code>ecrire/inc_version.php</code>. D'autres plugins peuvent en rajouter pour leurs besoins propres (ex: Forms&Tables).
 
La listes des hooks SPIP est dans <code>ecrire/inc_version.php</code>. D'autres plugins peuvent en rajouter pour leurs besoins propres (ex: Forms&Tables).
  
 
TODO
 
TODO

Version du 15 avril 2009 à 15:05

Introduction

Le SPIP_PATH

Il s'agit du répertoire de recherche de SPIP, pour les squelettes, mais aussi pour les fichiers PHP personnalisés, (définitions de balises, de pages privées, etc.), les modèles, etc.

Dans l'ordre: la variable globale $mes_squelettes (chemins séparés par ':'), puis squelettes, plugins/mon_plugin-1, plugins/mon_plugin-2, ..., (racine), squelettes-dist, prive, ecrire

Références:

API

http://doc.spip.org/ a pour but de documentation l'API de SPIP, une page par fonction, modifiable par tous. En pratique, peu de fonctions sont documentées. Qui plus est, cette documentation étant la documentation officielle, le code source se contente d'y faire référence, souvent sans plus de détails.

La meilleure source de documentation reste la lecture du code source, et l'étude d'autres plugins.

Passer de 1.9 à 2.0

Certaines fonctions ont changé. Pour convertir le code de votre plugin, une bonne source d'information est ecrire/inc/vieilles_defs.php qui définit des anciennes fonctions avec la nouvelle API 2.0.

Insérer une nouvelle page admin

  • Définir le préfixe de votre plugin (convention de nommage) dans plugin.xml:
<prefix>monprefixe</prefix>

Contenu du fichier:

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;

function exec_monprefixe_index()
{
  $commencer_page = charger_fonction('commencer_page', 'inc');
  echo $commencer_page("Titre (barre de titre du navigateur)");

  echo gros_titre("Titre (dans la page)", '<img src="logo.png" alt="" />', false);


  echo debut_grand_cadre(true);
  echo "Bandeau en haut";
  echo fin_grand_cadre(true);


  echo debut_gauche("ignored", true);
  echo "À gauche<br />";

  echo creer_colonne_droite("", true);
  echo "À droite si grand écran, à gauche sinon<br />";
  echo debut_boite_info(true);
  echo "Encadré";
  echo fin_boite_info(true);

  $res = icone_horizontale("Page 1", generer_url_ecrire("monprefixe_page1"),
			   "../"._DIR_PLUGIN_MONPREFIXE."fond.gif",
			   "../"._DIR_PLUGIN_MONPREFIXE."page1.gif", false);
  echo bloc_des_raccourcis($res); // crée creer_colonne_droite si besoin


  echo debut_droite("ignored", true); // ferme creer_colonne_droite, si utilisé
  echo "Contenu, au milieu";


  echo fin_gauche();
  echo fin_page();
}

Les true et false qui se baladent partout permettent de dire qu'on s'occupe d'afficher le contenu, sans quoi SPIP affiche un avertissement. Il faut utiliser true ou false au cas par cas, selon la fonction, cela manque de cohérence.

Pour le contenu, on peut soit l'écrire avec des echo, soit faire appel à un squelette dans plugins/mon_plugin-0.1/prive/mon_squelette.html:

recuperer_fond('prive/mon_squelette', $_GET);

Note: le préfixe n'est techniquement pas obligatoire pour le nom de la page, mais c'est une bonne habitude à prendre pour éviter les conflits avec d'autres plugins.

Exemples: ecrire/exec/sites_tous.php, et acces_restreint_3_0/exec/acces_restreint dans le plugin "Accès restreint".

Traitement dans la partie publique

Diverses solutions possibles:

Balise dynamique

Ajoutez une balise dynamique à votre plugin. La balise affichera un formulaire avec pour cible la page courante, et on utilisera _request dans le code PHP pour effectuer le traitement. Exemple: #FORMULAIRE_ABONNEMENT dans SPIP-Listes, cf. spip-listes_1_9_3/balise/formulaire_abonnement.php.

Modèles

L'utilisation d'une syntaxe <modeleN> dans un article appelle le squelette modeles/modele.html avec un contexte id_modele=N. Ce squelette pourra inclure une balise correspondante, par exemple.

Cf. ecrire/inc/lien.php:traiter_modeles(...). Exemples: prive/modeles/img.html, plugins/forms_et_tables_1_9_1/modeles/form.html.

Boucles

On peut introduire des nouvelles boucles en déclarant des fonctions boucle_MABOUCLE_dist ou critere_MABOUCLE_moncritere_dist. Le plus simple est d'inclure ces déclarations dans un fichier <fonction> de plugin.xml (chargé à chaque recalcul).

Cf. ecrire/public/compiler.php:public_compiler_dist(...) et ecrire/public/criteres.php:calculter_criteres(...).

Exemples: ecrire/public/boucles.php, ecrire/public/criteres.php, forms_et_tables_1_9_1/public/forms_boucles.php, spip-bonux/public/spip_bonux_criteres.php.

Paramètre 'action'

Le fichier action/monprefixe_monaction.php sera exécuté; cependant ce n'est pas prévu pour afficher du contenu, seulement pour du traitement.

Squelette dédié

Utiliser le paramètre page= pour afficher un squelette de votre plugin, qui pourra contenir du PHP. L'inconvénient est le manque d'intégration dans le site public, puisque ce ne sera pas intégré dans les squelettes du webmestre.

Formulaire

Techniquement: traitement déclenché par le paramètre formulaire_action

On peut s'appuyer sur les outils "CVT" (charger/vérifier/traiter) de SPIP. Cette approche crée les formulaires statiques, un par squelette (pas prévu pour la génération dynamique):

TODO

Pipeline

Les points d’entrée (pipelines): les hooks, quoi; une description partielle

La listes des hooks SPIP est dans ecrire/inc_version.php. D'autres plugins peuvent en rajouter pour leurs besoins propres (ex: Forms&Tables).

TODO