in reply to Re: Mojolicious with Template Toolkit
in thread Mojolicious with Template Toolkit

Thanks. Following the blog post in the OP, I have used this plugin and it seems to be working well. I do have two minor follow-up questions, though.

My preference has long been to keep the templates outside the document root and Mojo seems happy with this too. However, I also usually refer to their path(s) relative to the document root (eg. $ENV{DOCUMENT_ROOT}/../templates/foo) so there are no absolute paths running around. But $ENV{DOCUMENT_ROOT} is undefined in my Mojolicious app. The question is therefore how can I refer to the document root dynamically inside Mojolicious?

Secondly, it seems that TtRenderer expects/insists on the template file extension being .html.tt - is there a way to over-ride this either in TtRenderer or in Mojolicious itself?


🦛

Replies are listed 'Best First'.
Re^3: Mojolicious with Template Toolkit
by marto (Cardinal) on Mar 08, 2023 at 11:18 UTC

    Use Mojolicious::Renderer path attribute to manage your target template directories. The second question I don't know, you'd need to look at the code of the module to figure out how to do this.

      Thanks, but I am already able to set absolute paths OK even without that attribute. The problem is specifying paths relative to the document root.

      How can I refer to the document root dynamically inside Mojolicious?


      🦛

        Mojolicious offers Helpers of Mojolicious::Guides::Tutorial which are functions which you setup during startup. I am not sure if this is a good way, but I would do something like:

        use Mojo::Base 'Mojolicious'; # This method will run once at server start sub startup { my $self = $_[0]; $self->app->config( hypnotoad => { listen => ['http://'.$SERVER_ADDRESS.':'.$SERVER_PORT] } ); my $DOCUMENT_ROOT = '...'; $self->helper(document_root => sub { $DOCUMENT_ROOT }); # I also add a logger object my $logger = Mojo::Log->new; $self->helper(applog => sub { $logger }); ... }

        And at any route endpoint (in its own separate file):

        use Mojo::Base 'Mojolicious::Controller'; sub logout { my $c = $_[0]; my $log = $c->applog; my $dr = $c->document_root; ... $c->render(...) return 1; }

        There is also Mojolicious::Plugin::DefaultHelpers with some helpers before reinventing the wheel

        FWIW, the template system I use is Text::Xslate via MojoX::Renderer::Xslate. It's surely idiosyncratic and the language associated with it is aptly named Kolon! I *think* I heard choroba saying that it was quite fast when I was looking around. And I use it for 3 years now, quite happy and with colon painless.

        bw, bliako