HTMLテンプレート

目次

HTMLテンプレートとは?

RubyでCGIを作るには以下のメジャーなパターンが考えられます。

ここで紹介するHTMLテンプレートはこの3つとはまた違う新しいパターンです。

特徴

クラス仕様

基本例

簡単なリンク集のプログラムを作ってみましょう。

テンプレート用のHTMLとして以下のようなlink.htmlを用意します。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
        <link rev="made" href="mailto:tasuku@linux-life.net">
        <title>(ここにタイトルが入ります)</title>
    </head>
    <body>
        <h1>(ここにタイトルが入ります)</h1>
        <ul>
<!-- link_begin -->
            <li><a href="(ここにURLが入ります)">(ここにサイト名が入ります)</a></li>
<!-- link_end -->
        </ul>
    </body>
</html>

リンクのデータとして以下のようなlink.txtを用意します。

Google    http://www.google.co.jp/
Yahoo Japan!    http://www.yahoo.co.jp/

ここでスクリプトで実行するのは

以上をスクリプトで書くと以下のようなlink.cgiになるのです。

#!/usr/bin/ruby -Ke
require 'cgi'
require 'htmltemplate'

#CGIクラスの作成
cgi = CGI.new()

#link.htmlをテンプレートとして読み込む
html = HTMLTemplate.open( "link.html" )

#(ここにタイトルが入ります) をタイトルで置換
html.gsub!("(ここにタイトルが入ります)", "HTMLTemplateを用いたCGIのリンク集" )

#ファイルを読み込む
File.open( "link.txt" ) do |file|
    #<!-- link_begin --> と <!-- link_end --> をブロックとして置換
    html.block( "link" ) do |block|
        #各行を読み込んで、加工した配列を連結する
        file.collect do |line|
            #第一列は名前、第二列はURL
            name, url = line.chomp.split(/\t/)

            #この行用のテンプレートをコピーして
            tmpl = block.dup

            #各変数に置換
            tmpl.gsub!( "(ここにサイト名が入ります)", name )
            tmpl.gsub!( "(ここにURLが入ります)", url )
        end.join( "" )
    end
end

cgi.out do
    #ブロック指定により生成される可能性のある空行を削除して出力
    html.to_s.gsub( /\n[\t\s]*\n/, "\n" )
end

実行結果の出力は以下のようになります。

Content-Type: text/html
Content-Length: 469

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
    <link rev="made" href="mailto:tasuku@linux-life.net">
    <title>HTMLTemplateを用いたCGIのリンク集</title>
  </head>
  <body>
    <h1>HTMLTemplateを用いたCGIのリンク集</h1>
    <ul>
      <li><a href="http://www.google.co.jp/">Google</a></li>
      <li><a href="http://www.yahoo.co.jp/">Yahoo Japan!</a></li>
    </ul>
  </body>
</html>

ダウンロード

htmltemplate.rb04/03/03 update!
お礼、改良、再配布など大歓迎です。

更新履歴

スポンサード リンク

トラックバック

トラックバックURL
https://linux-life.net/tb/program/ruby/cgidoc/htmltemplate/
Linux Life 〜 No linux, No life 〜
プログラミング > Ruby > CGI入門 > HTMLテンプレート