PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

fieldlist的前端添加和编辑,后端处理和存储,全流程处理。

管理员 2024-12-14
Fastadmin
8

fieldlist的前端添加和编辑,后端处理和存储,全流程处理。记得点赞!
以添加时间(time)、方式(way)、名称(name)为例
QQ浏览器截图20200807094403.png



这玩意没有前端显示,除非你自己写个页面从数据库解析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修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部