Openbiz Cubi 快速應用開發嚮導

Openbiz Cubi 開發嚮導

在Cubi快速入門章節中提供了一個關於建立新模塊的簡單的範例,本章節將帶領應用開發人員更加深刻普遍的瞭解Cubi內部是如何工做的。理解Cubi內部的工做原理將有助與您在應用程序開發中充分展示出Cubi的強大力量。本章節將討論下列主題:javascript

  • Cubi命令行工具
  • Cubi訪問控制
  • Cubi 命名和代碼轉換
  • Cubi URL重寫規範
  • 如何編寫一個模塊
  • 如何編寫一個主題
  • 客戶端瀏覽器腳本 openbiz.js
  • Cubi內建元數據編輯器 (CIME)
  • Cubi 多語言支持
  • 生成Cubi應用程序
  • 會話管理

Cubi 命令行工具

Cubi爲開發人員更有效的管理Cubi應用程序提供了一組命令行工具,這些腳本能夠在以下目錄中找到/cubi/bin/tools/php

Module Loader

這個腳本用於將一個模塊裝載入Cubi系統,當您準備好新的模塊時(mod.xml 或其它文件被修改時),您須要從新經過本工具將它裝載到應用程序中。css

模塊裝載腳本執行以下工做

  • 檢查模塊在<Dependency>中定義的依賴關係,若是一個模塊依賴於一個沒有被裝載的模塊,那麼它會發出警告信息;
  • 在第一次裝載模塊的時候,執行 mod.install.sql 文件中的SQL語句;
  • 讀取<Module>標籤中定義的模塊屬性;
  • 讀取 <ACL>標籤中定義的資源和行爲;
  • 讀取<Menu>標籤中定義的菜單元素;
  • 讀取元數據對象 (dataobj, form, view);
  • 爲管理員賦予該模塊的全部行爲權限;

如何使用:

# php load_module.php module_name [-i]html

'-i' 參數標識安裝模塊時是否強行裝載SQL語句用來刷新已安裝的數據。java

Metadata Generator

Cubi Metadata Generator 幫助開發人員快速的建立出一個新的模塊web

如何使用這個工具

# php gen_meta.php dbname tablesql

例如:您有一個數據表叫作」abc」,首先您在Cubi的數據庫中建立表abc,而後進入cubi/bin/tools/這個文件夾執行命令數據庫

# php gen_meta.php Default abcexpress

當腳本被執行後,下列文件將自動被生成。apache

/modules/abc/mod.xml

/modules/abc/do/AbcDO.xml

/modules/abc/form/AbcListForm.xml

/modules/abc/form/AbcDetailForm.xml

/modules/abc/form/AbcEditForm.xml

/modules/abc/form/AbcNewForm.xml

/modules/abc/form/AbcCopyForm.xml

/modules/abc/view/AbcListView.xml

Cubi theme generator

此工具將幫助UI開發人員基於Cubi默認主題快速生成一個新的樣式主題

如何使用這個腳本

# php gen_theme.php new_theme_name

當腳本執行完成後,蝦類文件將被自動生成

cubi/theme/new_theme/...

Cubi module upgrader

此工具幫助用戶將模塊升級爲更高版本

升級準備工做

爲了升級一個模塊,您須要複製新版本的模塊文件夾到以下目錄中

cubi/upgrade/module/mod_name/.  

在mod.xml文件中,確認版本號設置正確,必須高於當前正在使用的版本號。

建立或修改 cubi/upgrade/module/mod_name/upgrade.xml. 在 <UpgradeSql> 標籤中爲目標版本添加適當的SQL語句,例如

<?xml version="1.0" standalone="no"?>

<Upgrade>

  <Version Name="0.1">

  </Version>

  <Version Name="0.1.1">

    <UpgradeSql><![CDATA[

    ALTER TABLE `help` ADD `add1` varchar(255) default NULL AFTER `content`;

    ALTER TABLE `help` ADD `add2` int(10) default NULL AFTER `add1`;

    ]]></UpgradeSql>

  </Version>

  <Version Name="0.1.2">

    <UpgradeSql><![CDATA[

    ALTER TABLE `help` ADD `add3` varchar(255) default NULL AFTER `add2`;

    ALTER TABLE `help` ADD `add4` int(10) default NULL AFTER `add3`;

    ]]></UpgradeSql>

  </Version>

