sb自体はMovable Typeのような複数ウェブログ作成機能をサポートしていません。複数のウェブログを管理したい場合、その分のsbを設置する必要があります。
複数のsbを設置する際、それぞれのsbに対して、lib/, ext/, doc/, plugin/ を用意しても構わないのですが、同じファイルを別の場所にいくつも置くのは冗長ですし、バージョンアップにも手間がかかります。
sbではlib/, ext/, doc/, plugin/ を共有して利用する仕組みを用意しています。また、希望するならば lock/ も共有して利用できます。
ここでは具体例を挙げながら、各ディレクトリを複数のsbで共有化する方法について説明します。
以下のような構成を想定します。
/public_html/sb0/
と/public_html/sb1/
に設置する。/public_html/
内に置く。ディレクトリ構成は以下のようになります。
- /public_html/
- sb0/
- index.html
- style.css
- admin.cgi
- sb.cgi
- cnt.cgi
- mb.cgi
- init.cgi
- addlib.cgi
- data/
- log/
- img/
- lock/
- sb1/
- index.html
- style.css
- admin.cgi
- sb.cgi
- cnt.cgi
- mb.cgi
- init.cgi
- addlib.cgi
- data/
- log/
- img/
- lock/
- doc/
- lib/
- ext/
- plugin/
とsb0/
の中に置かれているsb1/
というファイルに注目してください。このファイルは配布アーカイブには含まれていません。addlib.cgi
addlib.cgiの中身は以下のようになります。
use lib qw(../lib ../lib/lang ../ext); 1;
適当なテキストエディタで上記の内容を保存します。ここで
となっているのはsb.cgiから見た../lib
ディレクトリの位置になります。lib/
今回の例ですと、
とsb0/
に置くsb1/
の内容は全く一緒で構いません。addlib.cgi
続いて、
の設定を見てみます。init.cgi
今回の例で、/public_html/がウェブ上では
でアクセスできるとしましょう。http://www.example.com/
に置かれたsb0/
の設定は以下のようになります。init.cgi
# 初期設定ファイル DataDir ./data/ DataSuffix .cgi ScriptPath http://www.example.com/sb0/ # 以下、追加設定(必要に応じて設定してください) HelpSrv http://www.example.com/doc/ TempSrv http://www.example.com/lib/lang/ TempDir ../lib/lang/ LockDir ./lock/ BaseDir ./ LogDir log/ ImgDir img/ WeblogId sb0 PluginDir ../plugin/
, HelpSrv
, TempSrv
などは標準のTempDir
では設定されていない項目ですが、ヘルプドキュメントや管理画面で利用されている画像パーツを共有する際に必要になります。init.cgi
は複数のsbを設置した際に、それぞれのsbで管理画面のCookie情報を混同しないようにするためのものです。WeblogId
に置かれたsb1/
の設定もほとんど一緒です。異なる部分を強調しています。init.cgi
# 初期設定ファイル DataDir ./data/ DataSuffix .cgi ScriptPath http://www.example.com/sb1/ # 以下、追加設定(必要に応じて設定してください) HelpSrv http://www.example.com/doc/ TempSrv http://www.example.com/lib/lang/ TempDir ../lib/lang/ LockDir ./lock/ BaseDir ./ LogDir log/ ImgDir img/ WeblogId sb1 PluginDir ../plugin/
以上の設定で、複数のsbで各ディレクトリを共有することが可能です。環境設定などはそれぞれのsb毎に保存されます。
保存形式を「None」に設定していても、sbではトップページ(index.html)を静的に出力します。
sbではトップページも含めて全てのページを動的出力に切り替えることも可能です(ただし、rss, atom feedとスタイルシートを除く)。携帯電話からのアクセスを自動判別させたいような場合に有効な運用方法になります。
以下のような手順になります。
MainScript
とTopIndex
の設定を追加する1番目と2番目の設定は念のためです。また、4番目の設定は環境によっては必要ありません。
sb.cgiの名前を「index.cgi」に変更します。これはトップページのアクセス先を「index.html」という静的なファイルからスクリプトに切り替えるための下準備です。
index.htmlの名前を例えば、「dummy.html」の名前にしておきます。sbではトップページ用のファイルがないと管理画面でエラーになってしまうため、ダミーのファイルが必要になります。
1番目と2番目で行った名称変更の設定を反映させるため、init.cgiの設定を変更します。上述の例の場合、
MainScript TopIndex dummy.html
を追加します。
の設定が空になっていることに注意してください。index.cgiとしても構いません。MainScript
は変更後のindex.htmlの名称を指定します。TopIndex
環境によっては必要ありませんが、sbを設置したディレクトリで.htaccessを以下のように設定します。
DirectoryIndex index.cgi
この設定でウェブサーバ上のディレクトリアクセス先をindex.cgiにすることができます。
3番目の設定で
のように設定している場合はプラグインを有効にする必要はありませんが、MainScript index.cgi
を空に設定している場合は、「correct trackback url」プラグインをsb開発研究所よりダウンロードして、インストールします。MainScript
このプラグインはトラックバックURLを有効なアドレスに置き換えるためのものです。
記事の固定リンクを動的出力のものにするために、保存形式を「None」にする必要があります。
管理画面にアクセスした際、通常ログイン画面が表示されます。
sbでは標準で管理ユーザ情報をCookieとしてブラウザに保存していますので、管理画面のアクセス方法を若干修正すれば、ログイン画面を飛ばすことができます。
管理画面に対して、例えば、
でアクセスしている場合、このアドレスをhttp://www.example.com/sb/admin.cgi
に変更します。http://www.example.com/sb/admin.cgi?mode=status
管理画面のCookie有効期間内であれば、ログイン画面を飛ばしてステータス画面に移行します。
通常、sbの管理画面のCookie有効期間は1日に設定されています。これを変更したい場合、例えば、有効期間を7日に設定したい場合は、init.cgiに以下のような設定を追加します。
AdminCookieDay 7
携帯電話用に利用される表示もsbでは内部にテンプレートとして記述されています。
プラグインを利用することで携帯電話用のテンプレートを変更することができます。
という名称で次のようなテンプレートを用意します。mobile_settings.pl
sub plugin_init {
$gEnv{'plugin'}{$_[0]} = {
'name' => 'settings for mobile',
'version' => '0.00',
'author' => 'takkyun',
'link' => 'http://serenebach.net/',
'type' => 'mobile',
};
}
sub sbmob_settings {
$gEnv{'disptime'}{$gEnv{'conf'}{'disptime'}} = { # 日付フォーマット
'entry_date' => '%yr.%mo.%dy (%wk)',
'entry_time' => '%hr:%mi',
'msg_time' => '%yr.%mo.%dy %hr:%mi',
'dateinlist' => '<br />(%yr/%mo/%dy)',
'time_lang' => $gEnv{'conf'}{'lang'},
};
$gEnv{'conf'}{'entry_disp'} = 5; # ページ毎の表示記事数
$gEnv{'conf'}{'page_disp'} = 1; # ページ表示設定
$gEnv{'basic'}{'mob_size'} = 2048; # ページに表示する本文サイズ
}
sub sbmob_template {
my $template = <<'_HTML_TEMPLATE_';
<!-- BEGIN show_xml_declaration -->
<?xml version="1.0" encoding="Shift_JIS"?>
<!-- END show_xml_declaration -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta name="generator" content="sb" />
<title>{site_title}</title>
</head>
<body>
<!-- BEGIN mob_top -->
<h1>{blog_name}</h1>
<p>{blog_description}</p>
<hr />
{selected_entry_list}
<hr />
<!-- BEGIN page -->
<div align="center">{prev_page_link} {page_now}/{page_num} {next_page_link}</div>
<!-- END page -->
<!-- END mob_top -->
<!-- BEGIN mob_entry -->
<h1>{entry_title}</h1>
<p>{entry_date} {entry_disp_time}<br />{user_name}</p>
<hr />
{entry_description}
<hr />
<p>{entry_link}<br />{comment_num}<br />{trackback_num}</p>
<hr />
<p>{prev_entry}<br />{next_entry}<br /><a href="{site_top}" accesskey="0">[0] [top]</a></p>
<!-- END mob_entry -->
<!-- BEGIN mob_comment -->
<h1>{entry_link}</h1>
<h2>Comments</h2>
<hr />
<!-- BEGIN comment -->
<dl>
<dt>{comment_name}</dt>
<dd>{comment_time}</dd>
<dd>{comment_description}</dd>
</dl>
<!-- END comment -->
<p>{comment_form}<br />{comment_link}</p>
<!-- END mob_comment -->
<!-- BEGIN mob_trackback -->
<h1>{entry_link}</h1>
<h2>Trackbacks</h2>
<hr />
<!-- BEGIN trackback -->
<dl>
<dt>{trackback_title}</dt>
<dd>{trackback_blog_name}</dd>
<dd>{trackback_time}</dd>
<dd>{trackback_excerpt}</dd>
</dl>
<!-- END trackback -->
<p>{trackback_link}</p>
<!-- END mob_trackback -->
<!-- BEGIN mob_form -->
<h1>{entry_link}</h1>
<h2>Comment Form</h2>
<hr />
<form action="{site_cgi}" method="get">
<dl>
<dt>name:</dt>
<dd><input type="text" name="name" value="{cookie_name}" size="10" /></dd>
<dt>email:</dt>
<dd><input type="text" name="email" value="{cookie_email}" size="10" istyle="3" /></dd>
<dt>url:</dt>
<dd><input type="text" name="url" value="{cookie_url}" size="10" istyle="3" /></dd>
<dt>comments:</dt>
<dd><textarea name="description" rows="4" cols="20"></textarea></dd>
<dt>submit:</dt>
<dd>
<input type="submit" value="submit" />
<input type="hidden" name="entry_id" value="{entry_id}" />
<input type="hidden" name="charset" value="Shift_JIS" />
<input type="hidden" name="mob" value="on" />
</dd>
</dl>
</form>
<p>{comment_num}</p>
<!-- END mob_form -->
<hr>
<div align="right">[<a href="http://serenebach.net/mb.cgi">sb</a> {script_version}]</div>
</body>
</html>
_HTML_TEMPLATE_
return($template);
}
1;
携帯電話用に利用されている独自ブロック・独自タグは基本的に通常のテンプレートと同じですが、いくつか携帯電話専用の独自ブロック・タグが存在します。
という関数では、携帯電話用の表示を行っている際に利用される日付フォーマットやエントリーの表示数などの各種設定を行うことができます。sbmob_settings
独自ブロック | 説明 |
---|---|
show_xml_declaration | XML宣言を表示するブロックです。DoCoMo端末では非表示になります。 |
mob_top | ページ表示(トップページ含む)用のブロックです。 |
mob_entry | 個別エントリー表示用のブロックです。 |
mob_comment | コメント表示用のブロックです。 |
mob_trackback | トラックバック表示用のブロックです。 |
mob_form | コメントフォーム表示用のブロックです。 |
独自タグ | 説明 |
---|---|
{entry_link} | ページ分けされたエントリー用のリンク表示です。 |
{comment_link} | ページ分けされたコメント用のリンク表示です。 |
{trackback_link} | ページ分けされたトラックバック用のリンク表示です。 |
ウェブログはウェブ上に綴られたある連続した記事群(日記など)を称することが多いようです。ブログと呼称されることもあります。
個別の記事のことをsbではエントリーと呼ぶことがあります。
sbでは登録された記事に対して閲覧者がコメントを寄せることが出来ます。
ある記事(元記事)に対して言及した記事があった場合、元記事に対して言及したことを半自動的に通知する仕組みです。元記事から言及記事に対して自動的にリンクが貼られることが多いようです。
(株)paperboy&co.により2004年2月から運営されているレンタルウェブサービスです。詳細についてはhttp://jugem.jpをご覧下さい。
シックス・アパート株式会社より提供されている強力なウェブログ管理ツールです。詳細についてはhttp://www.movabletype.jp/をご覧下さい。カスタマイズ性に富み、sbでは出来ないような大規模なサイト運営も可能になっています。
pure perlによる簡易なウェブログ支援ツールを目指して作りました。データの再利用性を高めるため、既存ツール(JUGEM)とテンプレートの互換性を持たせたり、データ移行関連の機能がそれなりに充実していると思います。
アップロードしたファイルとディレクトリのパーミッションが正しく設定されているかを確認してください。
また、AAA!CAFEで利用されている方はパッチファイルを利用しているかどうかをご確認下さい。
sbの管理用スクリプト「admin.cgi」は設置後のトラブルを出来るだけ軽減するため、やや厳密にパーミッションチェックを行っています。
index.html ならびに sb.cgi のパーミッションが正しく設定されているかどうかを確認してください。
特にsuexecを利用するサーバだと index.html のパーミッションを「600」に設定しても index.html の書き換えは出来るので、管理画面は利用できますが、閲覧が出来ない状態になる場合があります。
style.css ならびに sb.cgi のパーミッションが正しく設定されているかどうかを確認してください。
特にsuexecを利用するサーバだと style.css のパーミッションを「600」に設定しても style.css の書き換えは出来るので、管理画面は利用できますが、スタイルシートが読み込まれないので、希望通りの表示にならない場合があります。
一度もログインに成功したことがない場合、data/ ディレクトリの中を確認してみてください。
initkey というファイルが残っているようでしたら、管理ユーザの設定に失敗しています。一度 data/ ディレクトリ内のファイルを消してもう一度管理用スクリプトにアクセスしてみてください。
独自タグ{collect_log}がHTMLテンプレート内に記述されているかどうかを確認してください。
もし、独自タグ{collect_log}がHTMLテンプレート内に記述されていて、それでもアクセス解析が表示されないようでしたら、cnt.cgi のパーミッションを確認してください。
なお、sbでは基本的に管理者のアクセスは集計しませんので予めご了承下さい。
ja.plの文字コードなどが正しく設定されているか、Jcode.pm のバージョンが0.86かどうかを確認してください。
また、Jcode.pmで文字コードの自動判別に失敗している可能性があります。その場合は以下の方法で文字化けを軽減することが出来ます。
HTMLテンプレート内のコメントフォームで
の後ろに<input type="hidden" name="entry_id" value="{entry_id}" />
を入れます。<input type="hidden" name="charset" value="{site_encoding}" />
以下のXML-RPCメソッドをサポートしています。
sbの仕様と適合しない一部のパラメータは無視されます。XML-RPC APIを利用することにより、XML-RPCクライアントからウェブログを更新することが可能です。
blogid ならびに appkey は sb では利用されません。任意の文字列を指定することができます。
XML-RPC APIのエンドポイントは管理用スクリプト(admin.cgi)のアドレスになります。
appkey
[string]
, blogid
[string]
, username
[string]
, password
[string]
, content
[string]
, publish
[boolean]
appkey
[string]
, postid
[string]
, username
[string]
, password
[string]
, content
[string]
, publish
[boolean]
appkey
[string]
, blogid
[string]
, username
[string]
, password
[string]
, numberOfPosts
[int]
appkey
[string]
, username
[string]
, password
[string]
appkey
[string]
, username
[string]
, password
[string]
appkey
[string]
, postid
[string]
, username
[string]
, password
[string]
, publish
[boolean]
blogid
[string]
, username
[string]
, password
[string]
, content
[struct]
, publish
[boolean]
content
[struct]
は以下の項目を含みます。
postid
[string]
, username
[string]
, password
[string]
, content
[struct]
, publish
[boolean]
content
[struct]
は以下の項目を含みます。
postid
[string]
, username
[string]
, password
[string]
blogid
[string]
, username
[string]
, password
[string]
, numberOfPosts
[int]
blogid
[string]
, username
[string]
, password
[string]
, file
[struct]
file
[struct]
は以下の項目を含みます。
blogid
[string]
, username
[string]
, password
[string]
postid
[string]
, username
[string]
, password
[string]
, categories
[array]
categories
[array]
の各項目は以下の項目を含む構造体です。
postid
[string]
, username
[string]
, password
[string]
blogid
[string]
, username
[string]
, password
[string]
, numberOfPosts
[int]
postid
[string]
, username
[string]
, password
[string]
blogid
[string]
, username
[string]
, password
[string]
, numberOfObjects
[int]
blogid
[string]
, objectid
[string]
, username
[string]
, password
[string]
blogid
[string]
, objectid
[string]
, username
[string]
, password
[string]