Introduzione di un principiante alla scrittura di moduli in ProcessWire

I moduli ProcessWire ti consentono di estendere le funzionalità all'amministratore CMS, aggiungere nuove integrazioni API e in genere superpotere il tuo sito. Spesso mi trovo a raggiungere la pagina dei moduli ProcessWire (PW) per vedere se esiste una soluzione predefinita per il mio problema attuale; e di solito la risposta è sì!

Tuttavia, quando hai bisogno di creare qualcosa di nuovo, PW, come i suoi modelli, ti dà la potenza della sua API insieme a PHP.

In questo tutorial impareremo come creare e installare i moduli, osservare le loro esigenze e spiegare come utilizzare gli hook PW per aggiungere funzionalità ad altre funzioni all'interno del tuo sito.

Installazione

È importante sapere come installare un modulo se non lo hai già fatto. Seguendo questo processo ti mostreremo dove verranno visualizzate le informazioni e la configurazione del tuo modulo, come disinstallarlo e quali moduli installati potrebbero essere estesi.

  1. Carica i file del modulo su / Site / modules /.
  2. Nell'amministratore PW, nel menu principale vai a moduli e fare clic sul pulsante ricaricare.
  3. Ora il tuo nuovo modulo sarà elencato e può essere installato facendo clic Installare.

Creare un modulo

Requisiti

Iniziamo a creare un nuovo modulo. PW ha bisogno solo di alcune cose dal tuo modulo:

  • un nome di classe (ad esempio HelloUserYouSaved)
  • la classe dovrebbe estendere una classe di base PW(ad esempio Process, Wire o WireData)
  • la tua classe dovrebbe implementare la classe "Modulo"
  • e sia statico getModuleInfo () metodo, o un file "ModuleName.info.php" o "ModuleName.info.json" nella cartella del modulo. Questo metodo offre informazioni sul modulo da mostrare nell'amministratore.
classe HelloUserYouSaved estende WireData implements Module funzione statica pubblica getModuleInfo ()  

Tramite la estende WireData Ho dato al mio nuovo modulo l'accesso all'API PW e ai metodi ereditati da WireData.

Il nostro modulo è piuttosto noioso adesso, quindi aggiungiamo alcune informazioni sul modulo in modo che gli altri utenti possano vedere cosa fa.

getModuleInfo ()

classe HelloUserYouSaved estende WireData implements Module funzione statica pubblica getModuleInfo () return array ('title' => "HelloUserYouSaved", 'version' => "0.0.1", 'summary' => "HelloUserYouSaved mostra i messaggi dopo le azioni in PW ", 'author' =>" Ben Byford ", 'href' =>" https://github.com/benbyford/PW-starter-modules/tree/master/HelloUserYouSaved ", 'icon' =>" bell ", // usa autoload se il modulo deve essere chiamato ogni carico, se è solo necessario impostare qualcosa impostato su false 'autoload' => true, 'singular' => false, 'requires' => "ProcessWire> = 2.5", ); 

Per un elenco completo di opzioni, consultare il riferimento del modulo. sommario , versione e titolo sono richiesti, ma è anche consigliabile aggiungere i requisiti del modulo, singolare (true se solo una copia di questo modulo è consentita per ogni installazione PW) e autoload (modulo true to call su ogni richiesta).

ganci

Per tutti i moduli (anche i moduli principali) all'interno di PW, è possibile creare funzioni agganciabili per consentire l'attivazione di altri metodi di moduli sul loro utilizzo. Ad esempio, possiamo creare un hook che attiva un nuovo metodo ___helloMessage ogni volta che una pagina viene salvata con PW. Puoi sapere quali metodi sono agganciabili poiché hanno tre trattini bassi prima del loro nome, il che significa che il nostro nuovo metodo è anche agganciabile da altri moduli.

funzione pubblica init () // aggiungi un hook all'interno della classe e punta alla funzione personalizzata helloMessage $ this-> addHookAfter ("Pages :: save", $ this, "helloMessage"); Parent :: init ();  public function ___ helloMessage ($ event) // Ottieni l'oggetto della pagina che verrà presto salvato dall'evento $ page = $ event-> arguments [0]; // usa message () per inviare ciao alert a PW // alert verrà mostrato dopo ogni salvataggio della pagina admin. $ this-> message ("Hello $ this-> user-> name! Hai salvato $ page-> name."); 

Nel codice qui sopra, puoi vedere come aggiungiamo un hook al modulo principale delle pagine che si attiva dopo il metodo di salvataggio, che chiama il nostro ___helloMessage metodo. Abbiamo la possibilità di aggiungere ganci prima o dopo l'utilizzo del metodo: $ This-> addHookBefore () e $ This-> addHookAfter () rispettivamente. Dato che stiamo per inviare un messaggio all'utente dopo che la pagina è stata salvata, stiamo usando il gancio dopo variazione.

Gli hook sono ovunque all'interno di PW, e dopo che sei riuscito a capire come usarli, puoi collegarti alla maggior parte del sistema per modificare il comportamento predefinito o innescare un nuovo comportamento. Ecco un elenco di moduli principali e dei loro metodi collegabili.

Il codice sorgente completo per il nostro modulo "HelloUserYouSaved" può essere trovato su GitHub.

getModule ()

Puoi anche utilizzare i moduli per generare dati o markup nei tuoi modelli. Qualsiasi funzione pubblica disponibile all'interno del modulo può essere richiamata nei modelli per generare un risultato. Ad esempio, il modulo MarkupTwitterFeed può essere utilizzato per generare tweet aggiungendo questo codice al modello:

$ t = $ modules-> getModule ('MarkupTwitterFeed'); echo $ t-> render ();

Il codice sopra utilizza il getModule () metodo e memorizza l'oggetto in modo che il render () la funzione può essere utilizzata.

In questo secondo modulo "FrontEndRender" viene chiamata una funzione render () è implementato che possiamo usare in seguito nei nostri modelli per restituire Ciao e una variabile protetta nome $.

class FrontEndRender estende WireData implements Module funzione statica pubblica getModuleInfo () return array ('title' => 'FrontEndRender', 'version' => 0.1, 'summary' => "Output html e variabili statiche in frontend", 'autore '=>' Ben Byford ',' singular '=> true,' href '=>' https://github.com/benbyford/PW-starter-modules ');  // variabile protetta accessibile solo all'interno del modulo protetto $ name = 'Ben'; public function render () return "Hello". $ This-> nome; 

Possiamo echeggiare il risultato ovunque nel nostro modello (ad esempio il nostro file "_main.php") utilizzando:

$ FrontEndRender = $ modules-> getModule ('FrontEndRender'); eco '

'. $ FrontEndRender-> render (). '

';

Il codice sorgente completo per il nostro “Il modulo "FrontEndRender" può essere trovato su GitHub.

Avvolgendo

In questo tutorial, abbiamo esaminato l'installazione e la creazione di moduli semplici all'interno di ProcessWire. Abbiamo anche implementato un hook e reso il contenuto al front-end utilizzando i nostri moduli personalizzati.

C'è molto altro da dire sui moduli quindi rimanete sintonizzati per ulteriori tutorial per la creazione di moduli PW e trovate più informazioni sui moduli nelle risorse di seguito.

risorse

PHP

ProcessWire

  • Introduzione ai moduli su processwire.com
  • Documenti sui moduli su processwire.com
  • Cheatsheet PW Hooks su processwire.com
  • Metodo GetModule () su processwire.com
  • Creatore di piastre caldaia del modulo su modules.pw