</Upgrade>

如何使用這個腳本

# php upgrade.php module_name

該腳本將執行那些操做

  1. 校驗在升級文件夾中的模塊版本是否高於當前版本
  2. 備份當前模塊到cubi/backup/modules/mod_name文件夾中
  3. 從升級文件夾中將文件複製到當前模塊中
  4. 執行在upgrade.xml文件中描述的升級SQL語句。
  5. 從新載入模塊

範例:升級help模塊從0.1 到 0.1.2

# php upgrade.php help

Start upgrading help module ...

--------------------------------------------------------

Upgrade 'help' module from version 0.1 to 0.1.2. Please backup data first.

Press enter to continue ...

Backup source files to C:\xampp\htdocs\ob24\cubi/backup/modules/help/0.1 ...

Copy source files from C:\xampp\htdocs\ob24\cubi/upgrade/modules/help to C:\xampp\htdocs\ob24\cubi\modules/help...

Execute upgrade sql files ...

Upgrade from version 0.1 to 0.1.1 ...

Execute ALTER TABLE  `help` ADD `add1` varchar(255) default NULL AFTER `content`

Execute ALTER TABLE  `help` ADD `add2` int(10) default NULL AFTER `add1`

Upgrade from version 0.1 to 0.1.2 ...

Execute ALTER TABLE  `help` ADD `add3` varchar(255) default NULL AFTER `add2`

Execute ALTER TABLE  `help` ADD `add4` int(10) default NULL AFTER `add3`

Reload module ...

[2011-01-11T00:15:53-08:00] Install Module.

[2011-01-11T00:15:53-08:00] Install Module ACL.

[2011-01-11T00:15:53-08:00] Install Module Menu.

[2011-01-11T00:15:53-08:00] help is loaded.

Give admin to access all actions of module 'help'

--------------------------------------------------------

End loading help module

Cubi 訪問控制

Cubi 在應用程序中提供了一系列約束用戶對資源的訪問控制。

用戶身份驗證

Cubi使用身份驗證服務(modules/service/authService.php)來根據用戶提供的用戶名和密碼校驗用戶身份。

當前身份額驗證服務按Cubi的用戶表來完整用戶身份驗證,一樣的邏輯還能夠被修改以使用用戶的特殊環境,例如用戶能夠在這個服務中經過LDAP服務器用來驗證身份。

通用頁面 (視圖) 訪問控制

訪問服務能夠被用來對簡單頁面進行訪問控制,訪問控制服務有一個配置文件(accessService.xml)該文件定義了從用戶資料服務中獲取的核心角色的視圖訪問權限,請看以下範例:

<?xml version="1.0" standalone="no"?>

<PluginService Name="accessService" Class="accessService">

  <access-constraint>

    <view-collection>

      <view name="shared.CalendarView">

         <role name="admin"/>

          <role name="member"/>

   </view>

   <view name="demo*">  <!-- regular expression in the view name -->

          <role name="admin"/>

          <role name="member"/>

   </view>

    </view-collection>

  </access-constraint>

</PluginService>

XML配置文件很是簡單,所以也許客戶還須要在accessService.xml.文件中增長本身的邏輯

基於角色的訪問控制 (RBAC)

Cubi基於角色訪問控制的原始目的在於定義一個用戶角色對應用程序資源具備什麼樣的操做權限,當定義一個RBAC模型時候,下列管理將會很是有用。

  • User –一般是一我的或者自動代理程序,一個用戶能夠同時擁有多種角色
  • Role – 一般是職能或頭銜,它的皈依了一個驗證級別,一個角色能夠分配給多個用戶,一個角色能夠擁有多個權限設置。
  • Resource –一般是一個應用程序中擁有某種邏輯的一個對象
  • Action – 一般是一種能夠改變資源狀態的操做
  • Permissions – 一般是是否具備訪問一個資源的許可權限,他定義了一個角色能夠如何對資源進行操做行爲,一個權限能夠被分配給多個角色

定義資源和它本身的操做行爲

每個模塊在模塊的根目錄中都有一個mod.xml文件,在mod.xml文件中,有一個ACL章節用來定義多組資源,每組資源能夠有一個或多個操做行爲,例如:

<ACL>

  <Resource Name="User">

    <Action Name="Administer_Users" Description="Administration of users"/>

鏈接資源的訪問行爲到對象

