Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2006-04-21 21:30:52

サクラキャンドル
メンバー
登録日: 2004-08-25
投稿: 165
ウェブサイト

Re: プラグインで使用するテーブルの変更

いつもお世話になっています。

テーブルを使用するプラグインを作る場合、function install()部分に

sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_hoge').

のようにテーブルを宣言しますが、バージョンアップした時等、テーブルのカラムを増加させたい場合は、
どのようにしたら良いんでしょうか?

一旦アンインストールして、テーブルを削除後再インストールが簡単だとは思いますが、データの再登録
が必要になるので、この作業を避けたいのです。
使う側で、phpMyAdminなどを使って直接カラムを増やしてもらったり、アップデート用スクリプトを付属
させてそれを実行してもらうというのが案として浮かびますが、前者はちょっと敷居が高そうで、後者は普
通のインストールより処理が1つ追加されるのがスマートで無いかなと考えてます。


農場主の日常(管理人blog)
http://nojomaster.com/

オフライン

#2 2006-04-21 22:18:36

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: プラグインで使用するテーブルの変更

サクラキャンドル さんの発言:

バージョンアップした時等、テーブルのカラムを増加させたい場合は、
どのようにしたら良いんでしょうか?

一旦アンインストールして、テーブルを削除後再インストールが簡単だとは思いますが、データの再登録
が必要になるので、この作業を避けたいのです。

プラグインの uninstall() 関数でテーブルの削除をせず、install() 関数で『ALTER TABLE』を使うのが手だと思います。まず『SHOW COLUMNS』でテーブル構造を調べておき、古いタイプのテーブルなら『ALTER TABLE』で新しいカラムを足すというのが良いかも知れません。

テーブルがあるか無いか、テーブルの構造が新しいか古いかの判別は、『@mysql_query()』でエラートラップすれば、もう少しスマートにできるような気もします…。

オフライン

#3 2006-04-21 23:00:44

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: プラグインで使用するテーブルの変更

テーブルの有無は、

if (@mysql_query("SELECT * FROM `".sql_table('tablename')."`"))

で、カラムの有無は、

if (@mysql_query("SELECT columnname FROM `".sql_table('tablename')."`"))

で判別できるように思います。

オフライン

#4 2006-04-22 00:28:36

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: プラグインで使用するテーブルの変更

NP_MultipleCategoriesとNP_TrackBackではプラグインの再インストールをせずにテーブルのカラムを増やすスクリプトを入れています。
管理ページにてカラムが存在するかどうかを調査して、存在しない場合はテーブルのアップグレード(alter)を実行するためのボタンを表示するようにしています。

参考になるかもしれません。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#5 2006-04-22 00:57:18

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: プラグインで使用するテーブルの変更

前にMapBlogの精度を上げるときにフィールドの型をFLOATからDOUBLEへ変換したのですが,そのときはちょっと裏技的なことをしました。
プラグインのファイルを上書きすると,プラグイン一覧を出したときに「登録リストのアップデート」というボタンが出るのはご存知だと思いますが,このボタンを押して登録イベントを見に行くときにデータベースを更新しています。

オフライン

#6 2006-04-22 01:07:49

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: プラグインで使用するテーブルの変更

Andy さんの発言:

裏技的なことをしました。

なるほど~。
function getEventList()に...

勉強になりました。


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

#7 2006-04-22 21:03:27

サクラキャンドル
メンバー
登録日: 2004-08-25
投稿: 165
ウェブサイト

Re: プラグインで使用するテーブルの変更

返信ありがとうございます。

Katsumi さんの発言:

テーブルの有無は、

if (@mysql_query("SELECT * FROM `".sql_table('tablename')."`"))

で、カラムの有無は、

if (@mysql_query("SELECT columnname FROM `".sql_table('tablename')."`"))

で判別できるように思います。

なるほど。これなら、テーブルが無い場合,カラムが無い場合で処理を分けられそうです。
これの表記場所は、後述のfunction内の方がよりスマートっぽいですね。

nakahara21 さんの発言:

NP_MultipleCategoriesとNP_TrackBackではプラグインの再インストールをせずにテーブルのカラムを増やすスクリプトを入れています。
管理ページにてカラムが存在するかどうかを調査して、存在しない場合はテーブルのアップグレード(alter)を実行するためのボタンを表示するようにしています。

wikiから、最新版のNP_MultipleCategoriesとNP_TrackBackをダウンロードしてソースを見てみました。
NP_MultipleCategoriesのほうは、バージョン情報を調べて、それに応じてボタンを表示してるんですかね。
NP_TrackBackのほうは、install時に、古いバージョンと同じテーブルを作って、追加されたカラムを追加する形になっていますね。管理ページでは、該当部分がちょっとわかりませんでした。

Andy さんの発言:

前にMapBlogの精度を上げるときにフィールドの型をFLOATからDOUBLEへ変換したのですが,そのときはちょっと裏技的なことをしました。

わたしもこれを覚えていたので調べていたのですが、install function内では特殊な処理をしていなかったのでどうやってるんだろうと思っていたのですが、function getEventList()だったとは。

とすると、Katsumiさんに教えていただいたコードを利用して、getEventList()にコードを追加する書と、上書きインストール+登録リストのアップデートでテーブルの変更ができそうですね。やってみようと思います。

そういえば、オプションが追加とか変更された場合も、同様の変更でできるんですかね。


農場主の日常(管理人blog)
http://nojomaster.com/

オフライン

#8 2006-04-22 22:41:38

nakahara21
メンバー
From: 尼崎
登録日: 2003-11-14
投稿: 1,298
ウェブサイト

Re: プラグインで使用するテーブルの変更

サクラキャンドル さんの発言:

そういえば、オプションが追加とか変更された場合も、同様の変更でできるんですかね。

ですよね。思いますよね。ソレできるならやりたいですよね。(実験してないですけど)


nakahara21
http://nakahara21.com/
(ただいま調整中です)

オフライン

Board footer