Estensione di ProcessWire Admin tramite i moduli personalizzati

In questo tutorial esamineremo l'estensione dell'amministratore di ProcessWire utilizzando moduli personalizzati. Con tre moduli di esempio ti darò un assaggio della potenza che i moduli ProcessWire hanno per aggiungere nuove funzionalità all'amministratore.

Crea pagine di amministrazione personalizzate

La creazione di pagine per il tuo sito Web in ProcessWire (PW) non potrebbe essere più semplice, ma per quanto riguarda la creazione di pagine personalizzate nel CMS? Supponi di voler creare una pagina delle impostazioni personalizzate, domande frequenti o pagina video?

Continua a leggere, ti abbiamo dato le spalle.

Il modulo ProcessSimpleAdminPage mostra semplicemente di creare un modulo che estende la classe Process per aggiungere un nuovo processo di amministrazione e quindi creare una pagina per il nuovo processo. Processi è la classe base per l'amministratore del PW, quindi usandola possiamo creare una pagina che mostri il nostro contenuto.

Mancia: Il tuo nuovo modulo di estensione del processo può anche visualizzare moduli e altre funzionalità e contenuti di ritorno.

Creeremo un nuovo processo che restituisce alcuni contenuti, quindi creiamo una nuova pagina nella navigazione dell'amministratore per raggiungere quel contenuto (in questo esempio ho chiamato la pagina "FAQ CMS"). Per costruire il nostro modulo iniziamo creando un file chiamato "ProcessSimpleAdminPage.module" e salvando i dettagli del modulo ad esso.

class ProcessSimpleAdminPage estende Process public static function getModuleInfo () return array ('title' => 'Process Simple Admin Page', 'summary' => 'Modulo Process semplice che aggiunge una nuova pagina di amministrazione con', 'version' => 001 ,);  public function execute () return ' 

Modifica il testo qui nel modulo

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam mattis eros vitae metus sodales eget suscipit purus rhoncus. Proin ultrices gravida dolor, non porttitor enim interdum vitae. Integer feugiat lacinia tincidunt. Nulla laoreet tristique tristique. Sed elementum justo a nisl elementum sit amet accumsan nisi tempor. Nulla quis eros et massa dignissim imperdiet a vitae purus.

';

A questo punto, se avessimo installato il nostro modulo avremmo tutto ciò di cui avevamo bisogno per creare il nostro nuovo processo ProcessSimpleAdminPage e restituire il contenuto. Tuttavia, al momento non esiste una pagina per eseguire il nostro codice. Abbiamo diverse opzioni per fare questo:

  1. Creare manualmente una nuova pagina nel pagetree PW sotto Admin, dargli il modello Admin e nel campo Processo: ProcessSimpleAdminPage. Spostare la nuova pagina nell'elenco di elenco di pagine in impostazioni, per esempio, vedrà la pagina aggiunta alla navigazione in alto sotto impostazioni.
  2. Aggiungere un paginaattributo al modulo getModuleInfo () array. Se il modulo estende Process (che è il nostro), quindi aggiungendo a paginaarray di attributi con almeno a nome e genitore all'installazione creerà automaticamente una nuova pagina di amministrazione sottoil tuo specificato genitore con il modulo come processo. Ecco un esempio dal modulo Hello.
  3. Creare installare() e disinstallare () funzioni e aggiungi la nuova pagina. Questo è dettagliato sotto per mostrarti come potresti aggiungere una pagina:
public function install () // crea una nuova pagina da aggiungere a CMS $ page = new Page (); // aggiungi gli attributi della pagina, ho chiamato questa pagina CMS FAQ '$ page-> template = "admin"; $ page-> name = "cms-faq"; $ page-> title = "FAQ CMS"; $ Page-> save (); // imposta questo modulo come processo di pagina, questo ci permette di visualizzare la pagina $ page-> process = 'ProcessSimpleAdminPage'; // ottiene la pagina di amministrazione e imposta come pagina padre $ admin = $ this-> pages-> get ("id = 2"); $ page-> parent = $ admin; // salva pagina $ page-> save ();  public function uninstall () // elimina pagina creata $ page = $ this-> pages-> get ("nome = cms-faq"); if (count ($ page)) $ this-> pages-> delete ($ page, true);  

Vai avanti e crea pagine di amministrazione per il tuo sito web!

Aggiungi formattatore di testo personalizzato

Usando Textformatters puoi manipolare l'input dei campi di testo con l'admin PW. Ad esempio, supponiamo di voler creare snippet di codice che vengono aggiunti al posto di qualcuno che digita i propri frammenti, è perfettamente possibile (in modo simile al plugin del codice hana per Wordpress).

Questa volta ho creato un modulo che estende un'altra classe base Textformatter per creare il nostro nuovo modulo TextformatterFindReplace e creato un file di configurazione separato:

