• ベストアンサー

HTML::Templateの空行について

HTML::Templateを利用しています。 テンプレート側で<TMPL_IF>を使用すると、不要な改行が入ってしまい、困っています。 ■テンプレートサンプル---------------------------- <div> あああああああああああ </div> <TMPL_IF NAME="PATERN_A"> 出力パターン1<br> <TMPL_ELSE> 出力パターン2<br> </TMPL_IF> <TMPL_IF NAME="PATERN_B"> 出力パターン3<br> <TMPL_ELSE> 出力パターン4<br> </TMPL_IF> <div> いいいいい </div> ■出力結果---------------------------- <div> あああああああああああ </div>                    ←空行 出力パターン2<br>                    ←空行                    ←空行 出力パターン3<br>                    ←空行 <div> いいいいい </div> 実害はないのですが、この空行をなくすことはできないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

outputした後に空行だけを削除すればいいのではないでしょうか。 $html = $template->output; $html =~ s/\n\n/\n/g; print $html; ドキュメント全体で一律空行が削除されますが、<pre>などを使っている場合以外は特に問題はないはずです。

yasagure-kun
質問者

お礼

ああ。なるほど。 その手がありますね。 何とか解決しそうな気がします。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

bgbgさん、あるんですよ・・・ <textarea></textarea>の間に、空白行を含む文字列がある場合ですが・・・ これが致命的だった事があったりして・・・ 確かに普通は気にすることは無いと思います。

yasagure-kun
質問者

お礼

逆に言えば、<textarea></textarea>がある場合に気をつければ良い ということですよね。 うまくいきそうな気がしてみました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

気に入らないとは思いますが・・・ <div> あああああああああああ </div> <TMPL_IF NAME="PATERN_A">出力パターン1<br><TMPL_ELSE>出力パターン2<br></TMPL_IF> <TMPL_IF NAME="PATERN_B">出力パターン3<br><TMPL_ELSE>出力パターン4<br></TMPL_IF> <div> いいいいい </div> ではどうでしょうか。 まあ、いろんなホームページで、「表示」「ソース」で見ると、すごい空白があるページが沢山ありますから、開発者も閲覧者も見えない改行くらい多めに見てあげても良いんじゃないでしょうか・・・ p.s. でも思わぬ影響があるのが携帯版ページで、たいしたデータ量でないはずなのに、表示が遅かったり、エラーになったりする場合が・・・

yasagure-kun
質問者

お礼

