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', 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 )