/usr/lib/lua/luci #luci主目录
luci/controller/ #MVC的控制器目录
->./admin/ #admin模块
luci/view/ #mvc 的view目录
->./admin_status/ #admin_status的视图目录为 luci/model/ #MVC模型的model
-> cbi #mode的CBI模块
$cat /etc/config/helloconfig
config hello
option enabled 0
m = Map("helloconfig", translate("hello config"), translate("hello config")) --/etc/config/helloconfig
m:chain("luci")
s=m:section(TypedSection, "hello", translate("Config"))
s.anonymous = true --不显示Section的名称
s.addremove = true --支持增加
s.template = "cbi/tblsection" --表示在一行显示
TypedSection 定义在luci/cbi.lua
TypedSection | 说明 |
---|---|
Flag | 选择框 |
Value | 文本框 |
Button | 按钮 |
TextValue | 文本 |
ListValue | list下拉框 |
function s.create(self, section)
return TypedSection.create(self, section)
end
o=s:option(Flag, "enabled", translate("启用"))
o.default=0 --默认值
l= s:option(ListValue, "level", translate("Level")) -- option level
l:value("1", translate("a")) --显示别名
l:value("2", translate("b"))
option | 说明 |
---|---|
o.passowrd | 表示密码 |
o.default=0 | 默认值0 |
o.rmempty=true | 是否允许为空true/false |
o.placeholder | 背景提示 |
o.datatype | 数据类型(见 luci/cbi/datatypes.lua) |
数据类型(datatype )
o.datatype -, 见 luci/cbi/datatypes.lua, 可以or() 或者and()
如 “and(uinteger,range(1,255))” IP范围
range(1,255) 取值范围1-255
max(1000) 最大不超过1000
uinteger 无符号整形
o:depends(“enabled”,“1”) --需要enable为1才可使用,用于联动
--保存o的时候将value进行base64编码
function o.write(self, section, value)
local base64 = require "luci.base64"
if(value~=nil)
then
value= base64.encode(value)
end
AbstractValue.write(self, section, value)
---
self.map.uci:foreach(self.map.config, "user",
function(item)
log.print(json.stringify(item))
end )
end
-- 读取值这个值必须与保存时的一样,不然就会执行两次write
function user.cfgvalue(self, value)
return Value.cfgvalue(self, value)
end
显示环境变量
#!/bin/sh
#/www/cgi-bin/os_export
echo "Content-Type: text/plain"
echo ""
export
添加新界面
--[[ 在 luci/controller/admin/help.lua ]]
module('luci.controller.admin.help', package.seeall)
function index()
local page
--添加页
page = node('admin', 'help')
page.target = firstchild()
page.title = _('help')
page.order = 70
page.index = true
---help下添加菜单,系统日志
entry({"admin", "help", "syslog"}, call("action_help_syslog"), _("System Log"), 4)
end
function action_test()
--- #得到http请求参数
local prm = luci.http.context.request.message.params
---#返回json格式如下
luci.http.prepare_content("application/json")
luci.http.write_json({ action="hello", msg="aa" })
--#返回一个模板
luci.template.render("admin_status/syslog", {syslog=syslog})
end
-- 执行命令行,返回命令打印数据
luci.sys.exec("命令行")
luci.sys.call("date -s '%04d-%02d-%02d %02d:%02d:%02d'" %{
date.year, date.month, date.day, date.hour, date.min, date.sec
})
luci.sys.call("uci set system.lede.zonename='Asia/Shanghai'")
luci.sys.call("uci set system.lede.timezone='CST-8'")
luci.sys.call("uci commit system")
--解析json字符串为对象
luci.jsonc.parse("json字符串")
--得到http参数数据
luci.http.formvalue("http参数")
--http回复json数据
luci.http.prepare_content("application/json")
luci.http.write_json({ timestring = os.date("%F %T ") .. luci.i18n.translate(os.date('%A')) })
--序列号json对象返回json字符串
luci.util.serialize_json(x,b)
--读文件返回文件数据
nixio.fs.readfile("文件路劲")
--写文件
nixio.fs.writefile("文件路劲", "数据")
-- 中文翻译
luci.i18n.translate("Enable")
--uci信息获取
local uci = require("luci.model.uci").cursor()
local enable=uci:get("system","ntp","enable")