:::

XOOP CBB論壇UTF8中文化與資料庫結合網站記事

1月 30, 2007 0 Comments Edit Copy Download

今天早上6點完成了系友網頁與XOOP論壇的整合...這結合的過程比我想像中的還要簡單...

架設XOOP時,首先會遇到的便是MySQL中文Unicode編碼的問題。除了XOOP程式碼本身必須是uft8編碼之外,還必須要手動修改安裝檔,以後才能用正確的uft8的編碼去存取MySQL。步驟如下:

  1. XOOP建置資料庫(CREATE DATABASE)時,設定語系為utf8、校對為utf8_general_ci
    • 檔案位置:\html\install\class\dbmanager.php
    • 行數:62
    • 原程式:
      $result = $this->db->query("CREATE DATABASE ".XOOPS_DB_NAME);
    • 修正後:
      $result = $this->db->query("CREATE DATABASE ".XOOPS_DB_NAME." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
  2. 資料庫連線(mysql connect)時,修改它連線的語系為uft8
    • 檔案位置:\html\class\database\mysqldatabase.php
    • 行數:78~82
    • 原程式:
      if (XOOPS_DB_PCONNECT == 1)
      {
      $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      else
      {
      $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
    • 修正後:
      if (XOOPS_DB_PCONNECT == 1)
      {
      $this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      else
      {
      $this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
      }
      mysql_query("SET NAMES utf8");

跟XOOP的CBB論壇整合時,常用的資料表為:

  1. [前置詞]_bb_categories:論壇分類
  2. [前置詞]_bb_forums:論壇,包括主論壇與子論壇
  3. [前置詞]_bb_topics:每個討論串的標題等資訊
  4. [前置詞]_bb_posts:每一篇文章
  5. [前置詞]_bb_posts_text:每一篇文章的內文

只要解析到這種程度,搭配討論區權限的設定,就可以很靈活的運用了。

另外比較麻煩的是登入的權限,一般我們常用Cookie或Session來表示登入的狀態,可是XOOP是把這些狀態包含在$xoopsUser之中,再用$xoopsUser->getVar('欄位名稱')來取得登入的資料,欄位名稱可以參考MySQL資料表[前置詞]_users 。

只要把握這兩個部份,你也可以輕鬆控制XOOP的CBB論壇喔!