OpenWrt MVC架构 添加页面

创建页面选项

1.  module("luci.controller.admin.loogson", package.seeall) -–模块入口

2.                --/usr/lib/lua/luci/controller/admin/loogson.lua

3.  function index()

4.      entry({"admin", "loogson"}, alias("admin", "loogson", "loogson"), _("SZ-Loogson"), 30).index = true              --创建一级目录SZ-Loogson选项

5.   

6.      entry({"admin", "loogson", "loogson"}, cbi("admin_loogson/loogson"), _("BoardType"), 1)         --创建二级目录loogson选项

7.   

8.      entry({"admin", "loogson", "control"}, cbi("admin_loogson/control"), _("Control"), 2)           --创建二级目录control选项

9.  end

10.  

 

 

entry(path, target, title=nil, order=nil)

 

1.path其中的“admin”表示为管理员添加脚本,“loogson”即为一级菜单名,“control”为二级菜单名。系统会自动在对应的菜单中生成菜单项。比如想在“System”菜单下创建一个菜单项,那么一级菜单名可以写为“system”。

 

2.target”为调用目标,调用目标分为三种,分别是执行指定方法(Action)、访问指定页面(Views)以及调用CBI Module。

第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为“call("function_name")”,然后在该lua文件下编写名为function_name的函数就可以调用了。

二种可以访问指定的页面,比如写为“template("myapp/mymodule")”就可以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了。

第三种主要应用在配置界面,比如写为“cbi("myapp/mymodule")”就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了

 

3.title和order是针对管理员菜单的,其中的title即是显示在网页上的内容。这里我们创建“/usr/lib/lua/luci/controller/loogson.lua”文件,定义我们的入口为“loogson”。

 

4.从上面的程序可以看出,在“SZ-Loogson”选项卡下共有两个分选项,名称分别为“BoardType”和“Control”。根据cbi指示的目录,在“/usr/lib/lua/luci/model/cbi/admin_loogson”目录下有loogson.lua和control.lua两个文件,两个界面类似,我们选取"Control"界面讲述。

 

创建选项页面

1.在/etc/config/下面创建对应的uci配置文件

如文件路径为“/etc/config/njitclient”,内容如下:

config  login

    option username ''

    option password ''

    option ifname 'eth0'

option domain ''

 

2.然后我们要在CBIModulelua文件中首先需要映射与存储文件的关系

m = Map("njitclient ", "NJIT Client", "Configure NJIT 802.11x client")

第一个参数即为配置文件存储的文件名,不包含路径,比如按上述创建的 “njitclient”,而第二是“配置页面标题,第三个参数配置页面说明”,如下所示:

3.接下来需要创建与配置文件中对应的Section,Section分为两种,NamedSection和TypedSection,前者根据配置文件中的Section名,而后者根据配置文件中的Section类型,这里我们使用后者,代码如下。同时我们设定不允许增加或删除Section(“.addremove = false”),以及不显示Section的名称(“.anonymous = true”)。

s = m:section(TypedSection, "login", "")

s.addremove = false

s.anonymous = true

 

4.接下来我们需要创建Section中不同内容的交互(创建Option),常见的比如有Value(文本框)、ListValue(下拉框)、Flag(选择框)等等

 

require("luci.sys")  --调用luci.sys

 

 m =Map("njitclient", translate("NJIT Client"),translate("Configure NJIT 802.11x client."))  

     --将配置文件与m变量映射

 

 s =m:section(TypedSection, "login", "")  --创建配置文件中对应的section类型

 s.addremove = false   --不允许增减section

 s.anonymous = true    --不显示section name

 

 enable = s:option(Flag, "enable",translate("Enable"))    --为enableoption创建选择框Enable

 name= s:option(Value, "username", translate("Username"))

 pass= s:option(Value, "password", translate("Password"))

 pass.password = true

 domain = s:option(Value, "domain",translate("Domain"))

 ifname = s:option(ListValue,"ifname", translate("Interfaces"))

 

for k, v in ipairs(luci.sys.net.devices())do

    if v ~= "lo" then

        ifname:value(v)    --给下拉框赋值(增加选项)

    end

 end

 

 local apply =luci.http.formvalue("cbi.apply")   --用来获取点击按钮后发送出去的表单

 if apply then

    io.popen("/etc/init.d/njitclient restart")   --执行脚本

 end

 

 return m

 

创建页面执行脚本

RT=50

 run_njit()

  {

     local enable

     config_get_bool enable $1 enable

     

     if [ $enable ]; then

        local username

        local password

        local domain

        local ifname

        

        config_get username $1 username

        config_get password $1 password

        config_get domain $1 domain

        config_get ifname $1 ifname

        

        if [ "$domain" != "" ]; then

            njit-client $username@$domain $password $ifname &

        else

            njit-client $username $password $ifname &

        fi

        

        echo "NJIT Client has started."

    fi

 }

 

 start()

 {

    config_load njitclient

    config_foreach run_njit login

 }

 

 stop()

 {

    killall njit-client

    killall udhcpc

    

    echo "NJIT Client has stoped."

 }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值