ecshop后台分頁淺析


  既然是分頁,道理都是一樣的,不過ecshop前台分頁的函數和后台分頁的函數不同,后台分頁函數為page_and_size(),在admin/includes/lib_main.php里。
都是用ajax來進行分頁所需參數的傳遞,用到后台封裝的js函數庫listtable.js,下面就來說說ajax分頁實現的步驟:
1,html頁面:引入js{insert_scripts files="../js/utils.js,listtable.js"}
     將分頁所需的參數用listTable 對象進行屬性賦值,如下:
   <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}
 
</script> 
2,php頁面:分頁的每個要素實現,給模板頁面所需的參數賦值
   $card_list = card_list();  //求得目標數組的函數
    $smarty->assign('card_list',   $card_list['list']);
    $smarty->assign('filter',       $card_list['filter']);
    $smarty->assign('record_count', $card_list['record_count']);
    $smarty->assign('page_count',   $card_list['page_count']);
    $smarty->assign('full_page',        1);
   //函數如下,僅作為參考
  function card_list()
{
    $result = get_filter();
    if ($result === false)
    {
        /* 分頁大小 */
        $filter = array();
 
        /* 記錄總數以及頁數 */
        $sql = "SELECT COUNT(*) FROM ".$GLOBALS['ecs']->table('card_number');
        $filter['record_count'] = $GLOBALS['db']->getOne($sql);
 
        $filter = page_and_size($filter);
 
        /* 查詢記錄 */
        $sql = "SELECT *"."FROM ". $GLOBALS['ecs']->table('card_number') .
               ' WHERE card_id > 0 order by card_id ASC LIMIT ' . $filter['start'] . ',' . $filter['page_size'];
        set_filter($filter, $sql);
    }
    else
    {
        $sql    = $result['sql'];
        $filter = $result['filter'];
    }
 
    $all = $GLOBALS['db']->getAll($sql);
 
    
 
    return array('list' => $all, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
}

 3,到這里,分頁模板page.html里的函數就能進行參數傳遞,這些函數大致有
{literal}<a href="javascript:listTable.gotoPageFirst()">{/literal}{$lang.page_first}</a>
          {literal}<a href="javascript:listTable.gotoPagePrev()">{/literal}{$lang.page_prev}</a>
          {literal}<a href="javascript:listTable.gotoPageNext()">{/literal}{$lang.page_next}</a>
          {literal}<a href="javascript:listTable.gotoPageLast()">{/literal}{$lang.page_last}</a>
打開模板一看便知
4,最后一步
 上面的js函數實際上是這樣的鏈接,
act=query&record_count=21&page=1&page_count=2&start=15
所以我們還需要在php頁面有一個判斷,和輸出目標數組一樣,只不過這是點擊分頁后的數組輸出。 
   
elseif ($_REQUEST['act'] == 'query')
{
    $card_list = card_list();
 
    $smarty->assign('card_list',   $card_list['list']);
    $smarty->assign('filter',       $card_list['filter']);
    $smarty->assign('record_count', $card_list['record_count']);
    $smarty->assign('page_count',   $card_list['page_count']);
 
    make_json_result($smarty->fetch('card_list.htm'), '',
        array('filter' => $card_list['filter'], 'page_count' => $card_list['page_count']));
}

到此為止,分頁的效果就實現了,這個覺得比前台分頁要簡單的多,原因是用js來進行參數傳遞。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM