> I have written a custom dynamic filter ; its goal being
internationalization of templates. Now I need that filter to find out about
its calling template (I don't ask for the line number in the template).
> I found out that filters get a Template::Context object as their first
parameter. A few dump later I managed to get the calling template filename
via the component entry of the stash. Here is my code :

>       sub myCustomFilter {
>           my ($context, @arg) = @_;
>
>           my $stash = $context->stash();
>           my $component = $stash->get('component');
>           my $template_name = $component->{'name'};

> I also need to find out the full path of the calling template. 
> How can I get it from the Template::Context object ?

You can examine $context->{LOAD_TEMPLATES} to find current component and
then get it's full path. This sample code works when called from template,
but not from BLOCK:

        my $stash = $context->stash();
        my $component = $stash->get('component');
        my ($provider) = grep { $_->{HEAD}[2] eq $component } @{
$context->{LOAD_TEMPLATES} };
        my $path = $provider->{HEAD}[1] if $provider;

Anyway, linking to file name seems to be a bad practice, because some
templates may have no file name at all - it could be hard-coded in perl code
or served from database.


-- 
Sergey Martynoff


_______________________________________________
templates mailing list
[email protected]
http://lists.template-toolkit.org/mailman/listinfo/templates

Reply via email to