2013-05-15 2 views
1

Catalyst 애플리케이션을 구축 중이며 Template Toolkit을 내 템플릿 시스템으로 사용하고 싶습니다. 그러나 내 응용 프로그램은 많은 도메인에 응답하고 도메인에 따라 다른 Template Toolkit 구성의 다른 콘텐츠를 표시합니다. 본질적으로, domain.com과 domain2.com을 가지고 있다면, 나는 각각 자신의 설정을 갖고 싶습니다. 누구든지 여전히 Catalyst의보기 기능을 사용할 수있는 동안 이것을 수행하는 우아한 방법을 알고 있습니까? 감사! 루트 컨트롤러이 넣어촉매 앱 템플릿 툴킷 도메인마다 다른 설정

UPDATE

, 나는 내가 Template Toolkit 객체 이리저리 설정에서 사이트 래퍼를 변경할 수 있음을 알아 냈어요. 그러나, 그것은 단지 lib/myapp/View/HTML.pm에있는 초기 래퍼를 사용하는 것 같습니다 (나는 그것이 초기화 된 래퍼를 사용하기 때문에 추측하고 있습니다). 어쨌든이 요청에 대한 래퍼를 변경했음을 인식하게하려면 어떻게해야합니까?

sub begin :Private { 
    my ($self, $c) = @_; 

    $c->view('HTML')->config->{WRAPPER} = $c->req->uri->host . '/site/wrapper'; 
} 

답변

1

전 세계적으로 그렇게하지 않고 각 기본 템플릿에 WRAPPER을 직접 선언하는 경향이 있습니다.

... 나는 훨씬 더 많은 유연성을 제공합니다. 그러나


...

나는 사용자 지정 서식 파일 경로를 사용하고 큰 성공이 있었다 또 다른 옵션, 템플릿의 도메인 특정 버전 이상 타고 기본적으로, 그들은 존재할 수있는 있도록. 이렇게하면 필요한만큼 다양한 코드를 주입 ​​할 수있는 유연성이 제공됩니다.

===의 MyApp ::보기 :: TT.pm ===

sub process { 
    my ($self, $c) = @_; 

    # capture original path, identify host 
    my @orig_include_path = @{$self->include_path}; 
    my $domain = $c->req->uri->host; 

    # augment every path with domain/path 
    @{$self->include_path} = map { ("$domain/$_", $_) } @orig_include_path; 

    $self->SUPER::process($c); 

    # revert path 
    @{$self->include_path} = @orig_include_path; 
} 

WRAPPER에 대한 모든 호출하는 PROCESS 또는 INCLUDE가 있는지 확인하는 것입니다있는 최종 결과 도메인 특정 버전 또는 제네릭 생산은 $domain/wrapper.tt를 찾거나 그런 파일이 존재하지 않는 경우는 다시 wrapper.tt에 떨어질 것이다

[%- WRAPPER wrapper.tt -%] 

을 즉. 의 그

  • foo는/바/baz.tt
  • domain1의/foo는/바/baz.tt
  • 도메인 2/foo는/바/baz.tt

희망이 자동으로 확장 유능한.

+0

위대한 답변! 감사! – srchulo