Question

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

Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top