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 相关文章推荐
一个显示天气预报的程序
Oct 09 PHP
PHP伪静态写法附代码
Jun 20 PHP
php数组应用之比较两个时间的相减排序
Aug 18 PHP
PHP 引用文件技巧
Mar 02 PHP
PHP之COOKIE支持详解
Sep 20 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
详解php用static方法的原因
Sep 12 PHP
thinkphp5实现微信扫码支付
Dec 23 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python获得一个月有多少天的方法
2015/06/04 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
函授毕业生自我鉴定
2013/11/06 职场文书
应届生会计求职信
2013/11/11 职场文书
十佳教师事迹材料
2014/01/11 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
学生检讨书如何写
2014/10/30 职场文书
本溪水洞导游词
2015/02/11 职场文书
领导新年致辞2016
2015/07/29 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis