Re: Filter Syntax
Mathew Robertson <[email protected]> Fri, 10 Aug 2007 14:53:50 +1000
| Newsgroups | gmane.comp.lang.perl.modules.html-template |
|---|---|
| Organization | Nielsen//NetRatings |
| Message-ID | <[email protected]> |
Hi Chris, I don't think anyone has answered yet...
The purpose of a filter is simply to modify the template-text-blob,
before being compiled into its internal form, ie: the only thing passed
into your filter, is the template. Here is a simple/common filter:
my $filter = sub {
my $text_ref = shift;
my $match = qr/%([-\w\/\.+]+)%/;
$$text_ref =~ s/$match/<TMPL_VAR NAME="$1">/g;
};
This filter replaces %some_var% with <TMPL_VAR some_var>. Notice that
the sub is called with only a text-ref.
>From your example below, it looks like you are initialising the sub =>
... the result of the function call to initialize_template_header().
What does this function return? for this syntax to work, it will need to
return a sub-ref.
To answer your last question, you need to make use of "use vars ..." to
stash your H::T reference in, eg:
{
...
use vars qw($HT);
$HT = H::T->new(... filter => some_filter );
...
$HT->output();
}
sub some_filter {
my $textref = shift;
use vars qw($HT);
... access $HT ...
... modify $$textref or something...
}
But I'm not sure why you need to access H::T from within your filter. I
suspect that you are trying to something with filters, that it simply
wont do -> I might be able to suggest an alternative solution if I know
what the problem was.
cheers,
Mathew Robertson
Chris Faust wrote:
>
> Folks,
>
>
>
> I'm having (what I hope is) a syntax problem.
>
>
>
> I'm trying to use the "filter" option to run a sub on a template at
> create time, but I want the sub in another package and I need to some
> other objects with it.
>
>
>
> From reading the docs I thought that the HTML::Template object would
> simply be the first incoming param, but its not.
>
>
>
> For example, here is how I wanted to create my template object:
>
>
>
> my $template_header = new HTML::Template(filename => 'CommonHeader.tmpl',
> filter => { sub =>
> scripts::MyPackage->initialize_template_header($r,$db,$site_settings,$user_session_data,\%form_data)
> },
> );
>
>
>
> Then in "MyPackage.pm", I would have
>
>
>
> sub initialize_template_header {
> my
> ($self,$template,$r,$db,$site_settings,$user_session_data,$form_data)
> = @_;
> ....
>
> }
>
>
>
> $self is correctly defined, but $template becomes the first object I
> send in ($r in this case).
>
>
>
> How do I get the HTML::Template object??
>
>
>
> TIA!!
>
> -Chris
>
>
>
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems? Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >> http://get.splunk.com/
> ------------------------------------------------------------------------
>
> _______________________________________________
> Html-template-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/html-template-users
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Html-template-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/html-template-users