=head1 NAME Templer::Plugin::Breadcrumbs - A plugin to create breadcrumbs =cut =head1 SYNOPSIS The following is a good example use of this plugin title: About my site crumbs: Home,Software ----

This is my page content...

Here the variable 'crumbs' will be converted into a loop variable called 'breadcrumbs'. THe links and titls will be set automatically, but if you need to override them you can do so via: title: About my site crumbs: Home,Software[Soft],Testing[Test] ----

This is my page content...

That will result in links to /, /Soft, and /Soft/Test, respectively. With display names of "Home", "Software" and "Testing". =cut =head1 DESCRIPTION This plugin expands the values of "crumbs", as written in a template, to a loop-variable with the name "breadcrumbs". This can be used in a template like so: =for example begin =for example end This template is an example. =cut =head1 LICENSE This module is free software; you can redistribute it and/or modify it under the terms of either: a) the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version, or b) the Perl "Artistic License". =cut =head1 AUTHOR Steve Kemp =cut =head1 COPYRIGHT AND LICENSE Copyright (C) 2015 Steve Kemp . This library is free software. You can modify and or distribute it under the same terms as Perl itself. =cut =head1 METHODS =cut use strict; use warnings; package Templer::Plugin::Breadcrumbs; =head2 new Constructor. No arguments are required/supported. =cut sub new { my ( $proto, %supplied ) = (@_); my $class = ref($proto) || $proto; my $self = {}; bless( $self, $class ); return $self; } =head2 expand_variables This is the method which is called by the L to expand the variables contained in a L object. This method will expand any variable that is called 'crumbs' into a HTML::Template loop, suitable for the display of breadcrumbs. =cut sub expand_variables { my ( $self, $site, $page, $data ) = (@_); # # Get the page-variables in the template. # my %hash = %$data; # # Look for a value of "read_file" in each key. # foreach my $key ( keys %hash ) { if ( $key =~ /^crumbs$/i ) { my $loop; my $val = $hash{ $key }; my $link = "/"; foreach my $path ( split( /,/, $val ) ) { $path =~ s/^\s+|\s+$//g; if ( $path =~ /Home/i ) { } else { if ( $path =~ /(.*)\[(.*)\]/ ) { $link .= "/" . $1; } else { $link .= "/" . $path; } } $link =~ s/\/\//\//g; if ( $path =~ /\[(.*)\]/ ) { $path = $1; } else { $path = ucfirst($path); } push( @$loop, { title => $path, link => $link } ); } $hash{ 'breadcrumbs' } = $loop if ($loop); delete $hash{ $key }; } } return ( \%hash ); } # # Register the plugin. # Templer::Plugin::Factory->new() ->register_plugin("Templer::Plugin::Breadcrumbs");