OneThird CMS

Lightweight CMS for Small website, Web application framework.

Download Document

english

OneThird CMSでのSQL

OneThird CMSでは、O/Rマッパーを使用していないのでSQL発行に関しての縛りはほとんどありません

SQL文を使うには、通常以下のコマンドをお使いください


sql_select_all ... 検索系

sql_update ... 更新系


データベースオブジェクトの$databaseを使いアクセスしてください


例:

$ar = $database->sql_select_all( "select mode,block_type,date,metadata,link,title,type,id,pv_count from ".DBX."data_items where id=? ", $p_page );
if ($database->sql_update("update ".DBX."data_items set id=? where id=?", $r['chg_id'], $r['id'])) {
  正常処理
}   


sql_select_allについては、v1.29以降で拡張形式が使用できます

拡張形式の例:配列で渡すことができます(条件でSQL文を調整する場合に便利です)

$sql = array(" select id,metadata,date from ".DBX."user_log ");
$sql[1] = array("where type=0 and att='coming' and circle=? ", $p_circle);
if (isset($key)) {
	$sql[2] = array("and data=? ", $key);
}   



日付比較の調整

O/Rマッパーはありませんが、SQLiteとMySQLのSQL書式の違いを吸収するためのコマンドが用意されています

$ut->sql_timestamp

例:

$sql = array("select id, title from ".DBX."data_items where  ");
$sql[] = array(" {$ut->sql_timestamp("date")} < {$ut->sql_timestamp('?')}",date('Y-m-d 00:00:00', time()));   
   


タイムスタンプは、テキスト形式とUNIXタイムスタンプ形式(int型)の2つが選べます

$sql = array("select id, title from ".DBX."data_items where  ");
$sql[] = array(" {$ut->sql_timestamp("date")} > {$ut->sql_timestamp(time())}");   
   


各テーブルの役割について

OneThird CMSでよく使うデーブルは、data_items,user_logの2つになります

それ以外のテーブルは管理情報となりますのでできるだけ直接修正しないでください


data_itemsはページデータを、user_logは、ページデータにぶら下がるデータレコードになります

ページデータは階層構造をとっており、その下層ページには3種類あります

通常の下層ページは、独立したページでページフォルダプラグインやページ一覧プラグインで階層構造で表示されます

その他に一覧では表示されず、親ページの一部として表示されるinnerページがあります

innerページはblock_typeが5に設定されています

innerページをページ番号を指定して開いた場合は、親ページにリダイレクトします

最後に、hiddenページがあります

hiddenページは、page typeが50番(HIDDEN_ID)に設定され通常は表示されない設定になっています

hiddenページをページ番号を指定して直接開いた場合は、404エラーとなります

user_logは、ページにデータを付加するために用意されているテーブルです


hiddenページと、user_logはほとんど同じ使い方ができますが、user_logの方がテーブル長がコンパクトになっているので、通常はuser_logを使用する方が無難だと思います


対して、ページに結び付けられたデータで検索にかかる必要がある場合はhiddenページを利用したほうが便利です


テーブルのカラム(フィールド)追加について

data_itemsのカラム追加について、データベースマネージャーで直接カラムを追加しても構いません

その場合でも、バックアップマネージャーは追加されたカラムも含め正常にバックアップを行うことができます

追加されたカラムがある状態でバックアップされたバックアップデータをリストアする場合は必ずカラム情報が合致している必要があります


また、全く新しいテーブルを追加することもできます(v1.3xで有効)

新しいデーブルをバックアップ対象にするには

以下のように、files/1/plugin/plugin.phpにテーブルを追加してください


例:test,test2というテーブルを追加する例

$params['database_backup_tables'] = array('test','test2');


なお、追加するテーブルには必ず、linkというカラムを用意する必要があります

linkを0にすると、全バックアップ時にバックアップされます(差分バックアップではバックアップされません)

linkにページ番号を設定すると、ページ番号に紐付けられてバックアップされます