
先从网络的network的interface的这块入手,因为这块比较的东西需要剔除,可以看看到wan口的配置主要是入口协议的设置为关键,但是uplink的协议有很多选择,目前我们使用最多的是ppoe、static、dhcp着三个选项包括3g拨号也算是。一些协议的初始化和注册相关在model/network/Proto_ppp.lua下面,用source insight 搜索一下就可以看看到。
对于一个页面形成的基本可以参照luci的源码当然是map函数,map主要是映射一个配置文件如/etc/config/network文件,接下来就是section了如:m=map("network") s=m:section(TypedSection, "name", "type", "Title Text"),根据官网描述class NamedSection -----An object describing an UCI section selected by the name。class TypedSection----An object describing a group of UCI sections selected by their type。对应于这个section的描述分别可以用section name 和section type。如:/etc/config/network的配置文件里面有config interface wan这个section中,wan则是name,interface则是type。
通过section()这个函数定义好了以后,后面的就是taboption()或者是option()这两个函数来显示输入框,当然你要是使用taboption()的话前面肯定先定义一个要用tab()函数定义一下。这两个内部的参数中的数据类型涉及到比较多,具体的参数可以参考官网或者多看几个taboption和option的实现例子就可以掌握了,如:当中类型可以是value普通输入框、ListValue下拉列表框、Flag选项框、Buttion按钮、DynamicList可以动态扩展的输入框如:上面图片的DNS动态框。根据不同的类型可以有不同的东西。这两个函数在luci界面中使用的最多。option()和tabtion可以说是静态的只是将后台的值
显示或者将用户输入的值原封不动的保存,不做任何的动作,就像html的页面一样,不做任何处理。对于这种形式太不灵活了。不过luci自身定义了一些函数,如write()、cfgvalue()。在源码随便找了个例子:
说到函数luci中定义了很多自身的函数,有些数据结构都是函数定义的举个例子:foreach()这个函数用的是比较多的。
在network的interface的第一页面上动态生成wan、lan等菜单都是由这个函数读取network配置文件。
可以看到这个函数获取到network下面的interface的section名字然后通过entry()这个函数显示的,这样就可以根据network文件的变动而进行显示的变动。感觉写的有点少,下次有空再补。luci的东西多摸几次还是比较容易掌握的,还有很多的内容,官网上都可以找到。http://luci.subsignal.org


相关文章本文地址:https://blog.sxx1314.com/openwrt/88.html
版权声明:若无注明,本文皆为“unix 软硬件 技术宅 ”原创,转载请保留文章出处。百度已收录















