tp5框架基于Ajax实现列表无刷新排序功能示例
本文实例讲述了tp5框架基于Ajax实现列表无刷新排序功能。分享给大家供大家参考,具体如下:
在后台管理的时候我们有时需要对数据进行排序,以控制数据在模板显示的顺序,排序的原理就是修改数据库,然后更新视图。我们可以单独写一个方法来实现排序的功能,成功后刷新页面,也可以利用Ajax技术,实现数据的局部请求,也就是无刷新排序的功能。
现在想要达到的效果是在排序的input框中输入数值,点击排序实现无刷新排序的功能。
首先是表格(cate.html)这一块我们要单独摘出来,放入到一个单独页面当中,方便我们数据的请求。
<table class="table table-bordered"
{include file="news/cateajaxpage"}
</table
其中cateajaxpage.html的内容为:
<thead
<tr
<th ID</th
<th 分类名称</th
<th 排序</th
<th 操作</th
</tr
</thead
<tbody
{volist name="news" id="vo"}
<tr
<td {$vo.id}</td
<td {$vo.name}</td
<td <input type="text" value="{$vo.order}" name="{$vo.id}" </td
<td
<div class="btn-group open"
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle" aria-expanded="true" 操作 <span class="caret" </span
</button
<ul class="dropdown-menu"
<li <a href="{:url('admin/news/cateadd',array('id'= $vo.id))}" rel="external nofollow" 添加子分类</a
</li
<li <a href="{:url('admin/news/cateupd',array('id'= $vo.id))}" rel="external nofollow" 修改</a
</li
<li <a href="javascript:if(confirm('确认删除?')) location='{:url('admin/news/del',array('id'= $vo.id))}'" rel="external nofollow" 删除</a
</li
</ul
</div
</td
</tr
{volist name="$vo.children" id="vo1"}
<tr
<td {$vo1.id}</td
<td |————{$vo1.name}</td
<td <input type="text" value="{$vo1.order}" name="{$vo1.id}" </td
<td
<div class="btn-group open"
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle" aria-expanded="true" 操作 <span class="caret" </span
</button
<ul class="dropdown-menu"
<li <a href="{:url('admin/news/cateupd',array('id'= $vo1.id))}" rel="external nofollow" 修改</a
</li
<li <a href="javascript:if(confirm('确认删除?')) location='{:url('admin/news/del',array('id'= $vo1.id))}'" rel="external nofollow" 删除</a
</li
</ul
</div
</td
</tr
{/volist}
{/volist}
</tbody
这里因为使用了无限级分类得到多维数组的技术,所以会有两个volist,如果你不太懂无限级分类的话可以分配过来一个普通的数据过来,重点是:
<input type="text" value="{$vo.order}" name="{$vo.id}" </td
这句在显示排序值得同时,为每一个input框设置了一个name值,这个值就是分类的id值,通过这种方式,可以为列表当中的所有input框进行区分,且能通过数据库获取到对应的分类。
回到cate.html,写Ajax:
$("#changeOrder").click(function(event) {
/* Act on the event */
var json = {};
$("input").not('#top-search').each(function(index, el) {
json[$(this).attr('name')] = $(this).val();
});
$.ajax({
url: '{:url("admin/news/cate")}',
type: 'post',
data: json
})
.done(function(data) {
$(".table-bordered").html(data);
$(document).click();
})
});
其中changeOrder是我们为排序按钮添加的id值,我们把每一组id、order都放进json变量当中,传递给控制器。
控制器代码:
public function cate()
{
$news_model = model("Newsfenlei");
if (request()- isAjax()) {
$post = input('post.');
foreach ($post as $key = $value) {
db("newsfenlei")- where('id',$key)- update(['order'= $value]);
}
$list = db("newsfenlei")- order('order desc')- select();
$news = $news_model- getNews($list);
$this- assign("news",$news);
return view('cateajaxpage');
} else {
$list = db("newsfenlei")- order('order desc')- select();
$news = $news_model- getNews($list);
$this- assign("news",$news);
return view();
}
}
因为涉及到无限级分类,所以使用了模型层获取数据,getNews方法是获取到无限级分类后的数据,这块大家可以直接使用数据库获取数据,需要注意的是处理Ajax请求的时候,我们根据POST信息进行数据更新,再数据更新以后再查询数据库,将数据分配到模板上。
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
- use vue vuex vue-router, not use webpack
- 从尾到头打印链表
- Webpack+Vue如何导入Jquery和Jquery的第三方插件
- [Hadoop大数据]——Hive部署入门教程
- Vuex原来可以这样上手
- 《Hive编程指南》—— 读后总结
- Event(事件)的传播与冒泡
- [Hadoop大数据]——Hive数据的导入导出
- 区块链技术在电子游戏与博彩行业备受追捧 有望实现数字商品货币化
- vue原来可以这样上手
- [Hadoop大数据]——Hive连接JOIN用例详解
- 扑克牌的顺子
- 数组前半部分和后半部分有序的全排序
- restful Api 风格契约设计器:Swagger-editor和swagger-ui的应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统下部署项目的设置办法
- PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
- ubantu 16.4下Hadoop完全分布式搭建实战教程
- Laravel5.1 框架模型查询作用域定义与用法实例分析
- 整理Linux中字符串的相关操作技巧
- Laravel5.1 框架Middleware中间件基本用法实例分析
- Linux基础命令之mktemp详解
- TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
- Laravel5.1 框架模型一对一关系实现与使用方法实例分析
- Linux中怎么查看已挂载的文件系统类型详解
- PHP实现笛卡尔积算法的实例讲解
- TP5框架简单登录功能实现方法示例
- 使用 Apache Web 服务器配置两个或多个站点的办法
- 详解laravel passport OAuth2.0的4种模式
- Apache Web 服务器的安装配置办法