2017/6/29 重新拾回Openwrt 一下开始正确编辑教程,做相关记录,高效解决问题
Mission:
l 创建一个Luci界面
l 使用iptable对包进行截取
l 将两者结合
Mission 1
——创建一个Luci界面
Tools:
WinSCP
Reference:
openwrt中luci学习笔记
http://m.blog.chinaunix.net/uid-26824563-id-4591418.html
MVC框架 百度百科
http://baike.baidu.com/link?url=bIYf049oTLKasepRBDisT1yhYfOWFdkc5lF9jxEIgWDrAzqlF1Rx4sfiTBcmynORRL04Mki4Ral_WihBK4T3VQOQPyOwOv-gevW3eceQam3
Procedure:
(1) 认识MVC框架:
MVC:Model,View,Controller
Controller实现Model与View的同步,一旦Model改变,View立即改变。
l Model(模型):应用程序的核心(比如数据库记录列表);是应用程序中用于处理应用程序数据逻辑的部分。
l View(视图):显示数据(数据库记录);应用程序中处理数据显示的部分,通常视图(View)是依据模型(Model)数据创建的。
l Controller(控制器):处理输入(写入数据库记录);应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 模式同时提供了对 HTML、CSS 和 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)、调用CBI Module。
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.lua和control.lua两个文件,两个界面类似。