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中一个控制字符串输出的函数
Oct 09 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
Oct 13 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
Jun 19 PHP
php实现TCP端口检测的方法
Apr 01 PHP
PHP SPL标准库之接口(Interface)详解
May 11 PHP
PHP常用的排序和查找算法
Aug 06 PHP
Windows下php+mysql5.7配置教程
May 16 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
浅谈laravel aliases别名的原理
Oct 24 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python定时关机小脚本
2018/06/20 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
keras多显卡训练方式
2020/06/10 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
《金色的脚印》教后反思
2014/04/23 职场文书
公共场所禁烟标语
2014/06/25 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
综治维稳工作汇报
2014/10/27 职场文书
教师节寄语2015
2015/03/23 职场文书
员工离职通知函
2015/04/25 职场文书
辞职信格式范文
2015/05/13 职场文书
圣诞晚会主持词
2015/07/01 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL