Openwrt开发日志——建立一个界面

来源:互联网 发布:罗斯数据 编辑:程序博客网 时间:2024/06/05 09:57

2017/6/29重新拾回Openwrt一下开始正确编辑教程,做相关记录,高效解决问题

Mission:

l 创建一个Luci界面

l 使用iptable对包进行截取

l 将两者结合

 

Mission 1

                                                                                                 ——创建一个Luci界面

Tools

      WinSCP

Reference

openwrtluci学习笔记

http://m.blog.chinaunix.net/uid-26824563-id-4591418.html

MVC框架 百度百科

http://baike.baidu.com/link?url=bIYf049oTLKasepRBDisT1yhYfOWFdkc5lF9jxEIgWDrAzqlF1Rx4sfiTBcmynORRL04Mki4Ral_WihBK4T3VQOQPyOwOv-gevW3eceQam3

 

Procedure

(1)   认识MVC框架:

MVCModelViewController

Controller实现ModelView的同步,一旦Model改变,View立即改变。

l Model(模型):应用程序的核心(比如数据库记录列表);是应用程序中用于处理应用程序数据逻辑的部分。

l View(视图):显示数据(数据库记录);应用程序中处理数据显示的部分,通常视图(View)是依据模型(Model)数据创建的。

l Controller(控制器):处理输入(写入数据库记录);应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 模式同时提供了对 HTMLCSS JavaScript的完全控制。

 

(2)   /usr/lib/lua/luci/controller/admin目录下创建Sao.lua文件,

内容如下:

                    module("luci.controller.admin.Sao",package.seeall)

                    function index()

                                      entry({"admin", "Sao"}, alias("admin", "Sao", "Sao"),_("inner-Sao"), 30).index = true

                                      entry({"admin", "Sao", "Sao"}, cbi("admin_Sao/Sao"),_("BoardType"), 1)

                                      entry({"admin", "Sao", "control"}, cbi("admin_Sao/control"),_("Control"), 2)

                   end

        说明:

       1) lua单行注释使用“--”,类似于C语言的“//”,多行注释时,“--[[”类似C语言中的“”

       2) 1行定义了模块的入口。即“/usr/lib/lua/luci/controller/admin”所示的目录下建立一个Sao.lua文件。如果程序比较多,可能分为好几个模块,那么可以在controller下再建立一个子目录,比如controller/Saosix/,那么就可以写成“luci.controller.Saosix.Sao”
       3)
从第3行到10行即是function index函数,该函数定义了inner-Sao下各个选项卡。
        function
内:

l entry表示添加一个新的模块入口,entry的定义如下,其中后两项都是可以为空:

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

“path”是访问的路径,路径是按字符串数组给定的,比如路径按如下方式写:

“{"admin", "Sao", "control"}”

那么就可以在浏览器里访问“http://192.168.1.1/cgi-bin/luci/admin/Sao/control”来访问这个脚本。

      其中的“admin”表示为管理员添加脚本,“Sao”即为一级菜单名,“control”    菜单项名。系统会自动在对应的菜单中生成菜单项。

      比如想在“System”菜单下创建一个菜单项,那么一级菜单名可以写为      “system”

换句话说,在Path中,顺序为用户项、一级菜单,二级菜单,。。。但是到后面具体为哪一级的菜单名称,它现实的title,是在_(string)国际化中定义的。

l “target”为调用目标,调用目标分为三种,分别是:

      等同于别的链接(alias)执行指定方法(Action)、访问指定页面(Views)、调用CBIModule

n 第零种Alias并不确定属不属于调用,它直接把这个entry指向别的entry,上级菜单到下级菜单需要用到这个。

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

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

n 第三种主要应用在配置界面,比如写为“cbi("myapp/mymodule")”就可以调用/usr/lib/lu a/luci/model/cbi/myapp/mymodule.lua文件了。
title
order是针对管理员菜单的,其中的title即是显示在网页上的内容。这里我们创建“/usr/lib/lua/luci/controller/Sao.lua”文件,定义我们的入口为“Sao”

l 从上面的程序可以看出,在“inner-Sao”选项卡下共有两个分选项,名称分别为“BoardType”“Control”。根据cbi指示的目录,在                                                                          /usr/lib/lua/luci/model/cbi/admin_Sao”

目录下有Sao.luacontrol.lua两个文件,两个界面类似。

原创粉丝点击