トップ  >  趣味の部屋  >  XOOPSサイト構築  >  インポートScript  >  BluesBB --> d3forum インポートに挑戦
xoops bluesBB d3forum インポート

履歴 anchor.png

  • 2009/05/02 ver-0.2a公開
  • 2009/04/07 初版公開

概要 anchor.png

 BluesBB ・・ ツリー表示や某巨大掲示板サイトのようなスレッド一覧表示が可能な、xoops用掲示板モジュール。 2年前にLAFESTAcafe.をリニューアルした時、 KENT-WEBさんで配布されていたcgi掲示板「WEB-FORUM」からの後継として、ツリー構造で全体を見通せる、このモジュールを選んだのでした。

 しかし、使い込むうちに書き込みの移動ができないなどの不満が高まり、一方でd3forumは高いセキュリティ性能やコメント統合を始めとする機能アップが進んで、「早く乗り換えたい」と考えていました。

 とはいっても、手作業での移行は辛すぎます。 ネットで調べても、引越し用ツールは無いみたい・・  ということで、一念発起して(大げさか) 自分で作ってみましたので、公開してみます。

 なお、毎度のお約束ですが、小生のスキルはそれほど高くありませんので、不具合が出る可能性があります。 いきなり本番環境で実行するのはもってのほか。私でもやりません(笑) まずはテスト環境で実行してみて、続いて本番環境に d3forumの複製フォーラムを作ってそこにインポートしてみるなどして、問題なければ本番モジュールで実行して下さい。

特徴 anchor.png

特徴というほどでもありませんが、

  1. d3forumに既にある記事はそのままで、インポート可能
  2. ツリー構造の維持
  3. フォーラムの自動作成
     (BluesBBのトピック名と同名で作成。作成先カテゴリを選択可能。)
  4. トピック単位で選択インポート
  5. インポート済みのトピックは自動スキップ
     (このため、同トピックにインポート後に付いた返信は、インポートできません)

などなど。

動作環境 anchor.png

PHP5 (PHP4で動くかどうかわかりません)
mysql5  (mysql4.0で動いた報告あり)
xoops-2.0.16a-JP、 XOOPS_Cube_Legacy-2.1.6 (それ以前でも動くと思います)
d3forum-0.85 (それ以前でも動くと思います)

準備 anchor.png

d3forumモジュール anchor.png

 まず、d3forumの最新版をインストールします。 :-D
当方、d3forum-0.85で動作確認しました。 最新版でなくても動作すると思いますが、未検証です。

 また、最初にカテゴリの作成と権限設定までは行っておいてください。 各フォーラムは、スクリプトによってカテゴリ内に自動的にBluesBBの各トピックと同じ名称で作られます。 (フォーラムの権限はカテゴリの権限を引き継ぎます。)

続いて、スクリプト1つと、 カスタムテンプレート1つを準備します。

スクリプト import_bluesbb.php anchor.png

 以下のzipファイルをダウンロードし、解凍後、(trust_path)/modules/d3forum/main/ ディレクトリ内にアップロードします。 文字コード「EUC-JP」で保存してありますので、UTF-8などで運用中の方は、ファイルの文字コード変換を行ってください。(コメントだけなので、変換しなくても動作するかもしれません。)

ダウンロードはこちら -> fileimport_bluesbb_0.2a.zip(zip)
php4.0系でエラーの対策(?)版

 なお、サーバー負荷の上昇を抑えるため、記事単位でインポート直後のトピック同期処理は初期設定では「不使用」としていて、インポート後に管理画面で同期が必要です。  サーバー能力に余裕があって大丈夫と判断する場合は、import_bluesbb.php 内の冒頭の、以下の記述を変更することで、記事1件ごとにsync動作が入るようになります。(お勧めはできません)

1
2
3
$sync_each_post = false ;
// ↓ 書き換え
$sync_each_post = true ;

テンプレート _custom_bluesbb4_d3forum.html anchor.png

Altsysの「テンプレート管理」-「カスタムテンプレート」で、以下のコードを「_custom_bluesbb4_d3forum.html」として作成します。

Everything is expanded.Everything is shortened.
 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}>

実行 anchor.png

フォーラム・カテゴリ選択 anchor.png

管理者でログインし、以下のアドレス(実際のサイトに応じて読み替え)にアクセスします。

/modules/(d3forum)/index.php?page=import_bluesbb

下記のようにエクスポート元BluesBBのトピリスト(d3forumで言うフォーラムに当たる)、インポート先d3forumのカテゴリリストが出ますので、それぞれ選択して「送信」を押します。

bl2d3f_1.gif

