0

我正在使用以下分页。PHP 数组分页器

如何将显示的链接数量限制为 10 个。

我需要的是默认情况下,如果有大约 30 或 40 个链接,它将显示全部否:

1 | 2 3 4 5 6 7 8 9 11 ....... 35 36 37 38 39 (这里1是选择的页面。)

我想要的是在这样的页面中只显示 10 个链接。

假设选择的页面是 13 则。

<< 6 7 8 9 10 11 12 | 13 | 14 15 >>

我已经在下面发布了分页类文件。

class pagination
{
/**
 * Properties array
 * @var array   
 * @access private 
 */
private $_properties = array();

/**
 * Default configurations
 * @var array  
 * @access public 
 */
public $_defaults = array(
  'page' => 1,
  'perPage' => 10 
);

/**
 * Constructor
 * 
 * @param array $array   Array of results to be paginated
 * @param int   $curPage The current page integer that should used
 * @param int   $perPage The amount of items that should be show per page
 * @return void    
 * @access public  
 */
public function __construct($array, $curPage = null, $perPage = null)
{
  $this->array   = $array;
  $this->curPage = ($curPage == null ? $this->defaults['page']    : $curPage);
  $this->perPage = ($perPage == null ? $this->defaults['perPage'] : $perPage);
}

/**
 * Global setter
 * 
 * Utilises the properties array
 * 
 * @param string $name  The name of the property to set
 * @param string $value The value that the property is assigned
 * @return void    
 * @access public  
 */
public function __set($name, $value) 
{ 
  $this->_properties[$name] = $value;
} 

/**
 * Global getter
 * 
 * Takes a param from the properties array if it exists
 * 
 * @param string $name The name of the property to get
 * @return mixed Either the property from the internal
 * properties array or false if isn't set
 * @access public  
 */
public function __get($name)
{
  if (array_key_exists($name, $this->_properties)) {
    return $this->_properties[$name];
  }
  return false;
}

/**
 * Set the show first and last configuration
 * 
 * This will enable the "<< first" and "last >>" style
 * links
 * 
 * @param boolean $showFirstAndLast True to show, false to hide.
 * @return void    
 * @access public  
 */
public function setShowFirstAndLast($showFirstAndLast)
{
    $this->_showFirstAndLast = $showFirstAndLast;

}

/**
 * Set the main seperator character
 * 
 * By default this will implode an empty string
 * 
 * @param string $mainSeperator The seperator between the page numbers
 * @return void    
 * @access public  
 */
public function setMainSeperator($mainSeperator)
{
  $this->mainSeperator = $mainSeperator;
}

/**
 * Get the result portion from the provided array 
 * 
 * @return array Reduced array with correct calculated offset 
 * @access public 
 */
public function getResults()
{
  // Assign the page variable
  if (empty($this->curPage) !== false) {
    $this->page = $this->curPage; // using the get method
  } else {
    $this->page = 1; // if we don't have a page number then assume we are on the first page
  }

  // Take the length of the array
  $this->length = count($this->array);

  // Get the number of pages
  $this->pages = ceil($this->length / $this->perPage);

  // Calculate the starting point 
  $this->start = ceil(($this->page - 1) * $this->perPage);

  // return the portion of results
  return array_slice($this->array, $this->start, $this->perPage);
}

/**
 * Get the html links for the generated page offset
 * 
 * @param array $params A list of parameters (probably get/post) to
 * pass around with each request
 * @return mixed  Return description (if any) ...
 * @access public 
 */
public function getLinks($params = array())
{
  // Initiate the links array
  $plinks = array();
  $links = array();
  $slinks = array();

  // Concatenate the get variables to add to the page numbering string
  $queryUrl = '';
  if (!empty($params) === true) {
    unset($params['page']);
    $queryUrl = '&amp;'.http_build_query($params);
  }

  // If we have more then one pages
  if (($this->pages) > 1) {
    // Assign the 'previous page' link into the array if we are not on the first page
    if ($this->page != 1) {
      if ($this->_showFirstAndLast) {
        $plinks[] = ' <a href="?page=1'.$queryUrl.'">&laquo;&laquo; First </a> ';
      }
      $plinks[] = ' <a href="?page='.($this->page - 1).$queryUrl.'">&laquo; Prev</a> ';
    }

    // Assign all the page numbers & links to the array
    for ($j = 1; $j < ($this->pages + 1); $j++) {
      if ($this->page == $j) {
        $links[] = ' <a class="selected">'.$j.'</a> '; // If we are on the same page as the current item
      } else {
        $links[] = ' <a href="?page='.$j.$queryUrl.'">'.$j.'</a> '; // add the link to the array
      }
    }

    // Assign the 'next page' if we are not on the last page
    if ($this->page < $this->pages) {
      $slinks[] = ' <a href="?page='.($this->page + 1).$queryUrl.'"> &raquo; </a> ';
      if ($this->_showFirstAndLast) {
        $slinks[] = ' <a href="?page='.($this->pages).$queryUrl.'"> &raquo;&raquo; </a> ';
      }
    }

    // Push the array into a string using any some glue
    return implode(' ', $plinks).implode($this->mainSeperator, $links).implode(' ', $slinks);
  }
  return;
}
}
4

1 回答 1

0

我认为您需要在这行代码中进行编辑

// Assign all the page numbers & links to the array
$i = $this->page;
for ($j = $i; $j < ($i + 9); $j++) {
if ($this->page == $j) {
$links[] = ' <a class="selected">'.$j.'</a> '; // If we are on the same page as the   current item
} else {
 $links[] = ' <a href="?page='.$j.$queryUrl.'">'.$j.'</a> '; // add the link to the array
  }
}

请尝试这样..

于 2013-02-06T06:20:02.957 回答