服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > zencart教程 >

zencart分页函数function splitPageResults()详细说明

时间:2012-09-20 17:24来源:未知 作者:最模板 点击:
split_page_results.php,实现分页 文件路径:\includes\classes\split_page_results.php [php] view plaincopyprint? //这是一个用于分页的类,其实分页的只是在依赖mysql的limit参数,其实这个分页是无法满足定

  split_page_results.php,实现分页
文件路径:\includes\classes\split_page_results.php

[php] view plaincopyprint?
  1. // 这是一个用于分页的类,其实分页的只是在依赖mysql的limit参数,其实这个分页是无法满足定制要求的,通常得修改  
  2. class splitPageResults extends base {  
  3.   var $sql_query$number_of_rows$current_page_number$number_of_pages$number_of_rows_per_page$page_name;  
  4.   /* class constructor */  
  5.     
  6.   // 这个构造函数,对$query传入的查询语句进行分析,$max_rows指定了每页显示的最大行数,利用$_GET[$page_holder]获取当前的页号,初始化current_page_number, number_of_rows_per_page, number_of_rows(全部总行数), number_of_pages, sql_query(这个是原来SQL查询语句添加了limit限制的SQL语句)  
  7.   function splitPageResults($query$max_rows$count_key = '*'$page_holder = 'page'$debug = false) {}  
  8.     
  9.   // 显示分页链接,$max_page_links指定了显示多少个链接  
  10.   function display_links($max_page_links$parameters = '') {}  
  11.     
  12.   // 显示分页总数, $text_output传入格式化输出串,方便定制输出  
  13.   function display_count($text_output) {}  
  14. }  
