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>
編集この例では、解決策を示します。
テンプレート内で何をしているのかわからないので、既存のコードの出力に変更を適用するのが一番の方法です。つまり、テンプレートの出力を現在印刷していた時点で、上に示したメソッドを安全に追加できるということです。テンプレートに変更を実際に書き込むために、1回限りの更新として指定されたコードを使用できます。foo
ではなく値がHTML :: Templateパラメータになります。
すべてのテンプレートファイルを手動で変更する必要はありません。 Perlには、変更が必要な場所を特定するのに役立つHTMLパーサーがあります。 ************************************************************************************************************** –
@SinanÜnür下の私の例はこれを行うことができる –
@ Dr.Avalanche確かに。一般的に、私はそれらを使用しなければならない場合を除き、あなたの答えを投票しました。 –