.. _extending_options_page: ###################### Adding an options page ###################### If you want to create an individual options page for your module, you can hook into PSN's navigation menu. .. code:: _pm->getAccess()->isPlugin()) { // load a new navigation tab after the service tab IfwPsn_Wp_Proxy_Action::add('psn_after_admin_navigation_service', array($this, 'addNav')); } } /** * Adds an item to PSN's backend navigation menu * * @param IfwPsn_Vendor_Zend_Navigation $navigation */ public function addNav(IfwPsn_Vendor_Zend_Navigation $navigation) { $page = new IfwPsn_Zend_Navigation_Page_WpMvc(array( 'label' => __('Example', 'psn_exm'), // label of the navigation tab 'controller' => 'example', // points to controllers/PsnExampleController.php 'action' => 'index', // the default action which will be loaded on the controller 'module' => strtolower($this->_pathinfo->getDirname()), // the module's directory name, no need to change 'page' => $this->_pm->getPathinfo()->getDirname(), // the module's directory name, no need to change 'route' => 'requestVars' // do not change this )); $navigation->addPage($page); } This would result in a new Tab with the text of the ``label`` option. .. image:: _static/extend_example_page.jpg :height: 276px :width: 915px :scale: 100% :alt: Example page Before you can access the page you must create the controller class defined in the ``controller`` option. ********** Controller ********** As in the example the ``controller`` option has been set to "example", a request on the new page will result in the URI "...page=post-status-notifier&controller=example..." which will look for the example controller object. So you have to create a new file in the subdirectory "controllers" of your module called PsnExampleController.php .. code:: jinja Example └ controllers └ PsnExampleController.php The controller object must be named following this format: [controller_name]_Psn[controller_name]Controller. In this case of controller name "example" it must be **Example_PsnExampleController** (notice the capital first letter E). .. code:: view->headline = __('Example admin page', 'psn_exm'); } ****** Action ****** The ``indexAction`` method of the controller object is where the request will be routed if no action is defined in the URI or the GET parameter ``appaction`` is "index". The corresponding HTML template which will be rendered automatically be the index action must be placed in the subdirectory **views** applying this format: ``views/scripts/psn-[controller_name]/[action_name].phtml`` .. code:: jinja Example └ views └ scripts └ psn-example └ index.phtml