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+mysql 实现身份验证代码
Mar 24 PHP
PHP 防注入函数(格式化数据)
Aug 08 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
浅谈PHP的反射机制
Dec 15 PHP
浅谈PHP安全防护之Web攻击
Jan 03 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
pycharm远程调试openstack代码
2017/11/21 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Flask之flask-session的具体使用
2018/07/26 Python
详解Python做一个名片管理系统
2019/03/14 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
python创建文本文件的简单方法
2020/08/30 Python
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
年度考核自我鉴定
2014/03/19 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
协议书格式模板
2016/03/24 职场文书