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 syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
一个PHP的ZIP压缩类分享
May 04 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
常用PHP封装分页工具类
Jan 14 PHP
PHPExcel在linux环境下导出报500错误的解决方法
Jan 26 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 PHP
Laravel框架处理用户的请求操作详解
Dec 20 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
php批量修改表结构实例
2017/05/24 PHP
jQuery 位置插件
2008/12/25 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
2013/04/23 Javascript
ExtJS自定义主题(theme)样式详解
2013/11/18 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
项目合作意向书范本
2014/04/01 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
民主生活会发言材料
2014/10/20 职场文书
会计求职信怎么写
2015/03/20 职场文书
新党员入党决心书
2015/09/22 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
4种方法python批量修改替换列表中元素
2022/04/07 Python