class TextformatterFindReplace extends Textformatter implements Module funzione statica pubblica getModuleInfo () return array ('title' => 'TextformatterFindReplace', 'version' => 0.1, 'summary' => "Trova e sostituisce qualsiasi istanza di input di configurazione per l'output di configurazione ", 'singular' => true,);  / ** * Trova e sostituisci la stringa di input * * @param stringa $ str Il blocco del testo da analizzare * * La stringa in entrata viene sostituita con la versione formattata di se stesso. ** / formato di funzione pubblica (& $ str) $ find = $ this-> findStr; $ str = preg_replace_callback ($ find, array ($ this, "replace"), $ str);  // L'aggiunta di tre trattini bassi a una funzione consente ad altri moduli di agganciarla funzione pubblica ___ replace ($ match) return $ this-> replaceStr;  
class TextformatterFindReplaceConfig estende ModuleConfig public function getDefaults () return array ('findStr' => '----', 'replaceStr' => 'TESTO SOSTITUITO',);  / * * getInputfields () * return: $ inputfields * / // crea un modulo all'interno dell'amministratore PW per abilitare la configurazione della funzione pubblica del modulo getInputfields () // get modulo getInputfields imposta la classe di configurazione $ inputfields = parent :: getInputfields (); // ottiene il modulo InputfieldText $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('name', 'findStr'); $ f-> label = 'Trova nel testo'; $ f-> description = 'Aggiungi una parola o un pattern per trovare e sostituire all'interno del tuo testo.'; // aggiungi l'input del ruolo utente per formare la configurazione $ inputfields-> add ($ f); // ottiene il nuovo modulo InputfieldText $ f = $ this-> modules-> get ('InputfieldText'); $ f-> attr ('name', 'replaceStr'); $ f-> label = 'Sostituisci testo'; $ f-> description = 'testo da mostrare sul front-end.'; // aggiungi l'input di reindirizzamento della pagina per formare config $ inputfields-> add ($ f); // return module config inputs return $ inputfields;  

Ora nelle impostazioni del modulo posso specificare una stringa da abbinare e una stringa da sostituire con (nel nostro esempio sopra il valore predefinito è trovare: ---- e sostituire con TESTO SOSTITUITO).

Tutto quello che devo fare è aggiungere il nostro nuovo TextFormatter a un campo di testo all'interno della scheda dei dettagli del campo. Adesso ogni volta che scrivo ---- Otterrò la stringa di testo sostituita.

Aggiungi nuova funzionalità alle pagine di amministrazione

Poiché l'amministratore PW viene creato utilizzando la libreria simile all'API di PW, i moduli PW hanno praticamente accesso per l'accesso ovunque sia necessario.

Per il mio ultimo esempio sull'estensione dell'amministratore di PW, ho creato un modulo che aggiunge pulsanti alla pagina di modifica e al pagetree, crea due nuovi campi e li aggiunge a livello globale in ogni pagina. Richiede un altro modulo, LazyCron, per funzionare.

Il modulo PageDeferredPublish, cliccando su uno dei Pubblica dopo pulsanti, imposta LazyCron per controllare il conto alla rovescia di quella pagina ogni minuto e pubblica la pagina quando il suo conto alla rovescia raggiunge 0. Ciò significa che posso pubblicare una pagina con circa 24 ore di anticipo (ovviamente l'intervallo di controllo e il tempo di ritardo possono essere modificati in base alle tue esigenze).

L'ho fatto da:

  • Creazione di due campi all'interno del mio installare() funzione: un campo checkbox da impostare su true quando viene selezionato un pulsante per indicare che la pagina dovrebbe eseguire il conto alla rovescia e un campo conto alla rovescia per memorizzare il conteggio in secondi per quella specifica pagina.
  • Aggiunta di hook a ProcessPageEdit :: buildForm e ProcessPageListActions :: getExtraActions che mi consentono di aggiungere i due pulsanti.
  • Controllo per vedere se uno dei pulsanti è stato cliccato con la mia funzione ready (), quindi impostare la casella di controllo della pagina corrispondente su true.
  • Utilizzare una funzione di hook LazyCron per controllare tutte le pagine non pubblicate per le vere caselle di controllo e quindi confrontare il campo dei secondi per vedere se la pagina ha bisogno di essere pubblicata. In caso contrario, dedurre il tempo trascorso in secondi.

Il risultato è un modulo che ha delle impostazioni (l'intervallo di tempo da controllare e pubblicare in un secondo momento), si aggancia all'amministratore usando pulsanti e campi e ci consente di usare altri moduli installati in PW (cioè LazyCron).

Avvolgendo

Spesso, un modulo necessario è già stato creato e può essere scaricato dalla pagina del modulo di PW. Tuttavia, se ti trovi nel bisogno, è bello sapere che è relativamente facile entrare, estendere una classe principale e creare nuove funzionalità che risolvono il tuo problema o altera la soluzione predefinita di PW.

Spero che tu abbia trovato utile questo piccolo assaggio del potere di estendere la PW, e per favore controlla gli altri tutorial di ProcessWire su Envato Tuts + per altri suggerimenti e trucchi.

Risorse utili

  • Introduzione di un principiante alla scrittura di moduli in ProcessWire
  • Documenti del modulo
  • Modulo config personalizzato
  • Dipendenze del modulo
  • Ganci implementabili