返信が遅れまして申し訳ありません。 そうですよねー。 それしかないですよねー。 多めに見て欲しいですよねー。 クライアントからSEO上に不利になるから何とかしろというお達しが でまして。 個人的には、SEO上の影響は大してないと考えているのですが、 明確な反論資料もないもので、弱ってます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • HTML::Templateのループと配列のハッシュの作成

    下記の?????の所にpushで配列のハッシュを作成しようと考えていましたが、うまくいきません。 下記のソース自体が的外れでしたら申し訳ございません。?????以外の場所も指摘して頂ければ幸いです。 よろしくお願い致します。 <TMPL_LOOP NAME="loop"> <TMPL_VAR NAME="one"><BR> <TMPL_VAR NAME="two"><BR> <TMPL_VAR NAME="three"><BR> </TMPL_LOOP> use HTML::Template; @data = ('aa<>ab<>ac','ba<>bb<>bc','ca<>cb<>cc'); foreach $xxx (@data) { my ($one,$two,$three) = split(/<>/,$xxx); ???????????????????? } my $template = HTML::Template->new(filename=>'sample.html'); $template->param(loop=>\@loop); print "Content-Type: text/html\n\n"; print $template->output;

    • ベストアンサー
    • Perl
  • HTML::TemplateのTMPL_LOOPについて

    PerlモジュールのHTML::Templateを利用していますが、多重ループの書き方がわかりません。 以下のようなループがある場合、どのようにperlを記述したらいいでしょうか。 <TMPL_LOOP NAME=LOOPA> <TMPL_VAR NAME=title> <TMPL_LOOP NAME=LOOP_GUEST> <TMPL_VAR NAME=guest_name> </TMPL_LOOP> <TMPL_VAR NAME=time> </TMPL_LOOP> ドキュメントを見ると下記のように記述するようですが、下記を値それぞれではなく、配列を利用する場合にはどのように記述すれば良いでしょうか。 $template->param(LOOP => [ { name => 'Bobby', nicknames => [ { name => 'the big bad wolf' }, { name => 'He-Man' }, ], }, ], );

    • ベストアンサー
    • Perl
  • HTML::Templateの初歩的な質問

    HTML::Templateを使用してサイトを構築しようとしてるのですが、うまくいきません。 例1のようにしたいのですが、どこが間違っているかを指摘していただきたく書き込ませて頂きました。 ちなみに例2ではうまく作動しています。 よろしくお願い致します。 サンプルコード ★sample.html★ <TMPL_LOOP name=arr> <p><TMPL_VAR name=val></p> </TMPL_LOOP> ★例1★ my $template = HTML::Template->new(filename => 'sample.html'); @arr = [ {val=>'1'},{val=>'2'},{val=>'3'} ]; $template->param(arr => \@arr); print "Content-Type: text/html\n\n"; print $template->output; ★例2★ my $template = HTML::Template->new(filename => 'sample.html'); $template->param(arr => [ {val=>'1'},{val=>'2'},{val=>'3'} ] ); print "Content-Type: text/html\n\n"; print $template->output;

    • ベストアンサー
    • Perl
  • HTML::Templateでカレンダー出力したい

    Calendar::SimpleとHTML::Templateを利用しtableタグを使ったカレンダー表示を行いたいのですが、1週間ごとに<tr>タグで区切るループの記載の仕方がわかりません。 見本にした他所様のbaseサブルーチンでは1週間ごとに<tr>タグで区切られたきれいなカレンダー表示がされますが、myplanサブルーチンでは現状<tr>タグで区切る部分が作られていないため、日にちの数字が1週間ごとに区切られずにずらっと横並びとなってしまっている状態です。 Calendar::Simple http://perldoc.jp/docs/modules/Calendar-Simple-1.07/Simple.pod HTML::Template http://perldoc.jp/docs/modules/HTML-Template-2.6/HTML/Template.pod baseでの表示 日 月 火 水 木 金 土     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 現状のmyplanでの表示 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 use HTML::Template; use Calendar::Simple; local $cal = calendar; local @caps = qw( 日 月 火 水 木 金 土 ); local @wdays = qw( sunday monday tuesday wednesday thursday friday saturday ); #&base; &myplan; exit; sub base{ print "Content-type: text/html; charset=\"utf8\"\n\n"; print qq|<table>\n|; print qq|<tr>\n|; for (my $i = 0; $i < 7; $i++) { my $cap = $caps[$i]; my $wday = $wdays[$i]; print qq|<th class="$wday">$cap</th>\n|; } print qq|</tr>\n|; foreach my $week ( @$cal ) { print qq|<tr>\n|; for (my $i = 0; $i < 7; $i++) { my $mday = $week->[$i]; my $wday = $wdays[$i]; print qq|<td class="$wday">$mday</td>\n|; } print qq|</tr>\n|; } print qq|</table>\n|; }#end base sub myplan{ for (my $i = 0; $i < 7; $i++) { my %row_data; $row_data{cap} = $caps[$i]; $row_data{wday} = $wdays[$i]; push(@loop_data, \%row_data); } foreach my $week ( @$cal ) { for (my $i = 0; $i < 7; $i++) { my %row_data; $row_data{mday} = $week->[$i]; $row_data{wday} = $wdays[$i]; push(@loop_data_3, \%row_data); } } my $template = HTML::Template->new( filename => "html_template/calender.tmpl", ); $template->param( THIS_LOOP => \@loop_data, THIS_LOOP3 => \@loop_data_3 ); print "Content-type: text/html; charset=\"utf8\"\n\n"; print $template->output; }#end myplan ##calender.tmpl <html> <body> <table> <tr> <TMPL_LOOP NAME=THIS_LOOP> <th class="<TMPL_VAR NAME=wday>"><TMPL_VAR NAME=cap></th> </TMPL_LOOP> </tr> <tr> <TMPL_LOOP NAME=THIS_LOOP3> <td class="<TMPL_VAR NAME=wday>"><TMPL_VAR NAME=mday></td> </TMPL_LOOP> </tr> </table> </body> </html>

    • ベストアンサー
    • Perl
  • HTMLの出力で改行をさせない方法はありますか

    ASPでHTMLの一部だけASPの文法にしたい時、 <div><%= hogehoge %></div> のような感じで書くと思います。 ただ、ASPの部分が非常に長い場合にそこだけ改行したい場合が あります。 (上は変数を出力しているだけですが実際にはIf文などを使って いたりでもっと長いです) <div> <%= hogehoge %> </div> ↑だと出力されるHTMLも改行を含んでしまいます。 これをさせないようにするには <div><% = hogehoge %></div> こんな感じにするしかないのでしょうか。 これだとASPの見た目が悪いような気がするのですがどうにか ならないでしょうか。 <% %> ASPにおける↑の呼び方(正式名称)もよく分からないので (開始タグ/終了タグ?)調べようにも調べることができないでいます。 実は意外と当たり前のことだったりする可能性もありますが 何か方法があったら教えていただけると嬉しいです。

  • Smartyで出力したHTMLコードが改行されない

    PHPのテンプレートエンジンであるSmaryについて教えてください。 SmartyテンプレートをUTF-8、かつ改行コードLFで作成しました。 (テキストエディタでちゃんと上記の通りなってるかも確認) ◯◯.tplとし、Webサーバを介して描画したところ、出力結果のHTMLのソースが改行されないで出力されてしまいました。 (ブラウザでのHTML自体の描画はできているので、HTMLから改行のみ消えてHTMLがみにくい状態) なぜか<script>タグで区切ったJavascriptのコードの部分だけはちゃんと改行されています。 HTML部分も改行したいのですが、なにか設定が必要なのでしょうか。 (以前、Smarty2.x系を使ったときは出力されたHTMLは改行されていました。) 【環境】 OS:MaxOSX Lion Webサーバアプリ:ZendServerCE5.3.5 Smarty:バージョン3.1.4 テンプレート:UTF-8、改行LFで作成 以上、よろしくお願いします。

    • 締切済み
    • PHP
  • フォーム自動返信メールの空白をなくしたい

    無料テンプレートで問い合わせフォームを作ったのですが、自動返信で届くメールに空白ができて困っています。 自動返信メールの記述で下記のように改行すると、選択されていないチェックボックスの内容の行がそのまま空白になります。 改行しないで試してみたのですが、チェックボックスの内容1チェックボックスの内容2…と横に続いて表示されました。 選択されていない行は空白をなくして縦に詰めて表示したいのですが、どうすればいいでしょうか? 詳しい方教えていただけると助かります。 宜しくお願い致します。 【自動返信メールの記述】 <!-- TMPL_IF NAME=cbx-1 -->チェックボックスの内容1<!-- /TMPL_IF --> <!-- TMPL_IF NAME=cbx-2-->チェックボックスの内容2<!-- /TMPL_IF --> <!-- TMPL_IF NAME=cbx-3 -->チェックボックスの内容3<!-- /TMPL_IF --> <!-- TMPL_IF NAME=cbx-3 -->チェックボックスの内容4<!-- /TMPL_IF --> (例)フォームで内容1と内容4を選択するとこのようにメールが届きます。 チェックボックスの内容1 チェックボックスの内容4 (理想) チェックボックスの内容1 チェックボックスの内容4

    • ベストアンサー
    • CGI
  • Template-Toolkit の外部テンプレートについて

    perlの初心者です。HTMLテンプレートとして、cpanのTemplate-Toolkitを勉強している最中です。 ディレクトリ  /htdocs/   /lib/ttk.pl #CGIスクリプト   /tmpl/ttk.tpl #HTMLテンプレート(<body>以下)   /html/header #HTMLテンプレート(HTMLヘッダー) 上記の構成で、ttk.plを実行すると、ttk.tplからheaderを読み込み、HTMLを出力するプログラムを作成しているのですが、ttk.tplからheaderをincludeするとエラーが発生します。 ttk.tpl の冒頭に記述 [% INCLUDE ../html/header %]でエラーになります。 補足)/lib/内にheaderを持ってきて、 [% INCLUDE header %]とすれば成功はします。 おそらく、ディレクトリ指定の仕方が間違っていると思うのですが、../の場合の指定がわかりません。 マニュアルを見ても、../の場合の説明がありません。 http://www.hakoniwa.net/tt/ わかる方、ご指導いただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ファイルに書き込んだ際に余計な空行が入ってしまう

    テキストエリアに入力された内容からプルダウンメニューの選択肢を生成させようと以下のようにしているのですが、作成されたファイルを見ると入れた覚えのない改行が余計に入ってしまい空行ができてしまいます。書き込んだファイルがこの状態でもプルダウンメニュー生成の際は空の選択肢が出来てしまうようなこともなく正常に生成できるのですが、なんか気になってしまい・・・・。 この空行ができてしまうのはなぜなんでしょうか、この空行を作らずにファイルに書き込みたいのですが。 入力部 <textarea name="pulldownvalue" rows="10" cols="10" wrap="OFF"></textarea> ファイル書き込み部 if($INPUT{'pulldownvalue'}){ open(FILE,">pulldown.txt"); print FILE "$INPUT{'pulldownvalue'}"; close(FILE); } pulldown.txtの内容がこうなってしまう: textsample textsample textsample これをこのようにしたい: textsample textsample textsample

    • ベストアンサー
    • Perl
  • php ファイルの書き込み読みだし

    htmlフォームから回答 phpで処理計算しlog.csvに保存、log.csvファイルを読みだしその結果をブラウザに表示するスクリプトを書いておりますが、log.csvファイルを読みだして結果を表示の部分が調べてもできなくて困っております。どなたか知恵を貸してほしいです。批判や中傷などは書かないでください。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi5.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <?php session_start(); if (isset($_SESSION["gender"])) { $_SESSION["gender"]++; print($_SESSION["gender"]."回目"); } else { $_SESSION["gender"] = 0; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <?php if (isset($_SESSION["syokugyou"])) { $_SESSION["syokugyou"]++; print($_SESSION["syokugyou"]."回目"); } else { $_SESSION["syokugyou"] = 0; } ?> <p> </p> 満足度を答えてください<BR> <?php if(isset($_POST["hobby"])){ $hobby=implode($_POST["hobby"]); print $hobby; }else{ } ?> <?php if (isset($_SESSION["hobby"])) { $_SESSION["hobby"]++; print($_SESSION["hobby"]."回目"); } else { $_SESSION["hobby"] = 0; } ?> <?php // 出力 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html> </BOBY> </HTML>

    • ベストアンサー
    • PHP