在每個Openbiz項目中,開發人員能夠設置訪問屬性給幾個資源行爲,例如:

<EasyView Name="UserListView"... Access="User.Administer_User">

容許擁有Administer_User資源行爲權限的用戶才能訪問system.view.UserListView視圖。

分配角色權限給資源行爲

在角色管理視圖中,用戶能夠選擇「Allow」或「Deny」給全部可用的資源行爲。例如:咱們給角色「member」設置「Deny」權限到「User.Administer_User」。那麼當一個具備「member」角色的用戶嘗試訪問RoleListView視圖時,用戶將只能看到一個訪問拒絕的頁面。

訪問屬性能夠設置給視圖,表單,表單元素,數據對象和菜單條目

基於組的數據可視性控制

角色是用來控制一個資源上的操做行爲是否能夠被用戶所調用,當有許多應用程序但願不一樣的用戶看到不通的數據範圍的時候,例如:銷售數據應該不只對銷售人員可見,同時對於財務或市場人員也應該具備可見性,這樣的功能系統稱爲「數據可視性」。

顯性分組

Cubi使用「用戶組」來控制數據可視性,爲了在某些數據上增長數據可視性控制,您須要在相對應的數據對象上增長「group_id」字段,而後自定義的訪問邏輯能夠在數據對象的AccessRule中進行設置。

例如:

  • 若是要設置數據可視性爲只容許本組成員可見,您能夠進行以下設置:

<BizDataObj Name="SalesDO" AccessRule="{tx}@vis:group(group_id){/tx}" …>

  • 若是設置數據可視性爲只有建立者可見,您能夠進行以下設置

<BizDataObj Name="MailDO" AccessRule="{tx}@vis:group(owner_id){/tx}" …>

@vis是數據可視性服務的別名。

全部系統服務別名均可以在app_init.php的$g_ServiceAlias數組變量中定義,當服務別名被定義後,Openbiz的簡單表達式引擎就能夠調用在表達式中定義的相應的服務和方法。

基於用戶的數據可視性控制

有時候,咱們但願增長一個更加細緻的數據可視性控制,例如精確到每個用戶能夠訪問哪些數據記錄,在這種狀況下,咱們推薦使用一個交叉表(中間表)經過多對多映射(M-M)的方式來鏈接用戶與數據記錄的關係。好比,若是你想讓多個用戶訪問某些重要的報表,你能夠建立一個交叉表叫「report_user」。該表存儲了report_id和user_id。這個表將被用來限制哪一個用戶能夠訪問哪些報表。

這些多對多關係中和相應的用戶界面在許多Cubi模塊中都有所實現(例如:用戶與角色,用戶與分組的關係),參考現有的Cubi實現方法將會對您的開發頗有幫助。

Cubi 命名規則與代碼轉換

元數據命名轉換

在發佈Cubi以前,Openbiz開發人員一般是按本身習慣的方式來對元數據進行命名,例如一個用戶列表表單可能會被命名爲以下名字:

  • FM_UserList.xml
  • f_userlist.xml

在Cubi中,元數據文件的命名遵循"NameType"語法,例如用戶列表表單,Cubi將使用以下名字:

  • UserListForm.xml

Cubi建議每個模塊包含以下子文件夾:

  • do. 用來存儲數據對象的元數據文件與可實現類文件。
  • form. 用來存儲表單對象的元數據文件與可實現類文件
  • view. 用來存儲視圖對象的元數據文件與可實現類文件
  • template. 用來存儲視圖與表單的模板文件。
  • widget. 用來存儲表單元素和菜單的源數據文件與實現類。
  • lib. 用來存儲具備公用性的腳本文件。

元數據文件命名範例,以Cubsi/modules/system目錄爲例:

對於數據對象元數據

  /do/UserDO.xml

  /do/RoleDO.xml

對於表單對象元數據

  /form/UserListForm.xml

  /form/UserEditForm.xml

  /form/UserNewForm.xml

對於視圖對象元數據

  /view/UserListView.xml

  /view/UserEditView.xml

  /view/UserNewView.xml

一個模塊還能夠包含子模塊文件夾,每個子模塊也應當遵循一樣的模塊目錄結構。

(一般子模塊的視圖對象和模板文件,是存放在父模塊的文件夾中的)

代碼轉換

