NAME

App::ZofCMS::Plugin::FileTypeIcon - present users with pretty icons depending on file type

SYNOPSIS

# first of all, get icon images (they are also in the examples/ dir of this distro)

    wget http://zoffix.com/new/fileicons.tar.gz;tar -xvvf fileicons.tar.gz;rm fileicons.tar.gz;

In your ZofCMS Template or Main Config File:

    plug_file_type_icon => {
        files => [  # mandatory
            qw/ foo.png bar.doc beer.pdf /,
            sub {
                my ( $t, $q, $conf ) = @_;
                return 'meow.wmv';
            },
        ],
        # all the defaults for reference:
        resource    => 'pics/fileicons/',
        prefix      => 'fileicon_',
        as_arrayref => 0, # put all files into an arrayref at $t->{t}{ $prefix }
        only_path   => 0, # i.e. do not generate the <img> element
        icon_width  => 16,
        icon_height => 16,
        code_after  => sub {
            my ( $t, $q, $conf ) = @_;
            die "Weeee";
        },
        xhtml       => 0,
    },

In your HTML::Template file:

    <tmpl_var name='fileicon_0'>
    <tmpl_var name='fileicon_1'>
    <tmpl_var name='fileicon_2'>
    <tmpl_var name='fileicon_3'>

DESCRIPTION

The module is a plugin for App::ZofCMS that provides a method to show pretty little icons that vary depending on the extension of the file (which is just a string as far as the module is concerned).

This documentation assumes you've read App::ZofCMS, App::ZofCMS::Config and App::ZofCMS::Template

GETTING THE IMAGES FOR THE ICONS

There are 69 icons plus the "unknown file" icon in an archive that is in examples/ directory of this distribution. You can also get it from my website:

    wget http://zoffix.com/new/fileicons.tar.gz;
    tar -xvvf fileicons.tar.gz;
    rm fileicons.tar.gz;

As well as the original website from where I got them: http://www.splitbrain.org/projects/file_icons

Alternatively, you may want to draw your own icons; in that case, the filenames for the icons are made out as $lowercase_filetype_extension.png. If you draw some icons yourself and would like to share, feel free to email them to me at zoffix@cpan.org.

These images would obviously need to be placed in web-accessible directory on your website.

FIRST-LEVEL ZofCMS TEMPLATE AND MAIN CONFIG FILE KEYS

plugins

    plugins => [ qw/FileTypeIcon/ ],

You obviously need to include the plugin in the list of plugins to execute. You're likely to use this plugin with some other plugins, so make sure to get priority right.

plug_file_type_icon

    plug_file_type_icon => {
        files => [  # mandatory
            qw/ foo.png bar.doc beer.pdf /,
            sub {
                my ( $t, $q, $conf ) = @_;
                return 'meow.wmv';
            },
        ],
        # all the defaults for reference:
        resource    => 'pics/fileicons/',
        prefix      => 'fileicon_',
        as_arrayref => 0, # put all files into an arrayref at $t->{t}{ $prefix }
        only_path   => 0, # i.e. do not generate the <img> element
        icon_width  => 16,
        icon_height => 16,
        code_after  => sub {
            my ( $t, $q, $conf ) = @_;
            die "Weeee";
        },
        xhtml       => 0,
    },

    # or set config via a subref
    plug_file_type_icon => sub {
        my ( $t, $q, $config ) = @_;
        return {
            files => [
                qw/ foo.png bar.doc beer.pdf /,
            ],
        };
    },

Plugin won't run if plug_file_type_icon is not set or its files key does not contain any files. The plug_file_type_icon first-level key takes a hashref or a subref as a value. If subref is specified, its return value will be assigned to plug_file_type_icon as if it was already there. If sub returns an undef, then plugin will stop further processing. The @_ of the subref will contain (in that order): ZofCMS Tempalate hashref, query parameters hashref and App::ZofCMS::Config object. The keys of this hashref can be set in either ZofCMS Template or Main Config Files; keys that are set in both files will take their values from ZofCMS Template file. The following keys/values are valid in plug_file_type_icon:

