- BluesBB --> d3forum インポートに挑戦!
- 履歴
- 概要
- 準備
- d3forumモジュール
- スクリプト import_bluesbb.php
- テンプレート _custom_bluesbb4_d3forum.html
- 実行
- フォーラム・カテゴリ選択
- スレッド選択
- インポート完了
- 同期処理
- 権限設定
- スクリプトの削除
- 結果比較
- 謝辞
- 2009/05/02 ver-0.2a公開
- 2009/04/07 初版公開
BluesBB[6] ・・ ツリー表示や某巨大掲示板サイトのようなスレッド一覧表示が可能な、xoops[7]用掲示板モジュール。 2年前にLAFESTAcafe.[8]をリニューアルした時、 KENT-WEB[9]さんで配布されていたcgi掲示板「WEB-FORUM」からの後継として、ツリー構造で全体を見通せる、このモジュールを選んだのでした。
しかし、使い込むうちに書き込みの移動ができないなどの不満が高まり、一方でd3forumは高いセキュリティ性能やコメント統合を始めとする機能アップが進んで、「早く乗り換えたい」と考えていました。
とはいっても、手作業での移行は辛すぎます。 ネットで調べても、引越し用ツールは無いみたい・・ ということで、一念発起して(大げさか) 自分で作ってみましたので、公開してみます。
なお、毎度のお約束ですが、小生のスキルはそれほど高くありませんので、不具合が出る可能性があります。 いきなり本番環境で実行するのはもってのほか。私でもやりません(笑) まずはテスト環境で実行してみて、続いて本番環境に d3forumの複製フォーラムを作ってそこにインポートしてみるなどして、問題なければ本番モジュールで実行して下さい。
特徴というほどでもありませんが、
- d3forumに既にある記事はそのままで、インポート可能
- ツリー構造の維持
- フォーラムの自動作成
(BluesBBのトピック名と同名で作成。作成先カテゴリを選択可能。)
- トピック単位で選択インポート
- インポート済みのトピックは自動スキップ
(このため、同トピックにインポート後に付いた返信は、インポートできません)
などなど。
PHP5 (PHP4で動くかどうかわかりません)
mysql5 (mysql4.0で動いた報告あり)
xoops[7]-2.0.16a-JP、 XOOPS_Cube_Legacy-2.1.6 (それ以前でも動くと思います)
d3forum-0.85 (それ以前でも動くと思います)
d3forumモジュール [13]
まず、d3forumの最新版をインストールします。
当方、d3forum-0.85で動作確認しました。 最新版でなくても動作すると思いますが、未検証です。
また、最初にカテゴリの作成と権限設定までは行っておいてください。 各フォーラムは、スクリプトによってカテゴリ内に自動的にBluesBBの各トピックと同じ名称で作られます。 (フォーラムの権限はカテゴリの権限を引き継ぎます。)
続いて、スクリプト1つと、 カスタムテンプレート1つを準備します。
スクリプト import_bluesbb.php [14]
以下のzipファイルをダウンロードし、解凍後、(trust_path)/modules/d3forum/main/ ディレクトリ内にアップロードします。 文字コード「EUC-JP」で保存してありますので、UTF-8などで運用中の方は、ファイルの文字コード変換を行ってください。(コメントだけなので、変換しなくても動作するかもしれません。)
なお、サーバー負荷の上昇を抑えるため、記事単位でインポート直後のトピック同期処理は初期設定では「不使用」としていて、インポート後に管理画面で同期が必要です。 サーバー能力に余裕があって大丈夫と判断する場合は、import_bluesbb.php 内の冒頭の、以下の記述を変更することで、記事1件ごとにsync動作が入るようになります。(お勧めはできません)
1
2
3
| $sync_each_post = false ;
// ↓ 書き換え
$sync_each_post = true ;
|
テンプレート _custom_bluesbb4_d3forum.html [16]
Altsysの「テンプレート管理」-「カスタムテンプレート」で、以下のコードを「_custom_bluesbb4_d3forum.html」として作成します。
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
| <h2>bulesBB -> d3forumインポート</h2>
<{* あなたのuid=<{$bl4d3f_uid}><br /> *}>
<{if $bl4d3f_isadmin}>
実行権限:OK
<form name="MainForm" action="./index.php?page=import_bluesbb" method="post">
<{if $bl4d3f_step==0}>
<{if count($bl4d3f_bl_topics)>0 }>
bluesBBのトピック名:
<select name="bl_topic_id">
<{foreach item=topic from=$bl4d3f_bl_topics}>
<option value=<{$topic.topic_id}>><{$topic.topic_name}></option>
<{/foreach}>
</select><br />
<{/if}>
<{if count($bl4d3f_categories)>0 }>
インポート先d3forumカテゴリ
<select name="cat_id">
<{foreach item=category from=$bl4d3f_categories}>
<option value=<{$category.id}>><{$category.title}></option>
<{/foreach}>
</select><br />
<{/if}>
<{elseif $bl4d3f_step==1}>
<{if $bl4d3f_forum_created}>
d3forumのカテゴリ「<{$bl4d3f_cat_title}>」に、フォーラム「<{$bl4d3f_forum_title}>」を作成しました。<br />
<{else}>
d3forumのカテゴリ「<{$bl4d3f_cat_title}>」に、既存フォーラム「<{$bl4d3f_forum_title}>」が存在しました。<br />
<{/if}>
bluesBBのトピック名:<{$bl4d3f_forum_title}> から
d3forumのフォーラム名:<{$bl4d3f_forum_title}> に、以下のスレッドをインポートします。<br />
<table class="outer">
<tbody border="1"><tr><th align="center">選択<br /><input type='checkbox' title='この縦一列のチェックボックスすべてをON/OFFします' onclick="with(document.MainForm){for(i=0;i<length;i++){if(elements[i].type=='checkbox'&&elements[i].name.indexOf('bl4d3f_thread')>=0){elements[i].checked=this.checked;}}}" />全選択/解除</th><th align="center">スレッド</th><th align="center">トピ開始日時</th></tr>
<{foreach key=num item=thread from=$bl4d3f_threads}>
<tr class="<{cycle values='odd,even'}>"><td align="center"><input type="checkbox" name="bl4d3f_thread[<{$num}>]" value="<{$thread.thread_id}>" /></td><td><{$thread.title}></td><td align="center"><{$thread.post_time|date_format:"%Y年%m月%d日 %H時%M分"}></td></tr>
<{/foreach}>
</table>
よろしければ「送信」してください。<br />
<input type=hidden name="cat_title" value=<{$bl4d3f_cat_title}> />
<input type=hidden name="cat_id" value=<{$bl4d3f_cat_id}> />
<input type=hidden name="forum_title" value=<{$bl4d3f_forum_title}> />
<input type=hidden name="forum_id" value=<{$bl4d3f_forum_id}> />
<input type=hidden name="bl_topic_id" value=<{$bl4d3f_bl_topic_id}> />
<{elseif $bl4d3f_step==2}>
インポートが完了しました。<br />
最初のページに戻るには下のボタンで送信してください。<br />
<{/if}>
<input type=hidden name="page" value="import_bluesbb" />
<input type=hidden name="step" value=<{$bl4d3f_step_next}> />
<input type=submit value="送信" />
</form>
<br />
<{else}>
実行権限:NG
権限がありません。
<{/if}>
|
フォーラム・カテゴリ選択 [18]
管理者でログインし、以下のアドレス(実際のサイトに応じて読み替え)にアクセスします。
/modules/(d3forum)/index.php?page=import_bluesbb
下記のようにエクスポート元BluesBBのトピリスト(d3forumで言うフォーラムに当たる)、インポート先d3forumのカテゴリリストが出ますので、それぞれ選択して「送信」を押します。
インポート先d3forumのカテゴリにフォーラムが作成されました。(作成済みの場合は新たに作られず、作成済みのフォーラムがこの後のインポート先になります。)
続いて、選択したBluesBBのトピから、スレッド一覧(d3forumで言うトピックに当たる)が表示されます。 「全て」選択すると、記事数によってはサーバーにかなりの負荷がかかりますので、適宜様子を見ながら、少しずつインポートすることをお勧めします。 選択後、「送信」ボタンで実際にインポートが行われます。
インポートが完了しました。 「送信」を押すと、最初の画面に戻ります。
全てのインポートが終了したら、管理画面に入り、d3forumの「冗長情報の同期」の「トピック」を実行してください。 その後、念のため「フォーラム」「カテゴリ」も同期処理を行ってください。
各掲示板の権限設定など、必要に応じて行ってください。
スクリプトの削除 [24]
インポート作業が完了したら、セキュリティホールになりえるかも知れませんので、必ずサーバー上からスクリプトを削除してください。
インポート前後のツリーの様子です。 左がBluesBB、右がd3forum(+ツリー表示カスタム[26]版)です。 うまく行っているようです。
このスクリプトの作成・公開にあたり、BluesBB、d3forumのコードを参考にさせていただき、ました。 作者のSting_Band氏、GIJOE氏に、御礼申し上げます。
特に、d3forumのほうは一部「transact_functions.php」などのソースincludeさせていただきました。 この中の「d3forum_sync_topic」プロシジャが無かったら、すんなり行かなかったと思います。