Add new menu and view by a plugin

How to write a plugin that adds a menu to the admin menubar & when clicked renders some content.

= 3.0.0.beta-3 and above =

Since 3.0.0 it is possible to manually add and create menu entries. Depending on your plugin you can use this function as a benchmark to add either a menuentry or a full menu for your plugin. Please also have a look at the manual page for menucreation.

For this special case there is the newly added plugin event "onPluginRegistration" that is called once when the plugin is discovered.

= 2.55 to 2.73 =

1. Create a new plugin, in our case called PageDemo. In the plugins/ folder, there should be a folder name called PageDemo and within it a class called PageDemo inheriting \ls\pluginmanager\PluginBase. Also create a folder called views/ in your plugin folder and add index.php to it.

plugins/ PageDemo/ PageDemo.php views/ index.php

This is the PageDemo.php file so far, with basic settings:

2. Subscribe to event beforeAdminMenuRender to append menus:

3. Add a method called beforeAdminMenurender to the plugin class and append a menu object to the event:

4. Add the method actionIndex to the plugin class. This method will call renderPartial to render a view in the views/ folder.

5. Add some HTML to the view index.php in the views/ folder

6. Result



= 2.06 lts/2.6.x lts =

1. Create a new plugin. let us call it Rewards

2. register for events afterAdminMenuLoad and newDirectRequest in the constructor

3. implement the above methods methods in the new plugin class

4. In the method afterAdminMenuLoad, add a new menu item and link it to    admin/plugins/direct?plugin=&function= e.g   admin/plugins/direct?plugin=rewards&function=assignRewards The best way to to this would be to make use of the createURL method: 'href' => $this->api->createUrl('plugins/direct', array('plugin' => 'Rewards', 'function' => 'assignRewards')),

5. implement the method newDirectRequest

public function newDirectRequest{ $event = $this->event; // you can get other params from the request object $request = $event->get('request'); //get the function name to call and use the method call_user_func $functionToCall = $event->get('function'); $content = call_user_func(array($this,$functionToCall)); //set the content on the event $event->setContent($this, $content); }

6. implement the method plugin_action, in our case it is assignRewards. In this method currently i am just trying to return some dummy content, you can have sophisticated page rendered.

public function assignRewards { $content = " plugin content set succesfully "; return $content; }

7. The full Rewards.php

8. This is how the UI looks now.