Blame | Last modification | View Log | Download
<?php namespace ProcessWire;/*** ProcessWire 'Hello world' demonstration module** Demonstrates the Module interface and how to add hooks.** See README file for further links regarding module development.** This file is licensed under the MIT license* https://processwire.com/about/license/mit/** ProcessWire 3.x, Copyright 2016 by Ryan Cramer* https://processwire.com**/class Helloworld extends WireData implements Module {/*** getModuleInfo is a module required by all modules to tell ProcessWire about them** @return array**/public static function getModuleInfo() {return array(// The module's title, typically a little more descriptive than the class name'title' => 'Hello World',// version number'version' => 3,// summary is brief description of what this module is'summary' => 'An example module used for demonstration purposes.',// Optional URL to more information about the module'href' => 'https://processwire.com',// singular=true: indicates that only one instance of the module is allowed.// This is usually what you want for modules that attach hooks.'singular' => true,// autoload=true: indicates the module should be started with ProcessWire.// This is necessary for any modules that attach runtime hooks, otherwise those// hooks won't get attached unless some other code calls the module on it's own.// Note that autoload modules are almost always also 'singular' (seen above).'autoload' => true,// Optional font-awesome icon name, minus the 'fa-' part'icon' => 'smile-o',);}/*** Initialize the module** ProcessWire calls this when the module is loaded. For 'autoload' modules, this will be called* when ProcessWire's API is ready. As a result, this is a good place to attach hooks.**/public function init() {// add a hook after the $pages->save, to issue a notice every time a page is saved$this->pages->addHookAfter('save', $this, 'example1');// add a hook after each page is rendered and modify the output$this->addHookAfter('Page::render', $this, 'example2');// add a 'hello' method to every page that returns "Hello World"// use "echo $page->hello();" in your template file to display output$this->addHook('Page::hello', $this, 'example3');// add a 'hello_world' property to every page that returns "Hello [user]"// use "echo $page->hello_world;" in your template file to display output$this->addHookProperty('Page::hello_world', $this, 'example4');}/*** Example1 hooks into the pages->save method and displays a notice every time a page is saved** @param HookEvent $event**/public function example1($event) {/** @var Page $page */$page = $event->arguments[0];$this->message("Hello World! You saved {$page->path}.");}/*** Example2 hooks into every page after it's rendered and adds "Hello World" text at the bottom** @param HookEvent $event**/public function example2($event) {/** @var Page $page */$page = $event->object;// don't add this to the admin pagesif($page->template == 'admin') return;// add a "Hello World" paragraph right before the closing body tag$event->return = str_replace("</body>", "<p>Hello World!</p></body>", $event->return);}/*** Example3 adds a 'hello' method (not property) to every page that simply returns "Hello World"** @param HookEvent $event**/public function example3($event) {$event->return = "Hello World";}/*** Example 4 adds a 'hello_world' property (not method) to every page that returns "Hello [user]"** @param HookEvent $event**/public function example4($event) {$event->return = "Hello " . $this->user->name;}}