Openbiz與Cubi 推薦的代碼編寫標準參考以下http://pear.php.net/manual/en/standards.php.

Cubi URL重寫規則

Cubi應用程序默認都使用簡潔URL模式來訪問視圖,配合一些在Web服務器上的配置設置,最終URL甚至能夠變得更加簡短。

基本的 Cubi URL 格式

在早期Openbiz的Baseapp,一個典型的訪問視圖的URL相似以下:

http://host/baseapp/bin/controller.php?view=a.b.viewname.

咱們稱之爲原始Openbiz URL

Cubi將經過index.php與cubi安裝目錄下的.htaccess文件配合的方式爲系統映射更加簡潔的URL格式。

視圖映射語法:

簡潔URL

原始URL

/cubi/index.php/module/xaa

對應:

/cubi/index.php/system/userList

/cubi/bin/controller.php?view=module.view.XView

對應:

/cubi/bin/controller.php?view=system.view.UserListView

/cubi/index.php/module/xaa_ybb

對應:

/cubi/index.php/system/user_list

/cubi/bin/controller.php?view=module.view.XaaYbbView

對應:

/cubi/bin/controller.php?view=system.view.UserListView

/cubi/index.php/module/xaa/number

對應:

/cubi/index.php/system/user_detail/5

/cubi/bin/controller.php?view=module.view.XaaView&fld:Id=number

對應:

/cubi/bin/controller.php?view=system.view.UserDetailView&fld:Id=5

/cubi/index.php/module/xaa/word_number

對應:

/cubi/index.php/system/user_detail/Id_5

/cubi/bin/controller.php?view=module.view.XaaView&fld:word=number

對應:

/cubi/bin/controller.php?view=system.view.UserDetailView&fld:Id=5

/cubi/index.php/module/xaa/a=x&b=y

對應:

/cubi/index.php/user/reset_password/token=4c0417d23dad6&abc=xyz

/cubi/bin/controller.php?view=module.view.XaaView&a=x

對應:

/cubi/bin/controller.php?view=user.view.ResetPasswordView&token=4c0417d23dad&abc=xyz

若是index.php被設置爲服務器的默認頁面文件,在URL中您可使用「?」來代替「index.php」,例如/cubi/?/system/userList

基於 url_rewrite實現的高級URL格式

若是你的Cubi運行於Apache網頁服務器下,而且服務器支持經過.htaccess文件的方式配置url_rewrite模塊的轉發規則。Cubi將能夠實現高級的簡潔URL格式

在你的apache conf 文件中,增長相似以下配置:

Alias /cubi "D:\Apache2\htdocs\cubidev\cubi"

<Directory "D:\Apache2\htdocs\cubidev\cubi">

AllowOverride All

</Directory>

打開 /cubi02/cubi/bin/app_init.php文件,進行以下修改

/* APP_URL is /a/b in case of http://host/a/b/index.php?... */

define('APP_URL',"/cubi");

/* APP_INDEX is /a/b/index.php in case of http://host/a/b/index.php?... */

$indexScript = ""; // or "", or "/?"

define('APP_INDEX',APP_URL.$indexScript);

進行完上述設置後,您能夠在URL去掉」index.php」字符,例如

http://host/cubi/system/user_list 就徹底能夠代替http://host/cubi/index.php/system/user_list.實現更加精簡的URL。

如何編寫一個模塊

在「Cubi快速入門」章節中咱們介紹了若是經過」gen_mod」工具建立一個模塊,本章節將涵蓋更多關於編寫Cubi模塊的知識。

手工建立一個模塊

您能夠遵循下列步驟來手工建立一個模塊。

  1. 定義模塊名並在modules/文件夾下面建立一個目錄,在下列步驟中,咱們以模塊名爲ABC爲例。
  2. 編寫模塊描述文件modules/abc/mod.xml.一個最精簡的 mod.xml 文件內容以下

<Module Name="abc" Description="abc is a new module" Version="0.1" Author="your name" OpenbizVersion="2.4">

