• ecshop 后台分页功能


    Ecshop分页规则,分以下几个步骤

    1.点击类别,获取第一页获取默认分类列表数据

    2.点击“下一页”,采用ajax调取分页内容

    实例分析(比如订单列表分页admin/order.php)

    1.先写一个function order_list() 模块,里面要包括可以进行排序,分页,查询等功能

    2.在order.php里面写一个elseif ($_REQUEST['act'] == 'list') ,这里是显示默认分页数据

    3.在order.php写一个query(listtable.js默认的是先读取$_REQUEST['act'] == 'query')排序、分页、查询都在query里面完成

    4.html页面(默认order_list.html完整代码)

    实战 ”微仓功能“

    1.我先写一个function depot_log_list,可以进行排序、分类、查询。这个function里面很有讲究的

    重点代码

    function depot_list()
    {
    
       //*f.获取上一次保存的查询条件(如果上一次有进行查询过,则直接从f开始)
       $result = get_filter(); 
       if ($result === false) {
        // a.查询条件
        $filter['goods_id'] = empty($_REQUEST['goods_id']) ? '' : trim($_REQUEST['goods_id']);
            //b.记录总条数
            $filter['record_count'] = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('depot_log') . $ex_where);
    
            //c.分页大小    
        $filter = page_and_size($filter);
        //d.查询的sql
            $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('depot_log') . $ex_where .
                    " order by createtime desc LIMIT " . $filter['start'] . ',' . $filter['page_size'];
        //e.保存查询条件(cookie保存)
            set_filter($filter, $sql);
        }
        else
        {
       //*f.获取上一次保存的查询条件(如果没有进行查询过,则从a查询。)
        sql=" role="presentation" style="position: relative;">sql=sql=sql = result['sql'];
                filter=" role="presentation" style="position: relative;">filter=filter=filter = result['filter'];
        }
    
        $depot_list = $GLOBALS['db']->getAll($sql);
    
      //g.组合成系统默认查询条件
        $arr = array('depot_list' => $depot_list, 'filter' => $filter,
            'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
    
        return $arr;
    }

    e.f这两步骤非常的重要,还有if($result===false){}也非常重要

    实例代码

    function depot_list()
    {
        $result = get_filter();
        
        if ($result === false)
        {
            $filter['user_id'] = empty($_REQUEST['user_id']) ? '' : trim($_REQUEST['user_id']);
            $filter['goods_stock'] = empty($_REQUEST['goods_stock']) ? '' : intval($_REQUEST['goods_stock']);
            
            $filter['sort_by']    = empty($_REQUEST['sort_by'])    ? 'goods_stock' : trim($_REQUEST['sort_by']);  // js的listTable.sort排序功能,也可以user_id
            $filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'DESC'     : trim($_REQUEST['sort_order']);
            
            $ex_where = ' WHERE 1 ';
            $ex_where .=" AND user_id = '$filter[user_id]' ";
            
            
            $filter['record_count'] = $GLOBALS['db']->getOne("SELECT COUNT(*) FROM " . $GLOBALS['ecs']->table('depot') . $ex_where);
    
            /* 分页大小 */
            $filter = page_and_size($filter);
            $sql = "SELECT * FROM " . $GLOBALS['ecs']->table('depot') . $ex_where .
                     " ORDER by " . $filter['sort_by'] . ' ' . $filter['sort_order'] .
                    " LIMIT " . $filter['start'] . ',' . $filter['page_size'];
    
           // $filter['keywords'] = stripslashes($filter['keywords']);
            set_filter($filter, $sql);
        }
        else
        {
            $sql    = $result['sql'];
            $filter = $result['filter'];
        }
    
        $depot_list = $GLOBALS['db']->getAll($sql);
        foreach($depot_list as $k=>$v){
            $sql = "SELECT goods_name,goods_thumb from ".$GLOBALS['ecs']->table('goods')." where goods_id = ".$v['goods_id'];
            $re = $GLOBALS['db']->getRow($sql);
            $depot_list[$k]['name'] = $re['goods_name'];
            $depot_list[$k]['goods_thumb'] = $re['goods_thumb'];    
            
        }
    
        $arr = array('depot_list' => $depot_list, 'filter' => $filter,
            'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
    
        return $arr;
    }

    2.写一个列表

    实例代码

    elseif($_REQUEST['act'] == 'depot_log'){
        $smarty->assign('ur_here',      '个人微仓操作记录');
       
    
        $depot = depot_log_list();
        
        //print_r($depot);
        $smarty->assign('depot_log',    $depot['depot_list']);
        $smarty->assign('filter',       $depot['filter']);
        $smarty->assign('record_count', $depot['record_count']);
        $smarty->assign('page_count',   $depot['page_count']);
        $smarty->assign('full_page',    1);
    
        assign_query_info();
        $smarty->display('depot_log_list.htm');    
    }

    3.写一个列表查询(这里的depot_log_query ,还可以承接html页面的<a href="javascript:listTable.sort('goods_stock', 'DESC'); ">)

    /*会员微仓 ajax 翻页调用*/
    elseif ($_REQUEST['act'] == 'depot_list_query'){
        
        $depot = depot_list();
        //$depot = user_list();
    
        $smarty->assign('depot',    $depot['depot_list']);
        $smarty->assign('filter',       $depot['filter']);
        $smarty->assign('record_count', $depot['record_count']);
        $smarty->assign('page_count',   $depot['page_count']);
        
        $sort_flag  = sort_flag($depot['filter']);
        $smarty->assign($sort_flag['tag'], $sort_flag['img']);
    
        make_json_result($smarty->fetch('depot_list.htm'), '', array('filter' => $depot['filter'], 'page_count' => $depot['page_count']));  // 注意此处的结构,缺少mke_json_result不行     
    }

    4.html页面html代码

    <table cellpadding="3" cellspacing="1">
      <tr>
        <th width="80">
          <input onclick='listTable.selectAll(this, "checkboxes")' type="checkbox">
          {$lang.record_id}{$sort_user_id}
        </th>
        <th width="60">缩略图</th>
        <th>商品名称</th>
        <th><a href="javascript:listTable.sort('order_amount', 'DESC'); ">库存</a></th>
        <th>{$lang.handler}</th>
      <tr>
      {foreach from=$depot item=vo}
      <tr>
        <td><input type="checkbox" name="checkboxes[]" value="{$vo.id}" notice="{if $user.user_money ne 0}1{else}0{/if}"/>{$vo.id}</td>
        <td class="first-cell"><a href="../goods.php?id={$vo.id}" target="_blank"><img src="../{$vo.goods_thumb}" width=40 style="border: 1px solid #eee"/></a></td>
        <td><span onclick="listTable.edit(this, 'edit_email', {$user.user_id})"><a href="../goods.php?id={$vo.id}" target="_blank">{$vo.goods_name}</a></span></td>
        <td align="center">{$vo.goods_stock}</td>
        <td align="center">
         
          <a href="users.php?act=depot_log&user_id={$vo.user_id}&goods_id={$vo.goods_id}" title="查看记录"><img src="images/icon_view.gif" border="0" height="21" width="21" /></a>
          
        </td>
      </tr>
      {foreachelse}
      <tr><td class="no-records" colspan="11">{$lang.no_records}</td></tr>
      {/foreach}
      <tr>
          <td colspan="2">
          <input type="hidden" name="act" value="batch_remove" />
          <input type="submit" id="btnSubmit" value="{$lang.button_remove}" disabled="true" class="button" /></td>
          <td align="right" nowrap="true" colspan="9">
          {include file="page.htm"}
          </td>
      </tr>
    </table>

    js代码

    {if $full_page}
    </div>
    <!-- end users list -->
    </form>
    <script type="text/javascript" language="JavaScript">
    <!--
    listTable.recordCount = {$record_count};
    listTable.pageCount = {$page_count};
    
    {foreach from=$filter item=item key=key}
    listTable.filter.{$key} = '{$item}';
    {/foreach}
    
    {literal}
    onload = function()
    {
        //document.forms['searchForm'].elements['keyword'].focus();
        // 开始检查订单
        startCheckOrder();
      //a.listtable.js默认是listTable.query="query",也就是order.php页面的elseif ($_REQUEST['act'] == 'query')
        如果不想只想默认的$_REQUEST['act']=='query',就需要写上以下代码
    
        listTable.query = "depot_list_query";     默认载入使用(第一次点击列表)  
    }
    
    /**
     * 搜索用户
     */
    function searchUser()
    {
        //listTable.filter['keywords'] = Utils.trim(document.forms['searchForm'].elements['keyword'].value);
        listTable.filter['page'] = 1;
       // b.与a作用一样
        listTable.query = "depot_list_query";  承接上一次查询条件
        listTable.loadList();
    }
    
    //-->
    </script>
    {/literal}
    {include file="pagefooter.htm"}
    {/if}

    如果改变了,默认的query查询;则a,b两处都不可以少

    分页实例化结构代码

    Array
    (
        [depot_list] => Array
            (
                [0] => Array
                    (
                        [id] => 1
                        [user_id] => 1
                        [goods_id] => 2
                        [goods_stock] => 2
                        [goods_name] => 荷兰Nutrilon牛栏奶粉 
                    )
    
                [1] => Array
                    (
                        [id] => 7
                        [user_id] => 1
                        [goods_id] => 6
                        [goods_stock] => 4
                        [goods_name] => 1111
                    )
    
            )
    
        [filter] => Array
            (
                [user_id] => 1
                [record_count] => 2
                [page_size] => 4
                [page] => 1
                [page_count] => 1
                [start] => 0
            )
    
        [page_count] => 1
        [record_count] => 2
    )

    转: https://www.cnblogs.com/wesky/p/5424685.html

  • 相关阅读:
    Live2d Test Env
    Live2d Test Env
    Spring Boot GraphQL 实战 02_增删改查和自定义标量
    Spring Boot GraphQL 实战 01_快速入门
    【MacBook】 SSH使用
    一个神奇的没有springboot注释的api文档生成器---JApiDocs
    Spring Cloud Alibaba 06:Gateway服务网关
    leetcode-300. 最长递增子序列
    leetcode-309. 最佳买卖股票时机含冷冻期
    leetcode-121. 买卖股票的最佳时机
  • 原文地址:https://www.cnblogs.com/fps2tao/p/9417457.html
Copyright © 2020-2023  润新知