luci.dispatcher
entry (path, target, title, order)
Parameters
- path: Virtual path
- target: Target function to call when dispatched.
- title: Destination node title
- order: Destination node order value (optional)
Return value:
Dispatching tree node
接口说明:创建一个新的分发节点,并定义相关的参数
参数说明:
path:访问的路径,不过路径是按字符串数组给定的,比如路径按如下方式写“{"sixing", “advanced", "ddns"}”,那么就可以在浏览器里访问“http://192.168.1.1/cgi-bin/luci/sixing/advanced/ddns”来访问这个脚本。而通常我们希望为管理员菜单添加脚本,那么我们需要按如下方式编写“{"admin", "一级菜单名", "菜单项名"}”,系统会自动在对应的菜单中生成菜单项。比如想在“网络”菜单下创建一个菜单项,那么一级菜单名可以写为“network”。注意,这个路径是在mcv架构下的control目录下的路径,在control目录下是定义luci菜单的节点,建立整个luci菜单的框架。
target:当定义的菜单显示或者分发的时候,调用的实际的行为。调用目标分为三种,分别是:
1、执行指定方法(Action)
2、访问指定页面(Views)
3、调用CBI Module
4、调用alias(...)
5、调用arcombine(trg1,trg2)
- 第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为“call("function_name")”,然后在当前lua文件下编写名为function_name的函数就可以调用了,通过这个函数来完成相应的动作。
- 第二种可以访问指定的页面,比如写为“template("myapp/mymodule")”就可以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了。注意,这个指定的是html页面,属于显示view的范畴,所以该html的路径应该是在view
- 第三种,如果要编写配置页面,就要调用cbi,比如写为“cbi("myapp/mymodule")”就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了。另外,cbi渲染可以加入一些另外的参数,比如帮助界面:
entry({"sixing", "advanced", "ddns"}, cbi("sixing/ddns", {help_url="sixing/help/ddns"}), _("Dynamic DNS"), 11) ,其中
{help_url="sixing/help/ddns"}就是help界面的连接,"sixing/help/ddns"是在controler目录下的help.lua文件中定义的help入口,也是一个entry定义的入口。这个入口又根据自己定义的相关内容进行处理。 - 注意,因为是要配置参数,所以必须用到cgi进行底层数据库操作那么这就是model的范畴,所以相应调用的lua脚本就要放在model目录下.
- 第四种,如果点击了某个菜单,相应的动作是另外一个菜单的入口,那么就使用alias来指明另外路口的路径,如,alias(”sixing “ ,”advanced“,”ddns“),如:entry({"sixing", "advanced"}, alias("sixing", "advanced", "ddns"), _("Advanced"), 50)),表示入口("sixing", "advanced", "ddns")是入口{"sixing", "advanced"}的别名
- 第五种,如果target有分有参数和没有参数的情况,那么就要将这两种target结合起来,就用combine,比如:
entry({"sixing", "advanced", "routes", "route"}, arcombine(cbi("sixing/route_zone"),cbi("sixing/routes")), nil, 130).leaf = true, 其中arcombine(cbi("sixing/route_zone"),cbi("sixing/routes")就结合了两个target,根据是否参数输入自动进行调用,
title:定义的节点的名称,比如:entry({"sixing", "advanced"}, alias("sixing", "advanced", "ddns"), _("Advanced"), 50),其中
_("Advanced")就是定义的菜单入口名称,
_()表示菜单名称翻译的入口为 build/i18n-scan.pl,而不是po文件夹路径。该参数不是必须的,可以直接放空。
order:目标节点显示的顺序,可以放空
_ ()
Parameters
- ...: Virtual path destination
接口说明:为当前入口创建另外一个入口别名。这个入口别名也是用字符串数组作为输入参数给出,
entry({"sixing", "advanced"}, alias("sixing", "advanced", "ddns"), _("Advanced"), 50),那么别名也是用,字符串参数给出。
Parameters
- trg1: Overview Target
- trg2: Detail Target