tp5框架基于Ajax实现列表无刷新排序功能示例


Posted in PHP onFebruary 10, 2020

本文实例讲述了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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
简单的移动设备检测PHP脚本代码
Feb 19 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
php导入excel文件到mysql数据库的方法
Jan 14 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
php二维码生成
Oct 19 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
Laravel学习教程之路由模块
Aug 18 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php访问对象中的成员的实例方法
Nov 17 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 #PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 #PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 #PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 #PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 #PHP
php测试kafka项目示例
Feb 06 #PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 #PHP
You might like
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
原生javascript实现匀速运动动画效果
2016/02/26 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
python django 实现验证码的功能实例代码
2017/05/18 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
苹果美国官方商城:Apple美国
2016/08/24 全球购物
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
请说出这段代码执行后a和b的值分别是多少
2015/03/28 面试题
Java软件工程师综合面试题笔试题
2013/09/08 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
python获取字符串中的email
2022/03/31 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技