Plugins
Plugin structure
All plugins must be located in the plugins folder and must have a php file and class named as the plugin name.
Structure of a basic plugin:
└── plugins
    └── MyPlugin
        └── MyPlugin.php
Code of a basic plugin:
<?php
namespace Plugin\MyPlugin;
use Parvula\Plugin;
class MyPlugin extends Plugin {
	// ...
}
The plugin class
Each plugin should inherit the Plugin class (Parvula\Plugin).
The Plugin class has some useful method to help you to develop a new plugin easily.
| Function | Description | 
|---|---|
getPath() | 
      Get the current plugin path (useful for the backend/php part) | 
getUri() | 
      Get the current plugin URI (useful for the client/view part) | 
appendToHeader($html, $add) | 
      Append string to the header element (<head>) | 
    
appendToBody($html, $add) | 
      Append string to the header element (<body>) | 
    
The plugin callbacks
Each plugin also have a “cycle of live”. Each time, those callbacks functions will be called.
| Callback function | Description | 
|---|---|
onBootstrap(Parvula $app) | 
      The first function to be called, useful to get services in $app. | 
onLoad() | 
      On load | 
onRouter(Router $router) | 
      To handle the router. Useful to add or override routes | 
onDispatch(string $method, string $uri) | 
      |
onUri(string $uri) | 
      ex: /pictures/islands?test //TODO check | 
    
onSlug(string $slug) | 
      ex: pictures/islands | 
    
onPage(Page $page) | 
      When the page mapped to the slug is loaded | 
onPreRender(string $layout) | 
      Before the layout is rendered | 
onPostRender(string $output) | 
      After the layout is rendered | 
on404(Page $page) | 
      When the page is not found | 
onEnd() | 
      The last callback called | 
Hello world example
If we want to add a route (/hello):
<?php
namespace Plugin\MyPlugin;
use Parvula\Plugin;
class MyPlugin extends Plugin
{
	/**
	 * Add a new route
	 * It will handle '/hello' route and print "Hello world !"
	 */
	function onRouter(&$router) {
		$router->get('/hello', function () {
			return 'Hello world !';
		});
	}
}
If we want to change the content of the page:
<?php
namespace Plugin\MyPlugin2;
use Parvula\Plugin;
class MyPlugin2 extends Plugin {
	function onPage(&$page) {
		$page->content = 'Hello world !';
	}
}