App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/NavMaker.pm view on Meta::CPAN
use HTML::Template;
sub new { bless {}, shift }
sub process {
my ( $self, $template, $query, $config ) = @_;
my $nav = delete($template->{nav_maker}) || delete $config->conf->{nav_maker};
return
unless $nav;
if ( ref $nav eq 'CODE' ) {
$nav = $nav->( $template, $query, $config );
}
my $html_template
= HTML::Template->new_scalar_ref( \ $self->_get_html_template );
for ( @$nav ) {
next if ref;
$_ = [ $_ ];
}
$html_template->param(
nav => [
map +{
text => $_->[0],
title => (defined $_->[2] ? $_->[2] : "Visit $_->[0]"),
href => (
defined $_->[1] ? $_->[1] : $self->_make_href( $_->[0] )
),
id => (
defined $_->[3]
? $_->[3]
: $self->_make_id( $_->[0] )
),
}, @$nav
],
);
$template->{t}{nav_maker} = $html_template->output;
return 1;
}
sub _make_href {
my ( $self, $text ) = @_;
$text =~ s/[\W_]/-/g;
return lc "/$text";
}
sub _make_id {
my ( $self, $text ) = @_;
$text =~ s/\W/_/g;
return lc "nav_$text";
}
sub _get_html_template {
return <<'END';
<ul id="nav"><tmpl_loop name="nav">
<li id="<tmpl_var escape="html" name="id">"><a href="<tmpl_var escape="html" name="href">" title="<tmpl_var escape="html" name="title">"><tmpl_var escape="html" name="text"></a></li></tmpl_loop>
</ul>
END
}
1;
__END__
=encoding utf8
=head1 NAME
App::ZofCMS::Plugin::NavMaker - ZofCMS plugin for making navigation bars
=head1 SYNOPSIS
In your Main Config File or ZofCMS Template:
nav_maker => [
qw/Foo Bar Baz/,
[ qw(Home /home) ],
[ qw(Music /music) ],
[ qw(foo /foo-bar-baz), 'This is the title=""', 'this_is_id' ],
],
plugins => [ qw/NavMaker/ ],
In your L<HTML::Template> template:
<tmpl_var name="nav_maker">
Produces this code:
<ul id="nav">
<li id="nav_foo"><a href="/foo" title="Visit Foo">Foo</a></li>
<li id="nav_bar"><a href="/bar" title="Visit Bar">Bar</a></li>
<li id="nav_baz"><a href="/baz" title="Visit Baz">Baz</a></li>
<li id="nav_home"><a href="/home" title="Visit Home">Home</a></li>
<li id="nav_music"><a href="/music" title="Visit Music">Music</a></li>
<li id="this_is_id"><a href="/foo-bar-baz" title="This is the title=""">foo</a></li>
</ul>
=head1 DESCRIPTION
The plugin doesn't do much but after writing HTML code for hundreds of
navigation bars I was fed up... and released this tiny plugin.
This documentation assumes you've read L<App::ZofCMS>,
L<App::ZofCMS::Config> and L<App::ZofCMS::Template>
=head1 MAIN CONFIG FILE AND ZofCMS TEMPLATE FIRST LEVEL KEYS
=head2 C<plugins>
plugins => [ qw/NavMaker/ ],
The obvious one is that you'd want to add C<NavMaker> into the list of
your plugins.
=head2 C<nav_maker>
nav_maker => [
( run in 0.596 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )