掲示板

とりあえずできた。→これ
前回の一行掲示板を元に、
クラスをつくって、複数行の書き込みをOKにして、CSSをつけてみた。
見た目はあんまりよくないし、ファイルロックもしてないけど、
まあ最初はこんなもんでしょーってことで。
以下がソース。


bbs.cgiがこれ。

#!/usr/local/bin/ruby
require 'cgi'
require 'kconv'
print "Content-Type: text/html\n\n"

class BBS
  def initialize(log_filename = 'bbs.log')
    @cgi = CGI.new
    @log_filename = log_filename
    @MAX_LOG = 10
    @log = []
  end
  
  # ログファイルの読み込み
  def read_log_file
    open(@log_filename){|f|
      f.each{|l|
        @log << l.tosjis
        break if @log.size == @MAX_LOG
      }
    }
  end

  # ログファイルへの書き込み
  def write_log_file
    text = @cgi['text'].tosjis
    return unless text.size > 0
    
    @log.unshift "#{lf2br(text)}<br />"
    
    open(@log_filename, 'w'){|f|
      c = 0
      @log.each{|l|
        l.chomp!
        f.puts "#{lf2br(l)}"
        c += 1
        break if c == @MAX_LOG
      }
    }
  end

  def lf2br(str)
    str.gsub!(/\r\n/, '<br />')
    str.gsub!(/\r/, '<br />')
    str.gsub!(/\n/, '<br />')

    str
  end

  def output_html
    # HTML
    print <<HTML
<html>
<head>
<title>掲示板</title>
<link href="css/bbs.css" rel="stylesheet" />
</head>
<body>
<div id="title"><a href="bbs.cgi">BBS</a></div>
<div id="form">
<form method="GET">
<textarea name="text" cols="40" rows="5"></textarea><br /> 
<input type="submit" value="書き込み"/>
</form>
</div>
<div id="log">
HTML

    @log.each{|l|
      puts %q(<div id="log-item">)
      puts l
      puts %q(</div>)
    }

    print <<HTML
</div>
</body>
</htm>
HTML
  end
end


log_filename = 'bbs.log'
bbs = BBS.new(log_filename)

bbs.read_log_file
bbs.write_log_file
bbs.output_html


そしてbbs.cssがこれ。

#title {
  border-bottom: 2px solid #491E00;
  color: #491E00;
  font-family: Verdana, Arial, sans-serif;
  font-size: 200%;
  font-weight: bold;
  margin: 0px 200px 10px;
  padding-bottom: 3px;
  text-align: center;
}

a {
  text-decoration: none;
  color:#491E00;
}

#form { 
  text-align: center;
}

#log { 
  background-color: #D0D0D0;
  color: #000000;
  font-family: 'MS Gothic',monospace;
  margin: 0px 230px 0px;
  overflow: auto;
  padding: 1em;
}

#log-item { 
  background-color: #F0F0F0;
  color: #000000;
  font-family: 'MS Gothic',monospace;
  margin: 10px 50px 10px;
  overflow: auto;
  padding: 5px;
}


Rubyが動くサーバならどこでも動くはず。
csscgiと同じ階層にcss専用のディレクトリをつくってその中に置く。

追記

改行を
にするところなんかを少し書き直した。
textareaで改行が効かなくなってなんだこれ!って思ったら、
Firefoxがおかしくなっていたのが原因だった。
まぎらわしいわよっ!