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