freepbx模塊開發 FreePbx API:modules

FreePbx API:modules

文件:

1Module.xml

這個文件用於描述一個模塊,包含了模塊的名字,版本,類型,種類,預定義的菜單等

Rawname: 必須唯一,還必須和當前模塊的目錄名稱一致,

Name:這個是模塊的顯示名稱

Description:顯示在模塊主頁上的描述信息,可以是多行

Version:當前模塊的版本,當更新模塊的時候要記得增加版本號,數字的版本只能是(1.2,1.2.2)

Type:兩個值(setup/tool),setup 通知FreePbx此模塊應該出現在安裝頁面,tool會使模塊出現在工具頁面,(有兩個菜單)

Category:當模塊被顯示出來,模塊以及category進行分組,標準的category取值包括modules /core / addons

Menuitems:菜單項,KEY說明唯一的菜單ID,VALUE說明顯示名稱,可以有定義多項,菜單ID必須唯一併且要連接到當前模塊的page.menuid.php文件

比如, <timecondition>Time Conditions</timecondition> 顯示 "Time Conditions" on the menu, and links to page.timecondition.php.

菜單項支持很多的屬性

Category:分類顯示,如果沒有指定,默認是模塊的類別

Display:顯示菜單,允許頁面顯示一個菜單兩次,需要兩個不同的tag names

Type:菜單顯示在type裏面,當前有效的值有setup/tools,以後可能會擴展很多,默認和模塊的Type相同.

Href:重寫默認的連接,用當前的URL替代,這是唯一有用的方法連接到定製頁面,URL必須完整,以http://開始

target:連接打開的模式,只有當href被指定纔有用,值有:_blank _parent _self _top

sort:顯示的順序,取值從-1010,-5顯示在2的前面,默認爲0

例子:

Location:module.tgz的位置,(具體作用未知(更新?))

Info:一個包含當前模塊更多信息的URL,通常是一個WIKI頁在freepbx.org 上面

Depends:依賴關係,設置模塊的從屬關係,允許的值有

’version’(freepbx版本,可是以這些操作符>=)===、《、〈=、!= 默認是>)

‘module’:依賴其他的模塊,值是一個模塊的名字,或者是模塊名稱後面加一個空格再加一個版本號。

‘engine’: The telephony engine (asterisk) name and version required. Follows the same conventions as a module.

‘file’:系統中存在的一個文件,使用絕對路徑,

Depends中所有的值可能用and連接,必須和安裝完的模塊匹配。

Changlog:最近的模塊更改記錄,

Attention:指定的字段,

Module.xml 定義了模塊的基本信息。

2Functions.inc.php

當執行freepbx的任何部分,配置的時候就被加載了,這樣允許模塊隨意的從其他模塊調用他的函數。這個文件中包含了多個函數,這些函數被模塊的多個地方調用,用於保存/新建/讀入模塊創建的條目(數據)。必須在模塊名稱前面加一個下劃線,這樣避免和其他模塊發生衝突。

通常包含各種各樣的函數

==== ''modulename''_destinations() ====

返回一個當前模塊預定的destinations2維數組,像是郵件路由,IVR,振鈴組

這個數組如下:

{{{

  return array(

    array(

      'destination' => 'app-blackhole,hangup,1',

      'description' => 'Hangup',

    ),

    array(

      'destination' => 'app-blackhole,congestion,1',

      'description' => 'Congestion'

    ),

  );

}}}

‘destination’的值必須是一個有效的目的地在拔叫方案中的'context,extension,priority', 'description'的值會出現在一下destinations的下拉列表框中。

==== ''modulename''_get_config() ====

這個函數傳遞一個參數,$engine(翻譯成引擎?),當前被使用的engine,通常是asterisk,但是我們還是應該經檢測它。

這個函數總是申明一個全局變量$ext,這是一個’extensions’類的對象會成了一個拔叫方案。(ApiExtensions extensions類允許很多模塊創建拔叫方案代碼,加載修改被其他模塊創建的代碼,這是減少可能發的衝突的好辦法 放在extensions.class.php中)

Example:

{{{

function mymodule_get_config($engine) {

  global $ext;

  switch($engine) {

    case 'asterisk':

      // "blackhole" destinations

      $ext->add('app-blackhole', 'hangup', '', new ext_noop('Blackhole Dest: Hangup'));

      $ext->add('app-blackhole', 'hangup', '', new ext_hangup());

 

      $ext->add('app-blackhole', 'congestion', '', new ext_noop('Blackhole Dest: Congestion'));

      $ext->add('app-blackhole', 'congestion', '', new ext_answer());

      $ext->add('app-blackhole', 'congestion', '', new ext_playtones('congestion'));

      $ext->add('app-blackhole', 'congestion', '', new ext_congestion());

      $ext->add('app-blackhole', 'congestion', '', new ext_hangup());

    break;

  }

}

}}}

 

 

3.install.sql

在安裝或者更新的時候直接運行的SQL文件,

4.install.php

在安裝或者更新的時候被加載的情況下執行的PHP腳本。

5Uninstall.sql

A straight(直接) SQL file that is run (if it exists) during uninstallation.

6.uninstall.php

A PHP script that is run (by being include()'ed) during uninstallation.

7. page.''menitem'''.php

這是一個圖形界面,當菜單被選擇的時候加載,當前有兩種方法創建模塊,舊方法是定義所有的HTML和表單處理文件。

freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.routing.php

新方法是使用[wiki:ApiGuiElements GUI Elements API]來定義元素和表單處理的函數。然後放在functions.inc.php裏面。這個文件變得相當基礎。

For an example see [browser:freepbx/trunk/amp_conf/htdocs/admin/modules/core/page.users.php] and [browser:freepbx/trunk/amp_conf/htdocs/admin/modules/core/functions.inc.php]8.CSS/JS files

模塊可以有CSSjavascript 文件自動的被加載在主模板裏面。文件被命名爲''modulename''.css, ''menuitem''.css, ''modulename''.js, or ''menuitem''.js中的任何一種,文件會在主模板的<head>部分加載。

9Installing system files

一個模塊可能加載系統其他地方的文件,比如AGI 腳本,可以執行指定模塊的子目錄的名字,文件會通過retrieve_conf script連接到適當的位置

* '''agi-bin''' goes to /var/lib/asterisk/agi-bin

 * '''sounds''' goes to /var/lib/asterisk/sounds

 * '''etc''' goes to /etc/asterisk

 * '''bin''' goes to /var/lib/asterisk/bin

這些目錄在amportal.conf中定義。注意使用有效合理的使用並且不要和己存在的其他文件衝突,如果目標目錄中己經存在一個同名文件,模塊文件將不能連接,模塊將會出錯。

10. Installing/Uninstalling Modules

 

 

系本人自己翻譯的,有什麼不對的地方希望大家指出來,轉載請註明出處,謝謝合作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章