NAME
Plack::App::Directory::Template - Serve static files from document root with directory index template
VERSION
version 0.24
SYNOPSIS
use Plack::App::Directory::Template;
my $template = "/path/to/templates"; # or \$template_string
my $app = Plack::App::Directory::Template->new(
root => "/path/to/htdocs",
templates => $template, # optional
filter => sub {
# hide hidden files
$_[0]->{name} =~ qr{^[^.]|^\.+/$} ? $_[0] : undef;
}
)->to_app;
DESCRIPTION
This does what Plack::App::Directory does but with more fancy looking directory index pages, based on Template::Toolkit. Parts of the code of this module are copied from Plack::App::Directory.
CONFIGURATION
- root
-
Document root directory. Defaults to the current directory.
- templates
-
Template directory that must include at least a file named
index.html
or template given as string reference. - filter
-
A code reference that is called for each file before files are passed as template variables One can use such filter to omit selected files and to modify and extend file objects.
TEMPLATE VARIABLES
The following variables are passed to the directory index template:
- files
-
List of files, each given as hash reference with the following properties. All directory names end with a slash (
/
). The special directory./
is included and../
as well, unless the root directory is listed.- file.name
-
Local file name without directory.
- file.url
-
URL path of the file.
- file.mime_type
-
MIME type of the file.
- file.stat
-
File status info as given by File::Stat (dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksize, and block).
- file.permission
-
File permissions (given by
file.stat.mode & 0777
). For instance one can print this in a template with[% file.permission | format("%04o") %]
.
- root
-
The document root directory as configured (given as absolute path).
- dir
-
The directory that is listed (given as absolute path).
- path
-
The request path (
request.path
). - request
-
Information about the HTTP request as given by Plack::Request. Includes the properties
parameters
,base
,scheme
,path
, anduser
.
The following example should clarify the meaning of several template variables. Given a Plack::App::Directory::Template to list directory /var/files
, mounted at URL path /mnt/
:
builder {
mount '/mnt/'
=> Plack::App::Directory::Template->new( root => '/var/files' );
...
}
The request http://example.com/mnt/sub/
to subdirectory would result in the following template variables (given a file named #foo.txt
in this directory):
[% root %] /var/files
[% dir %] /var/files/sub
[% path %] /sub/
[% urlpath %] /mnt/sub/
[% file.name %] #foo.txt
[% file.url %] /mnt/sub/%23foo.txt
Try also Plack::Middleware::Debug::TemplateToolkit to inspect template variables for debugging.
METHODS
template_vars( %vars )
This method is internally used to construct a hash reference with template variables. The constructed hash must contain at least the files
array. The method can be used as hook in subclasses to modify and extend template variables.
SEE ALSO
Plack::App::Directory, Plack::Middleware::TemplateToolkit
AUTHOR
Jakob Voß
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Jakob Voß.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.