-1

私は CGI とHTML::Templateを使用しています。タグを含むすべてのテンプレートに以下のタグを追加する必要があります<form>(タグはタグ内に追加する必要があります<form>)。

<input type="hidden" value="TO_BE_PARSED_FROM_CGI">

すべてのテンプレート ファイルを手動で編集したくありません。HTML::Templateでこれを行う方法はありますか? HTML::Template のコンストラクターの作成中に渡すことができるフックの種類は?

4

2 に答える 2

1

HTML::Template でこれを行う方法はありますか?

これまた?;) いいえ、必要なことを行うには、DOM を読み取って操作する必要があります。HTML::Template は、特定のタグ/マーカーでのみ機能します。変数に格納$template->output()します。Mojo::DOMなどのパーサーで変数を読み取り、フォームのインスタンスを見つけてコンテンツを追加します。次の例は、ソリューションを示しています。

#!/usr/bin/perl
use strict;
use warnings;
use Mojo::DOM;

# fake output of $template->output;

my $html = << 'HTML';
  <html>
    <head>
      <title>test</title>
    </head>
    <body>
      <form method="post">
        <input type="text" id="name">
      </form>
    </body>
  </html>
HTML

# you say you want to parse this from CGI
my $value ='foo'; 

# what you want to add
my $addme = "<input type='hidden' value='$value'>";

my $dom = Mojo::DOM->new();

$dom->parse( $html )->at('form')->child_nodes->first->append( $addme )->root;
print $dom;

プリント:

  <html>
    <head>
          <title>test</title>
        </head>
        <body>
          <form method="post">
            <input type="hidden" value="foo"><input id="name" type="text">
          </form>
        </body>
  </html>

編集。

テンプレート内で何を行っているかはわかりませんので、最も健全な方法は、既存のコードの出力に基づいて変更を行うことです。つまり、現在テンプレートの出力を印刷する前に、上記に示したメソッドを安全に追加できます。foo1 回限りの更新として指定されたコードを使用して、変更を実際にテンプレートに書き戻すことができ、HTML::Template パラメータではなく値を使用できます。

于 2016-09-16T12:31:11.163 に答える