分页功能函数详细说明:
[php] view plaincopyprint?
  1. <?php  
  2. /** 
  3.  * split_page_results Class. 
  4.  * 
  5.  * @package classes 
  6.  * @copyright Copyright 2003-2009 Zen Cart Development Team 
  7.  * @copyright Portions Copyright 2003 osCommerce 
  8.  * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0 
  9.  * @version $Id: split_page_results.php 17066 2010-07-29 19:18:14Z wilt $ 
  10.  */  
  11. if (!defined('IS_ADMIN_FLAG')) {  
  12.   die('Illegal Access');  
  13. }  
  14. /** 
  15.  * Split Page Result Class 
  16.  * 
  17.  * An sql paging class, that allows for sql reslt to be shown over a number of pages using  simple navigation system 
  18.  * Overhaul scheduled for subsequent release 
  19.  * 
  20.  * @package classes 
  21.  */  
  22. class splitPageResults extends base {  
  23.   var $sql_query$number_of_rows$current_page_number$number_of_pages$number_of_rows_per_page$page_name;  
  24.   
  25.   
  26.   /* class constructor */  
  27.   function splitPageResults($query$max_rows$count_key = '*'$page_holder = 'page'$debug = false) {  
  28.     global $db;  
  29.     $max_rows = ($max_rows == '' || $max_rows == 0) ? 20 : $max_rows;  
  30.   
  31.   
  32.     $this->sql_query = preg_replace("/\n\r|\r\n|\n|\r/"" "$query);  
  33.     $this->page_name = $page_holder;  
  34.   
  35.   
  36.     if ($debug) {  
  37.       echo 'original_query=' . $query . '<br /><br />';  
  38.     }  
  39.     if (isset($_GET[$page_holder])) {  
  40.       $page = $_GET[$page_holder];  
  41.     } elseif (isset($_POST[$page_holder])) {  
  42.       $page = $_POST[$page_holder];  
  43.     } else {  
  44.       $page = '';  
  45.     }  
  46.   
  47.   
  48.     if (emptyempty($page) || !is_numeric($page)) $page = 1;  
  49.     $this->current_page_number = $page//当前页码  
  50.   
  51.   
  52.     $this->number_of_rows_per_page = $max_rows;  //每页显示数量  
  53.     $this->sql_query;  
  54.     $pos_to = strlen($this->sql_query);   //895计算sql语句字节总长度  
  55.   
  56.   
  57.     $query_lower = strtolower($this->sql_query);    
  58.     $pos_from = strpos($query_lower' from', 0);  //497  
  59.   
  60.   
  61.     $pos_group_by = strpos($query_lower' group by'$pos_from);  
  62.     if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by;  
  63.   
  64.   
  65.     $pos_having = strpos($query_lower' having'$pos_from);  
  66.     if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having;  
  67.   
  68.   
  69.     $pos_order_by = strpos($query_lower' order by'$pos_from); //841查询sql语句中sorder by出现的位置,从$pos_form处开始查找  
  70.     if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by//841sql语句截取order by之前的部分,用于limit int,int页面查询  
  71.   
  72.   
  73.     if (strpos($query_lower'distinct') || strpos($query_lower'group by')) {  
  74.       $count_string = 'distinct ' . zen_db_input($count_key);  
  75.     } else {  
  76.       $count_string = zen_db_input($count_key); //* 函数传值,要查询的语句 此处为*  
  77.     }  
  78.     $count_query = "select count(" . $count_string . ") as total " .  
  79.     substr($this->sql_query, $pos_from, ($pos_to - $pos_from));  //查询结果总长度查询语句  
  80.     if ($debug) {  
  81.       echo 'count_query=' . $count_query . '<br /><br />';  
  82.     }  
  83.     $count = $db->Execute($count_query); //执行结果总数查询  
  84.       
  85.     $this->number_of_rows = $count->fields['total'];  //查询结果总数160  
  86.   
  87.   
  88.     $this->number_of_pages = ceil($this->number_of_rows / $this->number_of_rows_per_page);  //页面总数14  
  89.   
  90.   
  91.     if ($this->current_page_number > $this->number_of_pages) {  
  92.       $this->current_page_number = $this->number_of_pages;  
  93.     }  
  94.   
  95.   
  96.     $offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1)); //已经查询的产品数  
  97.   
  98.   
  99.     // fix offset error on some versions  
  100.     if ($offset <= 0) { $offset = 0; }  
  101.   
  102.   
  103.     $this->sql_query .= " limit " . ($offset > 0 ? $offset . ", " : '') . $this->number_of_rows_per_page; //页面查询语句  
  104.   }  
  105.   
  106.   
  107.   /* class functions */  
  108.   
  109.   
  110.   // display split-page-number-links  
  111.   function display_links($max_page_links$parameters = '') {  //$max_page_links导航链接显示的数量,后台控制  
  112.     global $request_type;  
  113.   
  114.   
  115.     $display_links_string = '';  
  116.   
  117.   
  118.     $class = '';  
  119.   
  120.   
  121.     if (zen_not_null($parameters) && (substr($parameters, -1) != '&')) $parameters .= '&';  //disp_order=6&,若最后一个字符不是& 则替换成&字符  
  122.   
  123.   
  124.     // previous button - not displayed on first page  
  125.       
  126.     if ($this->current_page_number > 1) { //若当前页不为第一页,则显示First页面和Previous页面  
  127.     $display_links_string .= '<a href="' . zen_href_link($_GET['main_page'], $parameters . $this->page_name . '=1'$request_type) . '" title=" ' . PREVNEXT_TITLE_FIRST_PAGE . ' ">' . PREVNEXT_BUTTON_FIRST . '</a>  ';  
  128.     $display_links_string .= '<a href="' . zen_href_link($_GET['main_page'], $parameters . $this->page_name . '=' . ($this->current_page_number - 1), $request_type) . '" title=" ' . PREVNEXT_TITLE_PREVIOUS_PAGE . ' ">' . PREVNEXT_BUTTON_PREV . '</a>  ';  
  129.     }  
  130.   
  131.   
  132.     // check if number_of_pages > $max_page_links  
  133.     $cur_window_num = intval($this->current_page_number / $max_page_links);   //当前循环计数=当前页面/导航链接显示数量取整  
  134.     if ($this->current_page_number % $max_page_links$cur_window_num++;  //当前循环计数+1  
  135.   
  136.   
  137.     $max_window_num = intval($this->number_of_pages / $max_page_links);  //总循环计数页面  
  138.     if ($this->number_of_pages % $max_page_links$max_window_num++;  //总循环计数页面+1  
  139.   
  140.   
  141.     // previous window of pages  
  142.     if ($cur_window_num > 1) $display_links_string .= '<a href="' . zen_href_link($_GET['main_page'], $parameters . $this->page_name . '=' . (($cur_window_num - 1) * $max_page_links), $request_type) . '" title=" ' . sprintf(PREVNEXT_TITLE_PREV_SET_OF_NO_PAGE, $max_page_links) . ' ">...</a>';  //显示向前一页循环链接  
  143.   
  144.   
  145.     // page nn button  
  146.     for ($jump_to_page = 1 + (($cur_window_num - 1) * $max_page_links); ($jump_to_page <= ($cur_window_num * $max_page_links)) && ($jump_to_page <= $this->number_of_pages); $jump_to_page++) { //循环输出页面  
  147.       if ($jump_to_page == $this->current_page_number) {  
  148.         $display_links_string .= ' <strong class="current">' . $jump_to_page . '</strong> ';  
  149.       } else {  
  150.         $display_links_string .= ' <a href="' . zen_href_link($_GET['main_page'], $parameters . $this->page_name . '=' . $jump_to_page$request_type) . '" title=" ' . sprintf(PREVNEXT_TITLE_PAGE_NO, $jump_to_page) . ' ">' . $jump_to_page . '</a> ';  
  151.       }  
  152.     }  
  153.   
  154.   
  155.     // next window of pages  
  156.     if ($cur_window_num < $max_window_num) {  
  157.         $display_links_string .= '<a href="' . zen_href_link($_GET['main_page'], $parameters . $this->page_name . '=' . (($cur_window_num) * $max_page_links + 1), $request_type) . '" title=" ' . sprintf(PREVNEXT_TITLE_NEXT_SET_OF_NO_PAGE, $max_page_links) . ' ">...</a> ';     ////显示向后一页循环链接  
  158.     }  
  159.   
  160.   
  161.     // next button  
  162.     if (($this->current_page_number < $this->number_of_pages) && ($this->number_of_pages != 1)) { //若当前页不为第一页,则显示Next页面和Last页面  
  163.         $display_links_string .= ' <a href="' . zen_href_link($_GET['main_page'], $parameters . 'page=' . ($this->current_page_number + 1), $request_type) . '" title=" ' . PREVNEXT_TITLE_NEXT_PAGE . ' ">' . PREVNEXT_BUTTON_NEXT . '</a> ';  
  164.         $display_links_string .=' <a href="' . zen_href_link($_GET['main_page'], $parameters . 'page=' . $this->number_of_pages, $request_type) . '" title=" ' . PREVNEXT_TITLE_LAST_PAGE . ' ">' . PREVNEXT_BUTTON_LAST . '</a> ';      
  165.     }  
  166.   
  167.   
  168.     if ($display_links_string == ' <strong class="current">1</strong> ') {  
  169.       return ' ';  
  170.     } else {  
  171.       return $display_links_string;  
  172.     }  
  173.   }  
  174.   
  175.   
  176.   // display number of total products found  
  177.   function display_count($text_output) {  
  178.     $to_num = ($this->number_of_rows_per_page * $this->current_page_number); //当前页面显示的产品编号  
  179.     if ($to_num > $this->number_of_rows) $to_num = $this->number_of_rows; //若当前页面计算出来的产品编号大于总的产品数,则取较小值  
  180.   
  181.   
  182.     $from_num = ($this->number_of_rows_per_page * ($this->current_page_number - 1)); //上一页查询结束的产品编号  
  183.   
  184.   
  185.     if ($to_num == 0) {  
  186.       $from_num = 0;  
  187.     } else {  
  188.       $from_num++; //当前页面查询开始产品编号,即上一页查询结束产品编号+1  
  189.     }  
  190.   
  191.   
  192.     if ($to_num <= 1) {    
  193.       // don't show count when 1  
  194.       return '';  
  195.     } else {  
  196.       return sprintf($text_output$from_num$to_num$this->number_of_rows);  //以传入的字符串格式输出页码参数  
  197.     }  
  198.   }  
  199. }  
  200. ?>  

 

(责任编辑:最模板)
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容