fieldlist的前端添加和编辑,后端处理和存储,全流程处理。记得点赞!
以添加时间(time)、方式(way)、名称(name)为例
这玩意没有前端显示,除非你自己写个页面从数据库解析JSON然后按你想要的效果加载出来
数据库存储:
字段名:content 类型:text
前端添加:
add.html里把原先的row[content]的标签改成下面这样<div class="form-group"> <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label> <div class="col-xs-12 col-sm-8"> <dl class="fieldlist" data-template="basictpl" data-name="row[content]"> <dd> <ins>{:__('时间')}</ins> <ins>{:__('方式')}</ins> <ins>{:__('名称')}</ins> </dd> <dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd> <!--请注意 dd和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏--> <textarea name="row[content]" disabled class="form-control hidden" cols="30" rows="5"></textarea> </dl> <script id="basictpl" type="text/html"> <dd class="form-inline input-group"> <input type="text" name="<%=name%>[<%=index%>][time]" class="form-control" value="<%=row.time%>" placeholder="时间"/> <input type="text" name="<%=name%>[<%=index%>][way]" class="form-control" value="<%=row.way%>" placeholder="方式"/> <input type="text" name="<%=name%>[<%=index%>][name]" class="form-control" value="<%=row.name%>" placeholder="名称"/> <!--下面的两个按钮务必保留--> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span> </dd> </script> </div> </div>//input-group这个class是fieldlist里本身就有的一个样式,加上好点!具体自测!
后端添加:
控制器里的add()方法//处理json字符串 beginif (empty($params['content'])) {//判断是否为空 $this->error(__('项目不能为空,请添加!'));}$params['content'] = array_merge($params['content']);//给数组重新排序$str = '[';for ($i = 0; $i < count($params['content']); $i++) {//动态拼接json字符串 $str = $str . '{"time":"' . $params['content'][$i]['time'] . '","way":"' . $params['content'][$i]['way'] . '","name":"' . $params['content'][$i]['name'] . '"},';}$str = substr($str, 0, strlen($str) - 1);//去掉最后一个逗号$params['content'] = $str . ']';//赋值//处理json字符串 end$result = $this->model->allowField(true)->save($params);//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//这里我要着重说一下为什么别人一行json_encode就搞定的我却写了十多行,因为!正常情况下,生成的json是:[{"time":"1","way":"2","name":"3"},{"time":"4","way":"5","name":"6"},{"time":"7","way":"8","name":"9"}]但是!如果中途用户删除之前刚添加的元素,就会导致前端元素序号发生变化,最后进数据库的就是:["0":{"time":"1","way":"2","name":"3"},"2":{"time":"7","way":"8","name":"9"}]!!!操蛋吧,这样你之前写的不带元素序号的处理方式就没法用了,会报错,所以说,宁写10行不写一行!!!当然,你也可以array_merge给数组重新排序后以带序号的方式存进数据库,我不喜欢带序号!只有老司机会懂,不解释。//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
前端编辑:
//edit.html里把row[content]的{$row.content|htmlentities}赋值写好<div class="form-group"> <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label> <div class="col-xs-12 col-sm-8"> <dl class="fieldlist" data-template="basictpl" data-name="row[content]"> <dd> <ins>{:__('时间')}</ins> <ins>{:__('方式')}</ins> <ins>{:__('名称')}</ins> </dd> <dd><a href="javascript:;" class="btn btn-sm btn-success btn-append"><i class="fa fa-plus"></i> {:__('Append')}</a></dd> <!--请注意 dd和textarea间不能存在其它任何元素,实际开发中textarea应该添加个hidden进行隐藏--> <textarea name="row[content]" disabled class="form-control hidden" cols="30" rows="5">{$row.content|htmlentities}</textarea> </dl> <script id="basictpl" type="text/html"> <dd class="form-inline input-group"> <input type="text" name="<%=name%>[<%=index%>][time]" class="form-control" value="<%=row.time%>" placeholder="时间"/> <input type="text" name="<%=name%>[<%=index%>][way]" class="form-control" value="<%=row.way%>" placeholder="方式"/> <input type="text" name="<%=name%>[<%=index%>][name]" class="form-control" value="<%=row.name%>" placeholder="名称"/> <!--下面的两个按钮务必保留--> <span class="btn btn-sm btn-danger btn-remove"><i class="fa fa-times"></i></span> <span class="btn btn-sm btn-primary btn-dragsort"><i class="fa fa-arrows"></i></span> </dd> </script> </div> </div>
后端编辑:
控制器里的edit()方法//处理json字符串 beginif (empty($params['content'])) {//判断是否为空 $this->error(__('项目不能为空,请添加!'));}$params['content'] = array_merge($params['content']);//给数组重新排序$str = '[';for ($i = 0; $i < count($params['content']); $i++) {//动态拼接json字符串 $str = $str . '{"time":"' . $params['content'][$i]['time'] . '","way":"' . $params['content'][$i]['way'] . '","name":"' . $params['content'][$i]['name'] . '"},';}$str = substr($str, 0, strlen($str) - 1);//去掉最后一个逗号$params['content'] = $str . ']';//赋值//处理json字符串 end$result = $row->allowField(true)->save($params);
未经本人允许不得随意转载!
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。