</Module>

  1. 建立子文件夾
    1. do. 這個文件夾將包含數據對象的元數據文件和PHP類文件。
    2. form. 這個文件夾將包含表單對象的元數據文件和PHP類文件。
    3. view. 這個文件夾將包含視圖對象的元數據文件和PHP類文件。
    4. template. 這個文件夾將包含本模塊中的視圖和表單對象所關聯的模板文件。
    5. lib.  這個文件夾包含通用的PHP類文件。
  2. 在相應的子文件夾中編寫元數據和PHP文件。
    1. 首先複製建立好的子目錄到現存的模塊目錄下/modules/abc/
    2. 進入abc/do/目錄,重命名數據對象XML文件爲AbcDO.xml並修改它的 ("Name", "Title", "Table") 屬性和"BizField" 元素的映射
    3. 進入 abc/form目錄, 重命名錶單對象的XML文件爲Abc...Form.xml 並修改它的 ("Name", "Title", "BizDataObj") 屬性和 "Element" 元素
    4. 進入abc/view目錄,重命名視圖對象的XML文件爲 Abc...View.xml並修改它的("Name", "Title")屬性和"Reference" 元素
  3. 測試視圖的訪問效果,經過這樣的URL http://host/cubi/index.php/abc/abc_list.
  4. 增長 ACL, Menu, Dependency 元素到 mod.xml文件中。

<Module Name="abc" Description="abc is a new module" Version="0.1" Author="your name" OpenbizVersion="2.4">

  <ACL>

    <Resource Name="Abc">

      <Action Name="Administer_Abc" Description="Can Abc data"/>

    </Resource>

  </ACL>

  <Menu>

    <MenuItem Name="Abc" Title="Manage Abc" URL="{@home:url}/abc/abc_list" Parent="System" Order="60"/>

  </Menu>

  <Dependency>

    <Module Name="system"/>

  </Dependency>

</Module>

經過metadata generator來建立模塊

這一部份內容咱們在Cubi快速入門章節中已經詳細講述了。

SQL 腳本的安裝

一個典型的模塊一般有對數據庫的改變,(例如:增長一些相應的數據表),與數據庫相關的操做語句須要被複制到/cubi/modules/mod_name/mod.install.sql文件中,此文件能夠包含」create table」語句用來建立模塊所需的數據表和」insert into」語句來實現數據的初始化。

如何編寫一個主題樣式

Cubi發佈版本中包含了一個默認的主題樣式,建立一個自定義的主題樣式是一件很是簡單的事情,請遵循以下步驟:

  1. 在/themes目錄下建立一個子目錄。
  2. 從/themes/default目錄中複製全部文件到新建立的子目錄中。
    • css – 目錄包含 stylesheet 樣式文件
    • images – 用於存放圖片文件
    • js – 用於存放與樣式顯示相關的JS腳本文件
    • template – 包含共享模板文件。(每個模塊還能夠在modules/modname/template/目錄中建立本身模塊特有的模板文件)
  3. 修改上述4個文件夾中的文件,來建立您自定義的主題樣式風格,

主題樣式還能夠經過命令行工具或主題管理界面來自動建立,這兩部份內容分別在Cubi命令行工具和Cubi核心模塊章節中分別進行介紹。

當新的模塊被建立好之後,他就能夠在主題樣式管理界面中被設置爲默認主題或者成爲在個人帳戶的自定義使用偏好設置中供用戶進行選擇的自定義主題。

客戶端瀏覽器腳本

Cubi客戶端與服務器的通信默認是按AJAX的方式進行的,它相應的實現類文件是/cubi/js/openbiz.js。

Openbiz javascript 類庫概覽

openbiz.js 包含了以下兩類定義:

  1. Openbiz – 主Openbiz命名空間,它管理表單對象和提供Openbiz Ajax調用的接口。
  2. Openbiz.ActionType. 它定義了Openbiz Ajax調用的行爲類型。
  3. Openbiz.Form. 每個Openbiz表單對象實例都將同時初始化一個javascript的Openbiz.Form實例用於完成客戶端的交互操做。
  4. Openbiz.TableForm. 這是用於列表或數據表格(Gird)的專屬的Openbiz From js實例。
  5. Openbiz.Net. 提供了網絡相關的函數,例如Ajax調用。
  6. Openbiz.Window. 用來管理彈出窗口(層)和對話框邏輯
  7. Openbiz.Util. 它包含一些工具性函數
  8. Openbiz.Menu. 它用來實現顯示和隱藏表單的右鍵菜單邏輯
  9. Openbiz.CKEditor. 用來實現對CKEditor的集成和Ajax方法調用邏輯。
  10. Openbiz.AutoSuggest. 用來初始化搜索自動建議的表單控件
  11. Openbiz.Validator. 提供了一系列用於在客戶端對用戶輸入數據進行有效性校驗的函數。

