Creazione di un Plug-in

La scrittura di plugins è per me soltanto un mezzo per scoprire le nuove funzionalità di Spip dalla sua versione 1.9.
Esistono già diversi plugins certamente più perfomanti che fanno ciò che i miei plugins propongono.
Al momento stabilito, mi dedicherò a plugins sviluppati sulla « zona » e che hanno per vocazione di essere arricchiti in modo collettivo.

Feedback dell’esperienza di creazione di un plugin.

Vedere in linea : http://spip.jermer.fr

Nel settembre scorso, mi sono lanciato nella creazione di un plugin. Poiché avevo appena provato un blog proposto da mio host ed azionato da wordpress, mi sono detto che sarebbe stato interessante avere uno strumento di istallazione di temi, un po’ come quello proposto da detto blog.
(A volte è più difficile definire le necessità che sviluppare il codice)

  1. Primi passi
  2. il file plugin.xml
  3. file utilizzato nel plugin admin_themes & modelli di spip
  4. inserire un bottone
  5. inserire unghie
  6. conclusione

Primi passi


Trovare documentazione sulla creazione di plugins
-  gli esempi/spiegazioni sulla creazione di plugins sono da ricercare su :
-  http://www.spip-contrib.net/-Tutoriaux-pour-Plugins-
-  http://www.spip-contrib.net/SPIP-1-9-Les-Plugin
-  http://www.spip.net/fr_article3448.html
-  http://www.spip.net/fr_article3458.html
Ormai è possibile trovare altri link.

Un intervento di F. Ducas sullo stesso argomento
su Spip-Dev del 13 settembre 2006 mi ha realmente illuminato.

Lo metterò sul doc. dei plugins quando ho tempo.

Io sono partito di là : http://www.spip-contrib.net/SPIP-1-...

È vero che è un po’ contotrto come sistema.

In realtà, hai quattro modi di fare un plugin :


1. Ricrei nella tua cartella di plugin l’architettura originale di spip.

Ad esempio, puoi modificare (è un esempio) il file ecrire/exec/articles_forum.php e lo metti in plugins/TonPlugin/exec/articles_forum.php : quando il tuo plugin sarà attivato, è questo file che sarà letto e non il file indigeno di SPIP. Quando i progettisti di spip modificheranno il file ecrire/exec/articles_forum.php nella versione di sviluppo, dovrai adattare il tuo file plugins/TonPlugin/exec/articles_forum.php perché sia identico (a parte le tue modifiche) al nuovo file ecrire/exec/articles_forum.php : si tratta di « seguire la SVN » (inserire le modifiche apportate dalla versione di sviluppo di SPIP al tuo file di plugin, sempre che il tuo file - quello che porta lo stesso nome - sia stato modificato nella versione di sviluppo).


2. Utilizzare le pipeline

Riconosco di essermi rotto i denti sull’organizzazione delle pipeline. Ciò che ne ho compreso, è che tu definisci nel tuo file plugin.xml la pipeline che vuoi utilizzare, quindi metti in un file php, di cui hai dato il nome a plugin.xml per la pipeline in questione, la funzione che inserisce ciò che vuoi in una pipeline.
In breve, un’analogia sarà meglio...
una pipeline è come la posta pneumatica di qualche tempo fa : metti una lettera in un cilindro che infili in un tubo e quello arriva dall’altra parte del condotto, dove la tua posta arriva al destinatario.
Oppure : hai una porta d’entrata su un mondo parallelo che ti porta in un altro mondo quando tu la attraversi.
In altri termini, i progettisti hanno incluso nel codice di SPIP una variabile « machin » (una « pipeline » machin), e la variabile machin è definita esclusivamente nel tuo plugin e da nessuna parte : se un plugin definisce « machin », « machin » sarà inserito nel core di SPIP, lì dove compare il nome della variabile (da cui l’incompatibilità di due plugins definiscono se entrambe definiscono « machin ») ;
se nessun plugin definisce « machin », il codice di SPIP non è modificato. Ho compreso questo leggendo questo doc e provando inizialmente ad inserire una nuova icona nello spazio privato (un buon esempio per capire come funziona) : http://www.spip-contrib.net/SPIP-1-...


3. Utilizzare il tuo script del tutto nuovo e quasi indipendente dal codice di SPIP

Per far ciò, occorre comprendere come si aggiunge un bottone e come questo bottone genera una pagina (più o meno basta inserire un bottone per generare una nuova pagina - vedere il link dato al punto 2).
La pagina allora conterrà una funzione che viene eseguita, e a quel punto puoi fare quasi tutto ciò che vuoi. È così che i miei plugin « habillage » inseriscono una nuova unghia, e queste unghie eseguono uno script delle cartella exec del mio plugin.


4. indichi in plugin.xml il file di opzioni