スレッド選択 anchor.png

 インポート先d3forumのカテゴリにフォーラムが作成されました。(作成済みの場合は新たに作られず、作成済みのフォーラムがこの後のインポート先になります。)

 続いて、選択したBluesBBのトピから、スレッド一覧(d3forumで言うトピックに当たる)が表示されます。 「全て」選択すると、記事数によってはサーバーにかなりの負荷がかかりますので、適宜様子を見ながら、少しずつインポートすることをお勧めします。 選択後、「送信」ボタンで実際にインポートが行われます。

bl2d3f_2.gif

インポート完了 anchor.png

 インポートが完了しました。 「送信」を押すと、最初の画面に戻ります。

bl2d3f_3.gif

同期処理 anchor.png

 全てのインポートが終了したら、管理画面に入り、d3forumの「冗長情報の同期」の「トピック」を実行してください。 その後、念のため「フォーラム」「カテゴリ」も同期処理を行ってください。

権限設定 anchor.png

 各掲示板の権限設定など、必要に応じて行ってください。

スクリプトの削除 anchor.png

 インポート作業が完了したら、セキュリティホールになりえるかも知れませんので、必ずサーバー上からスクリプトを削除してください

結果比較 anchor.png

インポート前後のツリーの様子です。 左がBluesBB、右がd3forum(+ツリー表示カスタム版)です。 うまく行っているようです。 :-D

bl2d3f_tree_before.jpgbl2d3f_tree_after.jpg

謝辞 anchor.png

 このスクリプトの作成・公開にあたり、BluesBB、d3forumのコードを参考にさせていただき、ました。 作者のSting_Band氏、GIJOE氏に、御礼申し上げます。

 特に、d3forumのほうは一部「transact_functions.php」などのソースincludeさせていただきました。 この中の「d3forum_sync_topic」プロシジャが無かったら、すんなり行かなかったと思います。


実体ページ:inc/blBB_d3f
関連ページ:WebForum(cbbs) --> d3forum インポートに挑戦
関連ページ:ImageBoard(1.2) --> d3forum インポート
関連ページ:YYBBS --> d3forum インポート

プリンタ用画面
投票数:157 平均点:6.82
前
習作:WordpressME(xoops版)のMT形式エクスポート
カテゴリートップ
インポートScript
次
WebForum(cbbs) --> d3forum インポートに挑戦

コメント一覧

投稿ツリー

トピック


shige サイトURL  投稿日時 2009/4/29 15:07

 初めまして。私も、d3forumに乗り換えたいと思い、手順通りやったのですが、実行すると「SQLエラーが発生しました45」と表示されて、止まってしまいます。

 環境は、
SAKURAレンタルサーバースタンダード
PHP: 5.2.8
MySQL: 4.0.27
XOOPS: XOOPS Cube Legacy 2.1.6a
d3forum 0.85
bluesbb 1.04
です。

 何かアドバイスが頂ければ幸いです。

なーお  投稿日時 2009/4/29 16:14 | 最終変更

shigeさん、こんにちは。

bluesBBのバージョンが、1.0.4なんですね。 テーブル構造を確認していませんが、同じでない可能性もあるのかなあ。 ?> (追記)確認しましたがver1.0.3から変更なく、ここは問題ないですね。

また、bluesBBのディレクトリ名が変更されていたりしますか?
その場合は、21行目の記載も要変更です。

もしそうでも無い場合は、たぶんMySQL4.0環境への対応が不十分だった可能性があります。
試しに次のスクリプトに変更して、同様に必要箇所を編集してお試し下さい。 (こちらにはMySQL4.0環境が無いので未確認ですが)

fileimport_bluesbb_0.2.zip

これでもだめなら、スクリプトの文字コードを変換して試してみる、とかかなあ。。

shige サイトURL  投稿日時 2009/5/1 22:03

 なーおさん、こんにちは。早速のアドバイスありがとうございます。

 確認に手間取り、返信が遅くなりました。

 結果的に残念ながら、同じエラーで止まってしまいます。
bluesbbのディレクトリ名は変更してません。データベースも確認しましたが、bluesbbでした。

 また、EUCで運用していますが、一応、UTF8に変換しましたが、同じエラーが出ました。

 必要箇所を編集してとありますが、どこか必ず編集する場所がありますか。説明文を読み落としていたら、申し訳ありません。

なーお  投稿日時 2009/5/1 22:15 | 最終変更

shigeさん

そうですか。。

もしかしたらですが、21行目の

$bl_dirname = 'bluesbb'; //bluesBBのDBテーブルprefix

を、

$bl_dirname = "bluesbb"; //bluesBBのDBテーブルprefix

に変更してトライしてみていただけますか? :roll:
ちょっと恥ずかしいミスでした。

引用:

必要箇所を編集してとありますが、どこか必ず編集する場所がありますか。説明文を読み落としていたら、申し訳ありません。

