Ответ 1
Вот что я нашел, так как я перевел свою практику с CGI.pm на TT, и то, что я также изучил, используя HTML:: Mason, HTML:: Template, Text:: Template, и работа с ERB и HAML в Rails.
- Чем больше логики вы используете в своих дисплеях, тем более, если она написана на определенном языке с дисплеем, тем меньше вы будете иметь удовольствие.
- Я пришел, чтобы предпочесть HAML для уменьшения размера содержимого моих шаблонов [В HAML закрывающие теги подразумеваются отступом]
- Выполняйте большую часть логики для вычисления различных динамических битов страницы перед тем, как заглянуть в шаблон на родном языке приложения. [вызвать методы просмотра, прежде чем заниматься рендерингом].
- В отношении (3), используя методы, вместо встроенной логики отображения/воспроизведения вы можете сделать свои шаблоны декларативными, поэтому, хотя вы можете выполнять логику в середине рендера, ваши шаблоны не имеют пучок логики IF/THEN/ELSE, вызывающий беспорядок.
Представьте себе достаточно маленькую, надуманную веб-страницу, состоящую из заголовка, нижнего колонтитула и тела. Предположим, что нижний колонтитул полностью статичен, тело изменяется каждый раз, когда загружается новая страница, но заголовок изменяется только тогда, когда пользователь входит в/из.
Вы можете представить заголовок, содержащий код следующим образом:
<header>
[% IF $user.is_logged_in THEN %]
Hello [% $user.name %] - <a href="/logout/user/[% $user.id %]">Log Out</a>
[% ELSE %]
Please <a href="/user/login">Log In</a>
[% END %]
</header>
Но вам лучше в долгосрочной перспективе сделать это в header.tt:
<header>
[% user_info($user) |html %]
</header>
и это в View:: Helpers:: Header.pm:
sub user_info {
my $user = shift;
if ($user->{is_logged_in} ) {
return "Hello $user->{name} - " . logout_link($user->{id});
}
else {
return "Please " . login_link();
}
}
sub logout_link {
my $userid = shift;
return qq(<a href="/logout/user/[% $userid %]">Log Out</a>)
}
Вы можете, конечно, реализовать помощников вида в TT, а не в чистом Perl, и у меня нет никаких чисел для вас, но если вы уже сделали всю свою логику в Perl, вы можете реорганизовать Perl в модули (если его еще нет), вместо того, чтобы перекодировать их в TT.