Andy Wardley > Template-Toolkit-2.00 > Template::Plugin::URL



Annotate this POD


New  57
Open  29
View/Report Bugs
Module Version: 2.02   Source   Latest Release: Template-Toolkit-2.26


Template::Plugin::URL - constructs query URL's with parameters


    [% USE url('/cgi-bin/') %]

    [% url(debug = 1, id = 123) %]
       # ==> /cgi/bin/

    [% USE mycgi = url('/cgi-bin/', mode='browse', debug=1) %]

    [% mycgi %]
       # ==> /cgi/bin/

    [% mycgi(mode='submit') %]
       # ==> /cgi/bin/

    [% mycgi(debug='d2 p0', id='D4-2k[4]') %]
       # ==> /cgi-bin/


The URL plugin can be used to construct complex URLs from a base stem and a hash array of additional query parameters.

The constructor should be passed a base URL and optionally, a hash array reference of default parameters and values. Used from with a Template Documents, this would look something like the following:

    [% USE url('') %]
    [% USE url('/cgi-bin/', mode='browse') %]
    [% USE url('/cgi-bin/', mode='browse', debug=1) %]

When the plugin is then called without any arguments, the default base and parameters are returned as a formatted query string.

    [% url %]

For the above three examples, these will produce the following outputs:

Additional parameters may be also be specified:

    [% url(mode='submit', id='wiz') %]

Which, for the same three examples, produces:

A new base URL may also be specified as the first option:

    [% url('/cgi-bin/', test=1) %]



The ordering of the parameters is non-deterministic due to fact that Perl's hashes themselves are unordered. This isn't a problem as the ordering of CGI parameters is insignificant (to the best of my knowledge). All values will be properly escaped thanks to some code borrowed from Lincoln Stein's e.g.

    [% USE url('/cgi-bin/') %]
    [% url(name="Elrich von Benjy d'Weiro") %]

Here the spaces and "'" character are escaped in the output:


Alternate name may be provided for the plugin at construction time as per regular Template Toolkit syntax.

    [% USE mycgi = url('cgi-bin/') %]

    [% mycgi(debug=1) %]

Note that in the following line, additional parameters are seperated by '&', while common usage on the Web is to just use '&'. '&' is actually the Right Way to do it. See this URL for more information:



Andy Wardley <>


$Revision: 2.2 $


Copyright (C) 2000 Andy Wardley. All Rights Reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.



syntax highlighting: