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 相关文章推荐
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
php实现上传图片文件代码
Jul 19 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
PHP制作用户注册系统
Oct 23 PHP
大家都应该掌握的PHP关联数组使用技巧
Dec 25 PHP
简单解析PHP程序的运行流程
Jun 23 PHP
php中序列化与反序列化详解
Feb 13 PHP
浅谈PHP中的Trait使用方法
Mar 22 PHP
PHP中的异常处理机制深入讲解
Nov 10 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 curl模拟登录带验证码的网站
2015/11/30 PHP
JS面向对象编程之对象使用分析
2010/08/19 Javascript
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Django中的Signal代码详解
2018/02/05 Python
python 多线程重启方法
2019/02/18 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
入团者的自我评价分享
2013/12/02 职场文书
公司员工检讨书
2014/02/08 职场文书
小学教师师德承诺书
2014/05/23 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL