NAME
CGI::Application::Plugin::Menu - manage navigation menus for cgi apps
SYNOPSIS
use base 'CGI::Application';
use CGI::Application::Plugin::Menu;
sub _get_menu_outputs {
my $self = shift;
my $html_output;
my $menu_main = $self->menu;
# resolves to a 'Home' link
$menu_main->add('/');
# makes into runmodelink for CGI::Application
# <a href='?rm=view_stats'>View Statistics</a>
$menu_main->add( view_stats, 'View Statistics'); # with label
# makes into runmodelink for CGI::Application
# <a href='?rm=view_history'>View History</a>
$menu_main->add('view_history'); # label is optional
my $menu_info = $self->menu('info');
$menu_info->add('/about_us.html');
$menu_info->add('/contact_info.html');
$html_output .=
$menu_main->output
. $menu_info->output;
return $html_output;
}
EXAMPLE USAGE 1
sub _inject_menus_into_tmpl {
my ($self,$tmpl) = @_;
my $m = $self->menu;
$m->add('home'); # ?rm=home / 'Home'
$m->add('account_view'); # ?rm=account_view / Account View
$m->add('account_edit','edit bogus'); # ?rm=account_edit / edit bogus
$m->add('account_delete');
$m->add('/info.html'); # /info.html / Info
$tmpl->param( MENU_LOOP => $m->loop);
}
EXAMPLE USAGE 2
sub _set_menus_in_template {
my $self = shift;
my $m = $self->menu('main');
$m->add('home','home page');
$m->add('view_stats');
$m->add('http://cpan.org','visit cpan');
$m->name; # returns 'main', for this example
# GETTING THE HTML TEMPLATE LOOP
my $main_menu_loop = $m->loop;
my $tmpl = $self->this_method_returns_HTML_Template_object;
$tmpl->param( 'MAIN_MENU' => $main_menu_loop );
#or
$tmpl->param( 'MAIN_MENU' => $self->menu_get('main_menu')->loop );
# IN YOUR HTML TEMPLATE:
#
# <ul>
# <TMPL_LOOP MAIN_MENU>
# <li><a href="<TMPL_VAR URL>"><TMPL_VAR LABEL></a></li>
# </TMPL_LOOP>
# </ul>
return 1;
}
DESCRIPTION
This is a simple way of having menus in your cgi apps.
METHODS
menu()
if you don't provide an argument, the default is used, which is 'main'. returns HTML::Template::Menu A MENU OBJECT object.
menus()
returns array ref of names of menus that exist now. They are in the order that they were instanced
my $m0 = $self->menu('main');
$m0->add('home');
$m0->add('news');
my $m1 = $self->menu('session');
$m1->add('logout');
$m1->add('login_history');
for ( @{$self->menus} ){
my $m = $_;
my $menu_name = $m->name;
my $loop_for_html_template = $m->loop;
}
A MENU OBJECT
Are instances of HTML::Template::Menu
METHODS
name()
returns name of the menu.
add()
argument is url or runmode optional argument is label
If the first argument has no funny chars, it is treated as a runmode.
The label is what will appear in the link text If not provided, one will be made. If you have a runmode called see_more, the link text is "See More".
The link will be
<a href="?=$YOURRUNMODEPARAMNAME=$ARG1">$ARG2</a>
So in this example:
$m->add('view_tasks');
The result is:
<a href="?rm=view_tasks">View Tasks</a>
loop()
get loop suitable for HTML::Template object
See SYNOPSIS.
output()
If you just want the output with the default hard coded template.
The default template code is stored in:
$HTML::Template::Menu::DEFAULT_TMPL
menu_delete()
Argument is menu label, deletes the menu. Returns true, does not check for existance.
ADDING MENU ITEMS
my $m = $self->menu_get('main menu');
$m->add('home');
$m->add('http://helpme.com','Need help?');
$m->add('logout');
Elements for the menu are shown in the order they are inserted.
AUTOMATICALLY GENERATING A MENU
See CGI::Application::Plugin::AutoMenuitem
AUTHOR
Leo Charre leocharre at cpan dot org
SEE ALSO
CGI::Application HTML::Template HTML::Template::Menu LEOCHARRE::DEBUG