XOOPS模組開發記錄
  
  
    
	
	- 由於一開始我們只有一個資料表「ugm_cart_files_center」
- 接著我們透過更新,將所需資料安裝上去
 下面是安裝時使用,而更新需將資料表前置字元加入
	
-- 2 類別表
CREATE TABLE `ugm_cart_kind` (
  `sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
  `ofsn` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父類別',
  `kind` varchar(255) NOT NULL DEFAULT 'kind_prod' COMMENT '分類',
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '標題',
  `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態',
  `url` varchar(255) NOT NULL DEFAULT '' COMMENT '網址',
  `target` enum('1','0') NOT NULL DEFAULT '0' COMMENT '外連',
  `col_sn` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'col_sn',
  `content` text COMMENT '內容',
  `ps` varchar(255) NOT NULL DEFAULT '' COMMENT '備註',
  PRIMARY KEY (`sn`)
) ENGINE=InnoDB;
-- 3 商品表
CREATE TABLE `ugm_cart_prod` (
  `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'prod_sn',
  `no` varchar(255) NOT NULL DEFAULT '' COMMENT '編號',
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
  `summary` text COMMENT '摘要',
  `content` text COMMENT '內容',
  `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態',
  `create_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '建立日期',
  `update_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新日期',
  `sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '人氣',
  `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '圖示',
  `youtube` varchar(255) NOT NULL DEFAULT '' COMMENT 'youtube',
  `uid` mediumint(8) unsigned NOT NULL COMMENT 'uid',
  PRIMARY KEY (`sn`)
) ENGINE=InnoDB;
-- 4 類別商品表
CREATE TABLE `ugm_cart_kind2prod` (
  `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'kind2prod_sn',
  `kind_sn` smallint(5) unsigned NOT NULL COMMENT 'kind_sn',
  `prod_sn` int(10) unsigned NOT NULL COMMENT 'prod_sn',
  PRIMARY KEY (`sn`),
  KEY `kind_sn` (`kind_sn`),
  KEY `prod_sn` (`prod_sn`)
) ENGINE=InnoDB;
-- 5 商品規格表
CREATE TABLE `ugm_cart_prod_standard` (
  `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
  `prod_sn` int(10) unsigned NOT NULL COMMENT 'prod_sn',
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
  `amount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '數量',
  `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售價',
  `sprice` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '特價',
  `enable` enum('1','0') NOT NULL DEFAULT '0' COMMENT '上架',
  `unit` varchar(255) NOT NULL DEFAULT '' COMMENT '單位',
  `sprice_start_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '特價開始時間',
  `sprice_end_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '特價結束時間',
  PRIMARY KEY (`sn`),
  KEY `prod_sn` (`prod_sn`)
) ENGINE=InnoDB;
-- 6 訂單主表
CREATE TABLE `ugm_cart_order` (
  `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
  `tel` varchar(255) NOT NULL DEFAULT '' COMMENT '電話',
  `email` varchar(255) NOT NULL DEFAULT '' COMMENT '電子信箱',
  `address` varchar(255) NOT NULL DEFAULT '' COMMENT '送貨地址',
  `ps` text NOT NULL COMMENT '備註',
  `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'uid',
  `create_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '訂單日期',
  `pass` varchar(255) NOT NULL DEFAULT '' COMMENT '密碼',
  `total` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '合計',
  `shipment` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '運費',
  `receipt` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收款',
  `receipt_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收款日期',
  PRIMARY KEY (`sn`)
) ENGINE=InnoDB;
-- 訂單明細表
CREATE TABLE `ugm_cart_order_detail` (
  `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
  `order_sn` int(10) unsigned NOT NULL COMMENT 'order_sn',
  `prod_standard_sn` int(10) unsigned NOT NULL COMMENT 'prod_standard_sn',
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
  `unit` varchar(255) NOT NULL DEFAULT '' COMMENT '單位',
  `amount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '數量',
  `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售價',
  `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  PRIMARY KEY (`sn`)
) ENGINE=InnoDB;  
- XOOPS更新會去執行「xoops_version.php」裡面的
 $modversion['onUpdate'] = "include/onUpdate.php";
- onUpdate.php 我修改了流程,會再回去執行「onInstall.php」的函數「go_update()」
- 所以放在「go_update()」的程式,將在安裝與更新時都被執行
- go_update()
	
 //更新
