2011-09-08 3 views
2

Comment charger un template depuis Dancer :: Plugin qui ne se trouve pas dans le répertoire 'app/views' sans changer de répertoire par défaut?Plugin Dancer chargeant un template

Ce ne fonctionne pas/il ajoute le chemin de vues par défaut sur le chemin du fichier /:

package Dancer::Plugin::MyPlugin; 
use Dancer ':syntax'; 
use Dancer::Plugin; 

any '/test' => sub { 
    template '/path_to_template/test.tt' => { 
    }; 
}; 

register_plugin; 

1; 

Répondre

4

Vous pouvez appeler engine pour obtenir l'objet Dancer::Template et appeler sa méthode render, .: par exemple

my $template_engine = engine 'template'; 
my $content = $template_engine->render('/path/to/template.tt', { 'name' => 'value' }); 

Ensuite, pour revenir le contenu rendu dans la mise en page par défaut, appelez apply_layout:

return $template_engine->apply_layout($content); 
3

Actuellement, je pense que vous auriez besoin pour régler le paramètre views avant l'appel de modèle, changez-le retour après, par exemple:

my $views_dir = setting('views');  # remember current setting 
setting 'views' => '/some/other/path'; # temporarily use our desired path 
my $content = template 'test', $params; # render the view 
setting 'views' => $views_dir;   # restore previous setting 
return $content; 

Cela, cependant, est moche.

Je pense qu'il serait logique pour le mot-clé template d'accepter une option system_path, un peu comme send_file le fait, donc on pourrait dire, par exemple:

template '/path/to/view.tt', $params, { system_path => 1 }; 

J'ai soulevé un problème pour cela, et la volonté regarder pour l'obtenir mis en œuvre pour la prochaine version: https://github.com/sukria/Dancer/issues/645

(Divulgation: Je fais partie de l'équipe de développement Dancer)

+0

10q pour l'effort! ^^ Je pense que j'ai une meilleure idée: chaque plugin pourrait avoir son propre répertoire 'views' et dir 'public' comme une application, n'est-ce pas? – bliof

Questions connexes