擴展客戶端(瀏覽器)類庫

若是你但願在客戶端瀏覽器上實現一些特殊邏輯,你能夠編寫你自定義的類來繼承於Openbiz.Form或Openbiz.TableForm類,而後在表單對象的元數據中指定jsClass="YourFormName"屬性

範例: 建立一個MyInputForm 類用來實現你自定義的輸入表單,在/cubi/js目錄中建立一個」MyInputForm.js」文件。

/**

 * MyInputForm class

 */

MyInputForm = Class.create(Openbiz.Form,

{

  initialize: function($super, name, subForms)

  {

    $super(name, subForms);

    // your own init code here

  },

  myfun: function(...)

  {

    // your code here

  }

});

Cubi 內建元數據編輯器 (CIME)

爲了幫助開發人員更加直觀的編輯元數據,Cubi經過tool模塊提供了內建的元數據編輯器。

在Cubi中開/關CIME

若是cubi/bin/app_init.php中,常量'APPBUILDER'被設置爲1,那麼CIME將會在應用程序的頁面中啓用,在CIME模式下,每個視圖或表單的右上角將會出現一個小圖標,點擊該圖標就能夠啓動一個新的窗口來激活CIME元數據編輯器。

使用元數據編輯器的基礎須知

編輯節點屬性

若是須要編輯一個節點的屬性,點擊左側樹節點可在右側區域內展現該節點的可編輯屬性。

添加或刪除節點

如須要添加一個節點,在父節點上單擊鼠標右鍵,選擇「Create」菜單,而後輸入一個新的子節點的名字便可完成建立。

如須要刪除一個節點,在想要刪除的節點上單擊鼠標右鍵,並選擇「Delete」菜單,而後在彈出的確認菜單中點擊「OK」按鈕,便可完成節點的刪除。

移動一個節點

如須要移動一個節點,經過鼠標拖拽的方式將一個節點移動到其餘的父節點下便可。

編輯表單元數據

在元數據編輯器的第一頁,若是表單對象定義了DataObject 屬性,您將會在左側最下面看到一個編輯數據對象元數據的鏈接。

編輯表單屬性

編輯表單元素屬性

編輯數據對象元數據

若是是經過表單對象上的鏈接跳轉到數據對象編輯視圖,點擊數據對象編輯器上的「Back to」鏈接還能夠返回剛纔的表單對象編輯器界面。

編輯數據對象屬性

編輯數據對象字段屬性

編輯視圖對象元數據

視圖對象編輯器的首屏。

編輯視圖對象屬性

編輯表單引用屬性

Cubi 的多語言支持

Cubi爲開發人員製做語言包提供了一組專用工具。下列步驟將描述如何爲Cubi應用程序添加一個新的語言包。

  1. 用英語來開發您的應用模塊.
  2. 那麼請手工建立該文件夾和land_code.xml文件,固然您能夠經過Cubi多語言管理界面中進行自動建立這些文件。
  3. 使用語言生成工具來生成一個新的語言包並嘗試自動翻譯
  4. 編輯新的語言包文件
  5. 測試新的語言包文件

語言包生成工具

語言包生成工具相對應的腳本文件是/cubi/bin/tools/gen_lang.php.

usage: php gen_lang.php [module] [locale] [translate]

範例:生成簡體中文語言包

# php gen_lang.php user zh_CN -t

其中「user」是模塊的名字,」zh_CN」是中文的語言代碼,「-t」參數是用於啓用基於」Google Translator」的自動翻譯功能

語言包生成工具將完成以下工做:

  • 在以下類型文件中,搜索並提取出全部可翻譯的字符串:
    • 元數據文件. 例如表單對象的 "Title"屬性, 或表單元素對象的"Label"屬性等 ...
    • 模板文件. 在模板中經過{t}...{/t} 標籤訂義的可翻譯字符串
    • 消息文件.
  • 將全部可翻譯字符串存入/cubi/languages/lang_code/mod.module_name.ini文件中,改文件包含以下3個章節
    • [METADATA]
    • [MESSAGE]
    • [TEMPLATES]
  • 若是 "-t" 參數在命令行中被指定,那麼將經過Google Translate API來嘗試對字符串進行逐一自動翻譯。

