Search code examples
phpcodeigniterpyrocms

add custom module under a menu stream


I am creating my own module and one of its requirement is to have it located in a certain menu. My problem is that the menu is generated using a plugin PyroStreams.

So first things first, I downloaded a copy of the sample module on the Github, then have it place in addons/default/modules/. I refreshed my PyroCMS Admin -> Add-ons -> Modules and see the sample module in there. As stated on the detail.php of this sample module

public function info()
  {
    return array(
      'name' => array(
        'en' => 'Test Modules'
      ),
      'description' => array(
        'en' => 'My custom module.'
      ),
      'frontend' => FALSE,
      'backend' => TRUE,
      'menu' => 'content', // You can also place modules in their top level menu. For example try: 'menu' => 'Sample',
      'sections' => array(
        'items' => array(
          'name'  => 'Test', // These are translated from your language file
          'uri'   => 'admin/sample',
            'shortcuts' => array(
              'create' => array(
                'name'  => 'sample:create',
                'uri'   => 'admin/sample/create',
                'class' => 'add'
                )
              )
            )
        )
    );
  }

It should appear on the Content menu which is correct. Now, I can't find anything on docs that states instructions on properly mapping the menu for custom modules, so out of initiative I tried to change the value for menu => "content" to menu => "Test Stream" but that didn't work. As shown in the screenshot below, that is where I wanted to place my custom module, under the menu "Test Stream". What am I missing?

enter image description here


Solution

  • Add this method to your detail.php file:

    public function admin_menu(&$menu)
        {       
            // Create main menu item 
            add_admin_menu_place('lang:module:title', 9); // 9 is the placement order of your menu item, it would be after profile
    
            // Create sub-menu
            $menu['lang:module:title']['lang:module:submeu1']  = 'admin/add';
            $menu['lang:module:title']['lang:module:submeu2'] = 'admin/edit';
        }
    

    also set the 'menu'=> false, at your info() method.