files

    files => [
        qw/ foo.png bar.doc beer.pdf /,
        { 'beer.doc' => 'doc_file' },
        sub {
            my ( $t, $q, $conf ) = @_;
            return 'meow.wmv';
        },
    ],

Mandatory. The files key takes either an arrayref, a subref or a hashref as a value. If its value is NOT an arrayref, then it will be converted to an arrayref with just one element - the original value.

The elements of files arrayref can be strings, hashrefs or subrefs. If the value is a subref, the sub will be executed and its return value will replace the subref. The @_ of the sub will contain $t, $q, $conf (in that order) where $t is ZofCMS Template hashref, $q is a hashref of query parameters and $conf is App::ZofCMS::Config object.

If the element is a hashref, it must contain only one key/value pair and the key will be treated as a filename to process and the value will become the name of the key in t ZofCMS special key (see prefix key below). If the element is a regular string, then it will be treated as a filename to process.

resource

    resource => 'pics/fileicons/',

Optional. Specifies the path to directory with icon images. Must be relative to index.pl file and web-accessible, as this path will be used in generating path/filenames to the icons. Defaults to: pics/fileicons/

prefix

    prefix => 'fileicon_',

Optional. When the plugin generates path to the icon or the <img> element, it will stick it into t ZofCMS special key. The prefix key takes a string as a value and specifies the prefix to use for keys in t ZofCMS special key. If as_arrayref key (see below) is set to a true value, then prefix will specify the name of the key, in t ZofCMS special key where to store that arrayref. When the element of files arrayref is a hashref, the value of the only key in that hashref will become the name of the key in t special key WITHOUT the prefix; otherwise, the name will be constructed by using prefix and a counter; the elements of files arrayref that are hashrefs do not increase that counter. Defaults to: fileicon_ (note that underscore at the end)

as_arrayref

    as_arrayref => 0,

Optional. Takes either true or false values. When set to a true value, the plugin will create an arrayref of generated <img> elements (or just paths) and stick it in t special key under prefix (see above) key. Defaults to: 0

only_path

    only_path   => 0,

Optional. Takes either true or false values. When set to a true value, the plugin will not generate the code for <img> elements, but instead it will only provide paths to appropriate icon image. Defaults to: 0

icon_width and icon_height

    icon_width  => 16,
    icon_height => 16,

Optional. All the icon images to which I referred you above are sized 16px x 16px. If you are creating your own icons, use icon_width and icon_height keys to set proper dimensions. You cannot set different sizes for individual icons, but you can use Image::Size in the code_after sub (see below). Defaults to: 16 (for both)

code_after

    code_after => sub {
        my ( $t, $q, $conf ) = @_;
        die "Weeee";
    },

Optional. Takes a subref as a value, this subref will be run after all filenames in files arrayref have been processed. The @_ will contain (in that order) $t, $q, $conf where $t is ZofCMS Template hashref, $q is hashref of query parameters and $conf is App::ZofCMS::Config object. By defaults: is not specified.

xhtml

    xhtml => 0,

Optional. If you wish to close <img> elements as to when you're writing XHTML, then set xhtml argument to a true value. Defaults to: 0

GENERATED HTML CODE

The plugin generates the following HTML code:

<img class="file_type_icon" src="pics/fileicons/png.png" width="16" height="16" alt="PNG file" title="PNG file">

REPOSITORY

Fork this module on GitHub: https://github.com/zoffixznet/App-ZofCMS

BUGS

To report bugs or request features, please use https://github.com/zoffixznet/App-ZofCMS/issues

If you can't access GitHub, you can email your request to bug-App-ZofCMS at rt.cpan.org

AUTHOR

Zoffix Znet <zoffix at cpan.org> (http://zoffix.com/, http://haslayout.net/)

LICENSE

You can use and distribute this module under the same terms as Perl itself. See the LICENSE file included in this distribution for complete details.