function go_update() {
  global $xoopsDB;
  
  //資料表   
  #---- 增加資料表 ugm_cart_kind
  $tbl = "ugm_cart_kind";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
        `ofsn` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父類別',
        `kind` varchar(255) NOT NULL DEFAULT 'prod' COMMENT '分類',
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT '標題',
        `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
        `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態',
        `url` varchar(255) NOT NULL DEFAULT '' COMMENT '網址',
        `target` enum('1','0') NOT NULL DEFAULT '0' COMMENT '外連',
        `col_sn` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'col_sn',
        `content` text COMMENT '內容',
        `ps` varchar(255) DEFAULT NULL COMMENT '備註',
        PRIMARY KEY (`sn`)
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);
  } 
    
  #---- 增加資料表 ugm_cart_prod
  $tbl = "ugm_cart_prod";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'prod_sn',
        `no` varchar(255) NOT NULL DEFAULT '' COMMENT '編號',
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
        `summary` text COMMENT '摘要',
        `content` text COMMENT '內容',
        `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態',
        `create_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '建立日期',
        `update_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新日期',
        `sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
        `counter` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '人氣',
        `icon` varchar(255) NOT NULL DEFAULT '' COMMENT '圖示',
        `youtube` varchar(255) NOT NULL DEFAULT '' COMMENT 'youtube',
        `uid` mediumint(8) unsigned NOT NULL COMMENT 'uid',
        PRIMARY KEY (`sn`)
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);
  }  
  #---- 增加資料表 ugm_cart_kind2prod
  /*
  1. 當「ugm_cart_kind」或「ugm_cart_prod」表刪除時,會自動刪本關聯表記錄
  2. 在「xoops_version」中 $modversion['tables'] 必須排在前面,先移除本表,才能移除「ugm_cart_kind」與「ugm_cart_prod」
  */
  $tbl = "ugm_cart_kind2prod";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'kind2prod_sn',
        `kind_sn` smallint(5) unsigned NOT NULL COMMENT 'kind_sn',
        `prod_sn` int(10) unsigned NOT NULL COMMENT 'prod_sn',
        PRIMARY KEY (`sn`),
        KEY `kind_sn` (`kind_sn`),
        KEY `prod_sn` (`prod_sn`),        
        FOREIGN KEY (`kind_sn`) REFERENCES `" . $xoopsDB->prefix("ugm_cart_kind") . "` (`sn`) ON DELETE CASCADE ON UPDATE CASCADE,
        FOREIGN KEY (`prod_sn`) REFERENCES `" . $xoopsDB->prefix("ugm_cart_prod") . "` (`sn`) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);    
  } 
  #---- 增加資料表 ugm_cart_prod_standard
  /*
  1. 當「ugm_cart_prod」表刪除時,會自動刪本關聯表記錄
  2. 在「xoops_version」中 $modversion['tables'] 必須排在前面,先移除本表,才能移除「ugm_cart_prod」
  */
  $tbl = "ugm_cart_prod_standard";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
        `prod_sn` int(10) unsigned NOT NULL COMMENT 'prod_sn',
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
        `amount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '數量',
        `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售價',
        `sprice` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '特價',
        `sprice_start_date` int(10) unsigned NOT NULL comment '特價開始日期',
        `sprice_end_date` int(10) unsigned NOT NULL comment '特價結束日期',
        `enable` enum('1','0') NOT NULL DEFAULT '0' COMMENT '上架',
        `unit` varchar(255) NOT NULL DEFAULT '' COMMENT '單位',
        PRIMARY KEY (`sn`),
        KEY `prod_sn` (`prod_sn`),
        FOREIGN KEY (`prod_sn`) REFERENCES `" . $xoopsDB->prefix("ugm_cart_prod") . "` (`sn`) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);    
  } 
    
  #---- 增加資料表 ugm_cart_order
  $tbl = "ugm_cart_order";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
        `name` varchar(255) NOT NULL DEFAULT '' COMMENT '姓名',
        `tel` varchar(255) NOT NULL DEFAULT '' COMMENT '電話',
        `email` varchar(255) NOT NULL DEFAULT '' COMMENT '電子信箱',
        `address` varchar(255) NOT NULL DEFAULT '' COMMENT '送貨地址',
        `ps` text NOT NULL DEFAULT '' COMMENT '備註',
        `uid` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'uid',
        `create_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '訂單日期',
        `pass` varchar(255) NOT NULL DEFAULT '' COMMENT '密碼',
        `total` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '合計',
        `shipment` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '運費',
        `receipt` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收款',
        `receipt_date` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收款日期',
        PRIMARY KEY (`sn`)
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);
  } 
  #---- 增加資料表 ugm_cart_order_detail
  /*
  1. 當「ugm_cart_order」表刪除時,會自動刪本關聯表記錄
  2. 在「xoops_version」中 $modversion['tables'] 必須排在前面,先移除本表,才能移除「ugm_cart_order」
  3. 當本表有存在記錄時,會禁止父資料表的刪除或修改動作(ugm_cart_prod_standard)
     ugm_cart_prod_standard 與 ugm_cart_prod皆不能刪除
  */
  $tbl = "ugm_cart_order_detail";
  if(!chk_isTable($tbl)){
    $sql="
      CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` (
        `sn` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn',
        `order_sn` int(10) unsigned NOT NULL COMMENT 'order_sn',
        `prod_standard_sn` int(10) unsigned NOT NULL COMMENT 'prod_standard_sn',
        `title` varchar(255) NOT NULL DEFAULT '' COMMENT '名稱',
        `unit` varchar(255) NOT NULL DEFAULT '' COMMENT '單位',
        `amount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '數量',
        `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售價',
        `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
        PRIMARY KEY (`sn`),
        KEY `order_sn` (`order_sn`),
        KEY `prod_standard_sn` (`prod_standard_sn`),
        FOREIGN KEY (`order_sn`) REFERENCES `" . $xoopsDB->prefix("ugm_cart_order") . "` (`sn`) ON DELETE CASCADE ON UPDATE CASCADE,
        FOREIGN KEY (`prod_standard_sn`) REFERENCES `" . $xoopsDB->prefix("ugm_cart_prod_standard") . "` (`sn`) ON DELETE RESTRICT ON UPDATE RESTRICT
      ) ENGINE=InnoDB;
    ";
    $xoopsDB->queryF($sql);    
  } 
} 
	  
- 上面是安裝、更新時系統會幫我們建立資料表,而模組反安裝時,則必須移除資料表,有設關聯的資料表必須放在前面,才能移除
 xoops_version.php
	
//---模組資料表架構(有設關聯的資料表要排前面)---//
$modversion['sqlfile']['mysql'] = 'sql/mysql.sql';
$modversion['tables'][1] = 'ugm_cart_files_center';
$modversion['tables'][2] = 'ugm_cart_order_detail';
$modversion['tables'][3] = 'ugm_cart_kind2prod';
$modversion['tables'][4] = 'ugm_cart_prod_standard';
$modversion['tables'][5] = 'ugm_cart_order';
$modversion['tables'][6] = 'ugm_cart_prod';
$modversion['tables'][7] = 'ugm_cart_kind';  
-