12

HTMLをオンザフライで1つずつ生成する比較的大規模なレガシーPerl/CGI /DBIWebアプリケーションがあります。HTML 5 / CSS 3に準拠するために、作成中のHTMLを作り直しています。これは、ある種のテンプレートシステムに移行する良い機会です。完全な書き直しをしたくないので、Catalystなどのフレームワークに移行したくありません。

PerlTemplateToolkitが私たちの最も影響の少ない手段かもしれないと私は考えています。実現可能性を研究するために、由緒あるBadgerBookを読み直しています。

私の質問はこれです。ここで誰かが「古い学校」のPerlWebコードをTemplateToolkitに移行しましたか?必要なリライト/リワークを最小限に抑えるために共有できるトリックはありますか?テンプレートツールキットについても100%決定していません。考慮すべき代替案がある場合はどうなりますか?

具体的には、どのような問題を解決しようとしていますか?無効なHTMLを生成しているので、それをクリーンアップする必要があります。クリーニングを行っているので、完全に有効なHTML 5と、実行可能な範囲で有効なCSS3とJavascriptを作成したいと考えています。jQuery、jQuery UIウィジェット、およびjQueryを介したAJAXを使用します。ビューレイヤー自体がないことを除いて、典型的なページコントローラーMVCアーキテクチャがあります。ある種のテンプレートシステムに行きたいのですが、移行するためにすべて(または何でも!)を書き直したくありません。

ありがとう!エドバーナード、ミネソタ州キャノンフォールズ

4

2 に答える 2

11

これが、CGI.pmからTTに練習を移したときに見つけたものです。また、HTML :: Mason、HTML :: Template、Text :: Templateを使用して、 RailsのERBとHAML。

  1. ディスプレイに含まれるロジックが多いほど、特にディスプレイ固有の言語で記述されている場合は、楽しくなくなります。
  2. テンプレートのコンテンツのサイズを縮小するためにHAMLを好むようになりました[HAMLでは、終了タグはインデントによって暗示されます]
  3. テンプレートにドロップする前に、アプリケーションの母国語で、ページのさまざまな動的ビットを計算するためのロジックをできるだけ多く実行します。[レンダリングを行う前に、viewメソッドを呼び出します]。
  4. (3)に関連して、インライン表示/レンダリングロジックの代わりにメソッドを使用することで、テンプレートを宣言型にすることができるため、レンダリングの途中でロジックを実行している場合でも、テンプレートには大量のIFがありません。 / THEN/ELSEロジックが混乱を引き起こします。

ヘッダー、フッター、および本文で構成される、適度に小さく工夫されたWebページを想像してみましょう。フッターが完全に静的であり、新しいページが読み込まれるたびに本文が変更され、ヘッダーはユーザーがログイン/ログアウトしたときにのみ変更されると仮定します。

次のようなコードを含むヘッダーを想像できます。

<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>)
}

もちろん、純粋なPerlではなくTTでビューヘルパーを実装することもできます。私には何の数字もありませんが、Perlですべてのロジックを既に実行している場合は、Perlを次のようにリファクタリングできます。モジュール(まだ存在しない場合)は、TTで再コーディングする代わりに。

于 2012-11-24T00:23:59.110 に答える
3

テストスイートの一部として、HTML::LintやHTML::TidyなどのHTMLバリデーターを検討してください。

于 2012-11-26T16:02:03.260 に答える