Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 1629440 Subscribe with livedoor Reader 役立つリンク集

2007-06-07

掲示板

とりあえずできた。→これ

前回の一行掲示板を元に、

クラスをつくって、複数行の書き込みを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がおかしくなっていたのが原因だった。

まぎらわしいわよっ!

6265162651 2016/08/12 10:58 156165

6265162651 2016/08/12 10:58 156165

6265162651 2016/08/12 10:58 156165

6265162651 2016/08/12 10:58 156165

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gan2/20070607/1181209040