freepbx 模块开发 [翻译]

来源:互联网 发布:php 取出数组中最大值 编辑:程序博客网 时间:2024/05/22 01:29

转自:http://www.asterisk-r.cn/?p=91

1.Module.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:显示的顺序,取值从-10到10,-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 定义了模块的基本信息。
2.Functions.inc.php
当执行freepbx的任何部分,配置的时候就被加载了,这样允许模块随意的从其他模块调用他的函数。这个文件中包含了多个函数,这些函数被模块的多个地方调用,用于保存/新建/读入模块创建的条目(数据)。必须在模块名称前面加一个下划线,这样避免和其他模块发生冲突。
通常包含各种各样的函数
==== ”modulename”_destinations() ====
返回一个当前模块预定的destinations的2维数组,像是邮件路由,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脚本。
5.Uninstall.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
模块可以有CSS和javascript 文件自动的被加载在主模板里面。文件被命名为”modulename”.css, ”menuitem”.css, ”modulename”.js, or ”menuitem”.js中的任何一种,文件会在主模板的<head>部分加载。
9.Installing 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中定义。注意使用有效合理的使用并且不要和己存在的其他文件冲突,如果目标目录中己经存在一个同名文件,模块文件将不能连接,模块将会出错。

原创粉丝点击