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 = $result['sql'];
    $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', ); 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="" cellspacing="">
<tr>
<th width="">
<input onclick='listTable.selectAll(this, "checkboxes")' type="checkbox">
{$lang.record_id}{$sort_user_id}
</th>
<th width="">缩略图</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= 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="data:images/icon_view.gif" border="" height="" width="" /></a> </td>
</tr>
{foreachelse}
<tr><td class="no-records" colspan="">{$lang.no_records}</td></tr>
{/foreach}
<tr>
<td colspan="">
<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="">
{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'] = ;
// b.与a作用一样
listTable.query = "depot_list_query"; 承接上一次查询条件
listTable.loadList();
} //-->
</script>
{/literal}
{include file="pagefooter.htm"}
{/if}

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

分页实例化结构代码

Array
(
[depot_list] => Array
(
[] => Array
(
[id] =>
[user_id] =>
[goods_id] =>
[goods_stock] =>
[goods_name] => 荷兰Nutrilon牛栏奶粉
) [] => Array
(
[id] =>
[user_id] =>
[goods_id] =>
[goods_stock] =>
[goods_name] =>
) ) [filter] => Array
(
[user_id] =>
[record_count] =>
[page_size] =>
[page] =>
[page_count] =>
[start] =>
) [page_count] =>
[record_count] =>
)

ecshop 后台分页功能的更多相关文章

  1. ecshop后台分页浅析

      既然是分页,道理都是一样的,不过ecshop前台分页的函数和后台分页的函数不同,后台分页函数为page_and_size(),在admin/includes/lib_main.php里.都是用aj ...

  2. 让ecshop编辑器功能更强大

    ecshop后台的商品编辑和文章编辑使用的是FCKEDITOR 编辑器, 这个FCKEDITOR的工具条(toolbar)是可以自定义的,ECSHOP默认使用的是 normal ,属于中档功能, 下面 ...

  3. ecshop 邮件功能

    1.邮件服务器设置(配置好了,在本地和虚拟主机都可以使用) a.163邮箱配置 b.QQ邮箱配置 2.关注管理(客户关注了某以商品,就可以给客户发送邮件) 3.邮件订阅管理,数据表:ecs_email ...

  4. 使用datatables实现后台分页功能,减轻前端渲染压力

    注意不同版本,参数名字及参数内容存在差异,具体可以参考https://datatables.net/upgrade/1.10-convert#Options 控制页面显示的参数:https://dat ...

  5. ecshop后台通过ajax搜索原理

    ecshop的搜索其实是功能十分强大的,但是ecshop搜索功能前台和后台还不大一样,前台主要是通过get方式,提交的url进行分页,而在ecshop的后台,则是接受表单的搜索条件,然后通过js发布到 ...

  6. 2014年4月份第2周51Aspx源码发布详情

    HFC代码转化工具源码  2014-4-8 [VS2010]源码描述:HFC代码转化工具源码 1.主要实现HTML代码转化为C#或者JS代码,为我们平时编码节省时间. 2.把代码复制到面板上,通过右键 ...

  7. asp.net微信开发第三篇----自定义会话管理

    和微信用户的沟通少不了,总觉得看起来微信官网后台管理中的会话回复消息有点呆板,所以我这里就自定义了一个会话管理功能,最终效果图如下: 因为我试使用富文本文件CKEDITOR来进行编写,你看到稳中可能会 ...

  8. jqery-easyui的Datagrid的介绍-Pagination事件

    Datagrid(数据表) 依赖的组件 resizable linkbutton pagination DataGrid Options对象的属性 名称(Name) 类型(Type) 描述(Descr ...

  9. Selenium(4)

    练习1:使用selenium+firefox测试ecshop登录过程 一.WebDriver 1.启动浏览器 (1)启动Firefox浏览器 a.启动默认路径下的浏览器 WebDriver drive ...

随机推荐

  1. Invalid layout param in a LinarLayout: layout_weight

    android:layout_weight只适用于线性布局LinearLayout,不适用于相对布局RelativeLayout.

  2. TCP通信丢包原因总结

    今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠 ...

  3. [转]jQuery的each方法的几种常用的用法

    下面提一下jQuery的each方法的几种常用的用法 复制代码 代码如下:  var arr = [ "one", "two", "three&quo ...

  4. 2016.10.29 清北学堂NOIP冲刺班Day1 AM 考试总结

    成绩:满分300,我得了200, 1:90//前两个题目都是模拟,没用到什么其他算法,第一题有可能少考虑了一点细节 2:100 3:10//感觉是个DP,但是毫无思路,只打了个普通背包,10分而已. ...

  5. Linux系统下的ssh使用(依据个人经验总结)

    对于linux运维工作者而言,使用ssh远程远程服务器是再熟悉不过的了!对于ssh的一些严格设置也关系到服务器的安全维护,今天在此,就本人工作中使用ssh的经验而言,做一些总结记录来下. (1)ssh ...

  6. mysql 性能优化方案

    网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...

  7. GO语言总结(1)——基本知识

    1.注释(与C++一样) 行注释:// 块注释:/* ... */ 2.标识符 可以这么说,除了数字开头的不允许,符号开头的不允许,关键字不允许,其他的Unicode字符组合都可以.“_33”也可以是 ...

  8. unsafe clr sql 部署向导

    1.部署安全权限的简单的程序集,非常简单,只需要正常发布就行,基本可以成功,前提是账号有部署clr assembly的权限 第一步: 创建登陆账号,尽量不要使用sa吧,默认架构为:dbo即可 第二部: ...

  9. canvas弹动

    弹动,和缓动类似,不过是在终点前反复运动几次达到反弹的效果,具体的算法就是用目标点(target)和物体(mouse)的距离乘以系数累加至坐标上,这样就会有简单的弹动效果,但是一般的弹动效果都是慢慢变 ...

  10. Java--笔记(7)

    61.几种常见排序法的比较 排序法 平均时间 最差情形 稳定度 额外空间 冒泡 O(n2)     O(n2) 稳定 O(1) 交换     O(n2)     O(n2) 不稳定 O(1) 选择 O ...