2012-06-01 51 views
2

我正在研究一個基於PHP-Mysql的網站,該網站有一些要顯示的大型列表(例如產品列表)。現在爲了方便用戶,我必須將其分解到頁面。所以我已經使用PHP添加了分頁。現在,每次點擊頁碼時都會刷新頁面。因此,我有一個使用PHP/MySQL的基礎,並且想要添加Ajax/jquery以避免不必要的頁面刷新 。如何將分頁添加到現有的代碼中? 這裏是供參考的php代碼。將jquery添加到基於php mysql的分頁

 <div class="flt width710"> 
      <div style="margin-top:10px;" class="flt mapnewalert"> <?php //echo ucfirst($_SESSION['$city']) ?></div> 
      <div style="float:right" id="toppagesel"> 
      <?php 
        echo $pages->display_pages(); 
        echo $pages->display_items_per_page(); 
        //echo "<span class=\"\">".$pages->display_jump_menu()."</span>"; 
        $query = "SELECT * from properties,locality,cities where properties.city_id='".$_SESSION['$cityId']."' and properties.locality_id=locality.locality_id and properties.city_id=cities.city_id $pages->limit"; 
        $result = mysql_query($query) or die(mysql_error()); 

        //$getProperty = $propertyDetails->getPropertyDetailsByCityIdPaginate($_SESSION['$cityId'],$limit); 
      ?> 
      <?php //echo $pages->display_pages(); ?><?php //echo $pages->display_items_per_page();?> 
      </div> 
     </div> 

而且分頁類:

  class Paginator{ 
var $items_per_page; 
var $items_total; 
var $current_page; 
var $num_pages; 
var $mid_range; 
var $low; 
var $limit; 
var $return; 
var $default_ipp; 
var $querystring; 
var $ipp_array; 

      function Paginator() 
{ 
    $this->current_page = 1; 
    $this->mid_range = 2; 
    $this->ipp_array = array(2,4,6,8,'All'); 
    $this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp; 
} 

      function paginate() 
{ 
    if(!isset($this->default_ipp)) $this->default_ipp=2; 
    if($_GET['ipp'] == 'All') 
    { 
     $this->num_pages = 1; 
      // $this->items_per_page = $this->default_ipp; 
    } 
    else 
    { 
     if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp; 
     $this->num_pages = ceil($this->items_total/$this->items_per_page); 
    } 
    $this->current_page = (isset($_GET['page'])) ? (int) $_GET['page'] : 1 ; // must be numeric > 0 
    $prev_page = $this->current_page-1; 
    $next_page = $this->current_page+1; 
    if($_GET) 
    { 
     $args = explode("&",$_SERVER['QUERY_STRING']); 
     foreach($args as $arg) 
     { 
      $keyval = explode("=",$arg); 
      if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg; 
     } 
    } 

    if($_POST) 
    { 
     foreach($_POST as $key=>$val) 
     { 
      if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val"; 
     } 
    } 
    if($this->num_pages > 4) 
    { 
     $this->return = ($this->current_page > 1 And $this->items_total >= 10) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$prev_page&ipp=$this->items_per_page$this->querystring\">&laquo; Previous</a> ":"<span class=\"inactive\" href=\"#\">&laquo; Previous</span> "; 

     $this->start_range = $this->current_page - floor($this->mid_range/2); 
     $this->end_range = $this->current_page + floor($this->mid_range/2); 

     if($this->start_range <= 0) 
     { 
      $this->end_range += abs($this->start_range)+1; 
      $this->start_range = 1; 
     } 
     if($this->end_range > $this->num_pages) 
     { 
      $this->start_range -= $this->end_range-$this->num_pages; 
      $this->end_range = $this->num_pages; 
     } 
     $this->range = range($this->start_range,$this->end_range); 

     for($i=1;$i<=$this->num_pages;$i++) 
     { 
      if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... "; 
      // loop through all pages. if first, last, or in range, display 
      if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range)) 
      { 
       $this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> "; 
      } 
      if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... "; 
     } 
     $this->return .= (($this->current_page < $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All') And $this->current_page > 0) ? "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$next_page&ipp=$this->items_per_page$this->querystring\">Next &raquo;</a>\n":"<span class=\"inactive\" href=\"#\">&raquo; Next</span>\n"; 
     $this->return .= ($_GET['page'] == 'All') ? "<a class=\"current\" style=\"margin-left:10px\" href=\"#\">All</a> \n":"<a class=\"paginate\" style=\"margin-left:10px\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n"; 
    } 
    else 
    { 
     for($i=1;$i<=$this->num_pages;$i++) 
     { 
      $this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> "; 
     } 
     $this->return .= "<a class=\"paginate\" href=\"$_SERVER[PHP_SELF]?page=1&ipp=All$this->querystring\">All</a> \n"; 
    } 
    $this->low = ($this->current_page <= 0) ? 0:($this->current_page-1) * $this->items_per_page; 
    if($this->current_page <= 0) $this->items_per_page = 0; 
    $this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page"; 
} 

    } 

我怎樣才能實現呢?我提到其他線程並嘗試,但不能讓它在我context.I工作是新手阿賈克斯的jQuery部分很抱歉,如果它是一項簡單的任務! :P

PS:這是可能在當前的情況下,還是我必須對我的分頁類和php代碼進行更改。請把它放在一些燈!
感謝

回答

0
$(document).ready(function() 
{ 
$('.paginate').live('click', function(e) 
{ 
    e.preventDefault(); 
    var btnPage = $(this); 
    $.ajax(
    { 
     url : btnPage.attr('href'), 
     success : function(resp) 
     { 
      // replace current results with new results. 
      $('#project_section').html(resp); 
     }, 
     error : function() 
     { 
      window.location.href = btnPage.attr('href'); 
     } 
    }); 
}); 

});

這裏$(".paginate")是我的paginator類中的<li>的類。 我得到了答案here 感謝

1

有很多的JavaScript分頁庫將幫助您簡化您的工作,

你可以試試這個分頁庫,

演示:http://www.frequency-decoder.com/demo/table-sort-revisited/paginate/

網站:http://www.frequency-decoder.com/2007/10/19/client-side-table-pagination-script/

+0

非常感謝您的及時答覆,但我想的東西,符合上面的代碼或我將不得不重新審視logic.Can't我只是用新更換的div一個使用ajax?類似的建議在這裏,但我無法得到它的工作 - http://stackoverflow.com/questions/10755118/how-to-add-ajax-on-existing-php-mysql-based-pagination – KillABug