語言包管理模塊

語言包管理模塊能夠幫助用戶完成以下工做:

  • 建立一個新的語言包包括文件夾和語言包描述文件
  • 編輯翻譯文字

管理語言包

建立一個新的語言包

管理語言包的翻譯

編輯語言包的翻譯

打包 Cubi 應用程序

Cubi的build 工具是用來實現輕鬆構建基於Cubi的應用程序而設計的,Cubi Builder其實是一個基於Phing (http://phing.info/trac/)之上的包裹性的腳本,Phing是一個相似Ant的項目打包工系統。

在進行打包以前,須要在cubi/build目錄中準備好下列文件:

  • app_name.xml. 應用程序包的主XML描述文件.
  • app_name.properties. 應用程序打包的屬性文件
  • app_name.license.txt. 應用程序的許可證文件

打包程序的命令:

# cd cubi/build

# build app_name [target]

範例: 打包乾淨的Cubi應用程序

# build cubi tar

在運行玩打包命令以後,一個」gz」後綴的文件將會被生成到/cubi/build/dist/app_name/目錄中,具體文件名是根據在打包屬性文件中的設置來命名的,屬性文件還定義了以下內容

  • build.summary.
  • build.version.
  • build.release.

生成出的文件名應該是app_name-version-release.gz。例如:build.version是0.3而且build.release是1,那麼生成出的文件名就是app_name-0.3-1.gz.

關於build.xml的文件語法,請參考以下網址:
http://phing.info/trac/
http://ant.apache.org/manual/index.html

會話管理

Cubi 容許開發人員選擇下來集中邏輯來存儲用戶會話數據

  • 存儲在文件系統中
  • 存儲在數據庫中
  • 存儲在 memcache緩存中(用於多服務器共享會話)

若是須要指定會話處理器,你能夠修改app_init.php的會話管理部分app.inc

/* define session save handler */

// save session in DATABASE

//define("SESSION_HANDLER", MODULE_PATH."/system/lib/SessionDBHandler");

// save session in MEMCACHE

//define("SESSION_HANDLER", MODULE_PATH."/system/lib/SessionMCHandler");

// for default FILE type session handler

define("SESSION_PATH", APP_HOME.DIRECTORY_SEPARATOR."session");

在文件系統中存儲用戶會話

若是在app_init.php文件中沒有指定常量SESSION_HANDLER,默認狀況下,Cubi會將用戶會話數據保存在安裝目錄的sessions子目錄中,該目錄是默認在app_init.php文件中經過SESSION_PATH常量指定的,這裏建議經過一個計劃任務來按期清理該會話文件夾,以致於它不會變得過分臃腫。

使用文件系統類保存會話是一件很是容易的事情,不過弊端是不可以實現跨服務器的共向用戶會話,若是有這樣的須要您也許能夠考慮這樣來部署。

  • 經過均衡負載器來將用戶的請求分配到相對固定的web服務器上並附上相應的SessionID
  • 將會話存儲文件夾設定爲 NFS.文件系統中。

在數據庫中存儲用戶會話

若是在app_init.php中的 SESSION_HANDLER 常量設置爲SessionDBHandler, Cubi 將會保存會話數據在」Session」數據庫中的session表中。

」Session」數據庫的鏈接方式能夠在系統根目錄的Config.xml文件中進行的定義,默認狀況下,session表就位於Cubi的安裝數據庫中,Cubi的會話表被配置爲」MEMORY」類型的數據表結構,這樣作是爲了最大化提高它的讀寫性能。

在MemCache服務器中存數用戶會話

若是在app_init.php中的 SESSION_HANDLER 常量設置爲 SessionMCHandler, Cubi 將會存儲用戶會話數據在MemCache服務器中。

memcache 是一個快速的集中的會話共享解決方案,在Unix/Linux環境中,MemCache很是容易安裝部署,對於Windows服務器來講請參考以下文檔瞭解如何進行安裝部署。

http://www.leonardaustin.com/technical/how-to-install-memcached-on-xampp-on-windows-7 for

設置您自定義的會話處理方式

如您所見,經過在app_init.php中設置SESSION_HANDLER常量,您能夠制定裝載您本身的會話邏輯。

好比
// use custom logic to save session data
//define("SESSION_HANDLER", MODULE_PATH."/abc/MySessionHandler");

相關文章
相關標籤/搜索