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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
虚拟主机中对PHP的特殊设置
Oct 09 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
php中替换字符串中的空格为逗号','的方法
Jun 09 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
php中上传文件的的解决方案
Sep 25 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
Oct 11 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
微信小程序实现日期格式化和倒计时
2020/11/01 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
Python实现的RSS阅读器实例
2015/07/25 Python
Python数据类型学习笔记
2016/01/13 Python
使用Python对MySQL数据操作
2017/04/06 Python
python pygame实现方向键控制小球
2019/05/17 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
如何利用python发送邮件
2020/09/26 Python
英国香水店:The Perfume Shop
2017/03/27 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
秋季运动会广播稿
2014/02/22 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
安全伴我行主题班会
2015/08/13 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang
Django drf请求模块源码解析
2021/06/08 Python
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis