ThinkPHP使用了独立的模板和Action系统,带来的好处是方便,但是官网给出的示例非常少,很多用法只能一个个去翻源码,很不方便,下面说说常用的两个html控件的处理方法:
模型中没有提供的自动处理内容使用起来很不方便,比如select控件,其选中标识是"selected=selected",在模型中不能自动赋值的。要为select赋值,就必须用模板标签。,或者也行。这样select标签的赋值部分写起来就像下面这样:
selected>{$typel.title}
解释下,上面这个是一个文章分类选择的select,其中 $typel对应的是分类表,在action中的代码是
$typel=M('ArtType')
而$vo则对应的文章内容表,其中一列列名是type,内容是分类表的id号。action中初始化代码是
$name = $this->getActionName();
$model = M($name);
$id = $_REQUEST [$model->getPk()];
$vo = $model->getById($id);
这里完整的代码可以参看thinkphp的Rbac权限管理的示例。其中的节点管理就涉及了这方面的源码。
下面说说checkbox,不得不吐槽一下check的用法有点跟不上时代。大家都在数据库里面存储0,1,而checkbox提交的值是on和off(字符串),这怎么用?
这个源文件中基本上没有,但是HTML标签中有一个checkbox标签,有兴趣可以参考下HTML标签的源码,看看怎么用。下面我说说不用外部标签的一种办法:使用javascript。
思路是设置一个隐藏域来存储想提交的真正内容,而chekcbox每做一次改变,就对应的改变下隐藏域的内容。
在文档
中添加如下js代码:
代码的意思很简单,就是根据传入的checkbox的值来设置hiddenfield的值0,1。
在正文中写如下代码:
checked="checked" name="checkB" >
其中,数据库中对应的列是check列,而因为checkbox的名字和数据库中列不一样,所以提交的时候实际是提交的hidden的值,这样就实现了对数据库中值的对应。