(caricato ogni a chiamata, esegue quindi il suo contenuto a ogni chiamata.
-  attenzione : tutte le opzioni classiche di mes_options.php come la ridefinizione dell’img_pack non funzionano in questo file.

Il file plugin.xml

La presenza di questo file è indispensabile. Deve seguire una sintassi particolare.
I punti indispensabili :
Cf spip.net-http://www.spip.net/fr_art...

<plugin>
	<nom>Il mio primo plugin</nom> 
	<version>1.0</version>
	<prefix>demo</prefix> 
</plugin>

File utilizzato nel plugin admin_themes & modelli di spip

<plugin>

    <nom>Admin themes</nom>
    <auteur>Jacques Jermer </auteur>
	<version> Novembre 2006</version>
    <etat>test</etat>
    <description>Permet à l'administrateur de selectionner l'apparence du site a l'aide des themes<br />
	Activer ou desactiver/choisir son squelette.<br />
	Il est preferable d'activer le plugin desactiver_cache<br />
	Ajoute un bouton dans le sous menu Configuration<br />
	Affiche une copie d'ecran par theme/squelette, si image presente<br />
	sinon une image par defaut 		
	Pour la mise en place, lire le fichier alire.txt
	</description>
    <prefix>admin_themes</prefix>
	<options> <!-- fichier charge a chaque hit -->
		admin_themes_options.php
	</options>
	<pipeline>
		<nom>ajouter_boutons</nom>
		<action>ajouter_boutons</action>
		<inclure>admin_themes_boutons.php</inclure>
	</pipeline>
	<pipeline>
		<nom>ajouter_onglets</nom>
		<action>ajouter_onglets</action>
		<inclure>admin_themes_boutons.php</inclure>
	</pipeline>
    
</plugin>

Più dettagli - su doc.spip

inserire di un bottone

Nel file di creazione di un bottone avrete un codice simile a quest’ultimo :

$boutons_admin[{{’naviguer’}}]->sousmenu["gestion"]= new Bouton(
"../"._DIR_PLUGIN_GESTION."/img_pack/gestion_base-24.gif", // icone
_T("gestion:Gestion des tables") //titre
);

Bisogna decidere dove il nuovo bottone (sottomenù) apparirà. Nell’esempio dato, sarà aggiunto alle opzioni di « Redazione del Sito » grazie al valore `naviguer’ di $boutons_admin

Piccolo quadro riassuntivo :
-  $boutons_admin[’accueil’] => Pannello di controllo
-  $boutons_admin[’naviguer’] => Redazione del Sito
-  $boutons_admin[’forum’] => Forum
-  $boutons_admin[’auteurs’] => Autori
-  $boutons_admin[’statistiques_visites’] => Statistiche
-  $boutons_admin[’configuration’] => Configurazione
-  $boutons_admin[’aide_index’] => Aiuto
-  $boutons_admin[’visiter’] => Visita il sito

La creazione di bottoni o di unghie implica la creazione di una cartella /exec nella cartella del plugin, di un file php che contiene una funzione exec_prefix utilizzata dal plugin, nel nostro caso function exec_admin_themes().
In questa funzione sarà messo il codice d’esecuzione del nostro plugin, o almeno una parte del codice, e il resto in altri file che saranno inclusi o chiamati.

Inserire unghie

Per vedere un’unghia, basta premere su « configurazione » : si tratta ad esempio di ’contenuto del sito’, ’interattività ’, ’funzioni avanzate’.
Nel nostro esempio, l’unghia crea una pagina nella parte privata del sito per pubblicare una scelta di temi.
Un tema è composto almeno da due file :
-  plugin.xml
-  habillage.css

a questi possono aggiungersi
-  impression.css
-  immagini...

Da parte mia, aggiungo un file png, con lo stesso nome del tema, che mi permette di pubblicare un’etichetta che rappresenta il tema.
Se questo file è assente, un’immagine di default è pubblicata.

Così si può facilitare la selezione di un tema.

Estratto del codice :

function admin_themes_ajouter_onglets($flux) {
  if($flux['args'] == 'configuration')
	return $flux;
	
  if($flux['args'] == 'plugin'){
		$flux['data']['themes']= new Bouton(
		"../"._DIR_PLUGIN_ADMIN_THEMES."/img_pack/
gestion-themes-24.gif", 'Th&egrave;mes',
											  generer_url_ecrire("admin_themes"));
	$flux['data']['squelette']= new Bouton(
		"../"._DIR_PLUGIN_ADMIN_THEMES."/img_pack/
gestion-squelette-24.gif", 'Squelette',
											  generer_url_ecrire("admin_squelette"));
  return $flux;

  
  }

La funzione riprende il ’prefix’ del plugin al quale si aggiunge _ajouter_onglets (il nome dell’azione dichiarata in plugin.xml). Il parametro $flux rappresenta il flusso (nel nostro caso vuoto) al quale si aggiungono le informazioni per la visualizzazione dell’unghia (bottone) come l’immagine, il titolo pubblicato ed il link a un file php di cui si dà soltanto il nome senza l’estensione. Questo file sta nella cartella /exec del plugin.
Se ad esempio volete aggiungere un’unghia a ’configurazione’, questa funzione aggiungerà nel flusso un’unghia con le sue proprietà (immagine, titolo, link).

Conclusione

Sperando che queste spiegazioni vi avranno ispirato il desiderio di passare alla creazione di plugins, vi raccomando, se esitate ancora, di osservare il codice dei plugins proposti.
Ad esempio, dopo essere rimasto nella parte privata del sito, mi sono ispirato al plugin jQuery per « pluginizzare » un codice javascript che permette di arrotondare gli angoli di una div, di un form e di incorporare un’immagine in fondo nella parte pubblica del sito.
Il plugin admin_themes&squelettes è scaricabile qui
la sua documentazione

Discussion

Une discussion

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