いえ、その他特に変更すべきところはございません。 :-)

shige サイトURL  投稿日時 2009/5/2 2:00

 何度もありがとうございます。直して試しましたが、うまくいきませんでした。

 sqlもPHPも何もわかってないので、的はずれかも知れませんが、$bl_dirnameで検索していたら、42行目の

$sql = "SELECT * FROM "'.$db->prefix($bl_dirname."'_topic')." WHERE true ORDER BY cat_id, topic_order, topic_id";

ってとこだけ、他の行と書式が違うように思ったので、カンで

$sql = "SELECT * FROM ".$db->prefix($bl_dirname."_topic")." WHERE true ORDER BY cat_id, topic_order, topic_id";

に直してやってみましたが、やはりダメでした。

なーお  投稿日時 2009/5/2 8:07 | 最終変更

shigeさん

申し訳ありません。
どうやら、ver0.2のzipファイル作成時に、変更途中のファイルをパックしてしまったようです。 :-o

ただいま、ver0.2aとして本文のほうに最新版リンクをアップしました。 お手数ですが、再度お試しいただけますでしょうか。

よろしくお願いします。 :-)

SHIGE   投稿日時 2009/5/2 14:36

 対応ありがとうございました。

 ただ、残念ながら、同じ
「SQLエラーが発生しました45」
というメッセージで止まってしまいます。

 スクリプトの置き場所も、カスタムテンプレートも確認しましたが、正しいと思います。

 ただ、もともと、mysql4は対象外なのを見落としていたので、申し訳ないです。

なーお  投稿日時 2009/5/2 15:46 | 最終変更

SHIGEさん

現象としては、データベーステーブルが見つからないときと同じですね。 データベースがあって、空の状態も試してみましたが、エラーは起こりませんでした。

こうなったら、あとは42行目を

42
  $sql = "SELECT * FROM " .$db->prefix("bluesbb_topic");

(090502-16:05修正)
あるいは、もっと直接的に

42
  $sql = "SELECT * FROM hogehoge_bluesbb_topic"; //hogehogeはデータベースのprefix

とだけしてみて、どうでしょう。。

MySQL4.0の環境が無くて、これ以上は難しいです。 :-?

(登録までしていただいたのに、残念ですね。。 本当にMySQLのバージョンの問題なのかどうかも不明ですので、私なりにもう少し突っついてみます。 でも過度の期待はしないでくださいね。 何せ私もそんなに詳しくなくて勉強しながらですので。。)

SHIGE  投稿日時 2009/5/2 23:28 | 最終変更

 なーおさん、皆さん、こんにちは。

 いつまでも、ゲストも失礼なので、アカウント取りました。よろしくお願いします。

 さて、アドバイスに従って、直接的に指定してもダメだったので、ローカルで、mysql5のテスト環境を作り、色々やっているうちに原因がわかりました。ファイルの置き場所を「admin」から、「main」に変えてやったところ、何の問題もなくスムースに、コピー出来ました。

 d3forumのページの他のリンクのpage=以下のオプションがmainフォルダにあるファイルだったので、試しにやったら、うまくいきました。ただ、入れた覚えがない「import_bluesbb.php」がmainフォルダに入っていたので、もしかしたら、adminから、コピーするのかも知れませんが、同名のファイルがあると更新しないのかも知れません。

 お陰で、無事にインポートが出来ました。ありがとうございます。何度もアドバイスありがとうございました。

 ついでに、YY掲示板からのインポートも出来るといいなあ。(クレクレ)

 

なーお  投稿日時 2009/5/3 0:47 | 最終変更

SHIGEさん、こんばんは。

うまくいったようで、良かったです。 おかげでMySQL4.0での動作実績ができました。 :-D

引用:

 さて、アドバイスに従って、直接的に指定してもダメだったので、ローカルで、mysql5のテスト環境を作り、色々やっているうちに原因がわかりました。ファイルの置き場所を「admin」から、「main」に変えてやったところ、何の問題もなくスムースに、コピー出来ました。

あれれ、trust側スクリプトの冒頭にも、ここにも書いておきましたとおり、mainフォルダ指定で作ってありました。 (スクリプトを置き換えてもなかなか解決しなかった)原因はそこだったのですね。。

あと、bluesBBからのインポート後にd3forumのtopic一覧を見ると、投稿者「ゲスト」ばかりが並んでしまいますが、ゲスト名を表示するのに、ここの投稿も参考にしてみてください。

引用:

ついでに、YY掲示板からのインポートも出来るといいなあ。(クレクレ)

YY-BOARDは以前CGIの頃は使っていたのですが、xoops版は使ったことがありません。 1日もあればできると思いますので、気が向いたらそのうち・・ (お約束はできませんが。)

ではでは。



新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

ブックマーク