Een beginnersinleiding voor het schrijven van modules in ProcessWire

Met ProcessWire-modules kunt u functionaliteit uitbreiden naar de CMS-beheerder, nieuwe API-integraties toevoegen en over het algemeen uw website overnemen. Ik merk vaak dat ik naar de ProcessWire (PW) -modules-pagina ga om te zien of er een vooraf gemaakte oplossing is voor mijn huidige probleem; en meestal is het antwoord ja!

Wanneer u echter iets nieuws moet maken, biedt PW, net als zijn sjablonen, u de kracht van zijn API samen met PHP.

In deze tutorial leren we hoe we modules maken en installeren, kijken naar hun vereisten en uitleggen hoe PW-hooks te gebruiken om functionaliteit toe te voegen aan andere functies binnen uw site.

installeren

Het is belangrijk om te weten hoe u een module moet installeren als u dat nog niet hebt gedaan. Door dit proces te volgen, ziet u waar uw module-informatie en -configuratie zal worden weergegeven, hoe u deze kunt verwijderen en welke geïnstalleerde modules kunnen worden uitgebreid.

  1. Upload modulebestanden naar / Site / modules /.
  2. Ga naar PW admin, ga in het hoofdmenu naar modules en klik op de knop verversen.
  3. Uw nieuwe module wordt nu weergegeven en kan worden geïnstalleerd door op te klikken Installeren.

Een module maken

Vereisten

Laten we beginnen met het maken van een nieuwe module. PW heeft maar een paar dingen uit je module nodig:

  • een klassenaam (bijvoorbeeld HelloUserYouSaved)
  • de klas moet een PW-basisklasse uitbreiden(bijvoorbeeld Process, Wire of WireData)
  • uw klasse moet de klasse "Module" implementeren
  • en of een statische getModuleInfo () methode, of een "ModuleName.info.php" bestand of een "ModuleName.info.json" in uw module map. Deze methode biedt informatie over uw module die in de beheerder getoond moet worden.
klasse HelloUserYouSaved verlengt WireData implementeert Module public static function getModuleInfo ()  

Door het verlengt WireData Ik heb mijn nieuwe module toegang gegeven tot de PW API en methoden die zijn overgenomen van WireData.

Onze module is nu behoorlijk saai, dus laten we wat module-informatie toevoegen zodat andere gebruikers kunnen zien wat het doet.

getModuleInfo ()

klasse HelloUserYouSaved verlengt WireData implementeert Module public static function getModuleInfo () return array ('title' => "HelloUserYouSaved", 'version' => "0.0.1", 'summary' => "HelloUserYouSaved toont berichten na acties in PW ", 'author' =>" Ben Byford ", 'href' =>" https://github.com/benbyford/PW-starter-modules/tree/master/HelloUserYouSaved ", 'icon' =>" bel ", // gebruik autoload als module elke load moet worden aangeroepen, als het alleen nodig is om iets ingesteld op false in te stellen 'autoload' => true, 'singular' => false, 'require' => "ProcessWire> = 2.5", ); 

Raadpleeg de moduleverwijzing voor een volledige lijst met opties. samenvatting , versie en titel zijn verplicht, maar het is ook raadzaam om uw module-eisen toe te voegen, enkelvoudig (true als slechts één exemplaar van deze module is toegestaan ​​per PW-installatie), en autoload (true-to-call-module bij elke aanvraag).

haken

Voor alle modules (zelfs kernmodules) binnen PW, kunt u haakbare functies maken zodat andere modulemethoden kunnen worden geactiveerd voor hun gebruik. We kunnen bijvoorbeeld een haak maken die een nieuwe methode triggert ___helloMessage elke keer dat een pagina wordt opgeslagen met PW. Je kunt zien welke methoden haakbaar zijn, want ze hebben drie onderstrepingstekens vóór hun naam, wat betekent dat onze nieuwe methode ook door andere modules kan worden vastgemaakt..

openbare functie init () // haak in de klas en wijs naar de aangepaste functie helloMessage $ this-> addHookAfter ("Pages :: save", $ this, "helloMessage"); Parent :: init ();  openbare functie ___ helloMessage ($ event) // Haal het binnenkort te redden pagina-object op van de gegeven event $ page = $ event-> arguments [0]; // gebruik bericht () om hello-waarschuwing naar PW te verzenden // alert wordt weergegeven na het opslaan van een beheerderspagina. $ this-> message ("Hello $ this-> user-> name! Je hebt $ page-> name opgeslagen."); 

In de bovenstaande code kunt u zien hoe we een haak toevoegen aan de kernpagina-module die wordt geactiveerd na de opslagmethode, die ons oproept ___helloMessage methode. We hebben de optie om haken toe te voegen voor of nadat de methode is gebruikt: $ This-> addHookBefore () en $ This-> addHookAfter () respectievelijk. Omdat we de gebruiker een bericht sturen nadat de pagina is opgeslagen, gebruiken we de haak na variatie.

Haken zijn overal binnen PW, en nadat je erin geslaagd bent om je hoofd erover te gebruiken, kun je de meeste delen van het systeem gebruiken om het standaardgedrag aan te passen of nieuw gedrag te activeren. Hier is een lijst met kernmodules en hun haakbare methoden.

De complete broncode voor onze "HelloUserYouSaved" -module is te vinden op GitHub.

getModule ()

U kunt ook modules gebruiken om gegevens of markeringen in uw sjablonen uit te voeren. Elke openbare functie die beschikbaar is binnen uw module kan worden opgeroepen in sjablonen om een ​​resultaat te produceren. De module MarkupTwitterFeed kan bijvoorbeeld worden gebruikt om tweets uit te voeren door deze code aan uw sjabloon toe te voegen:

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

De bovenstaande code gebruikt de getModule () methode en slaat het object op zodat de render () functie kan worden gebruikt.

In deze tweede module "FrontEndRender" een functie genaamd render () is geïmplementeerd die we later in onze sjablonen kunnen gebruiken om terug te keren Hallo en een beschermde variabele name $.

class FrontEndRender breidt WireData implementaties Module uit public static function getModuleInfo () return array ('title' => 'FrontEndRender', 'version' => 0.1, 'summary' => "Voert html en statische variabelen uit naar frontend", 'auteur '=>' Ben Byford ',' singular '=> true,' href '=>' https://github.com/benbyford/PW-starter-modules ');  // beveiligde variabele alleen toegankelijk binnen module beschermd $ name = 'Ben'; public function render () terug "Hallo". $ This-> name; 

We kunnen het resultaat overal in onze sjabloon (bijvoorbeeld onze "_main.php" -bestand) echoën met behulp van:

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

'. $ FrontEndRender-> render (). '

';

De volledige broncode voor onze “FrontEndRender "-module is te vinden op GitHub.

Afsluiten

In deze zelfstudie hebben we gekeken naar het installeren en maken van eenvoudige modules binnen ProcessWire. We implementeerden ook een haak en gerenderde inhoud aan de voorkant met behulp van onze aangepaste modules.

Er is veel meer te zeggen over modules, dus blijf op de hoogte voor meer tutorials over het maken van PW-modules en vind meer informatie over modules in de onderstaande bronnen..

Middelen

PHP

ProcessWire

  • Introductie van modules op processwire.com
  • Modules docs op processwire.com
  • PW haakt cheatsheet op processwire.com
  • GetModule () methode op processwire.com
  • Module boilerplate creator op modules.pw