Тема: library('Pagination')
подскажите неумехе... мне нужно чтобы он собирал не ссылками типа
<a href="___">$x</a>
а так
<span onclick="mytext($x)">$x<>
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум вебмастеров - сообщество ImageCMS → CodeIgniter → library('Pagination')
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
подскажите неумехе... мне нужно чтобы он собирал не ссылками типа
<a href="___">$x</a>
а так
<span onclick="mytext($x)">$x<>
мде.. как я понял пагинатор не умеет работать с подобными фичами... ну время не ждёт.. работу делать нужно... решил не изобетать велосипед а просто усовершенствовать его.ю в результате можно дописать к тегам ссылок такие параметры как
onclick="jq_open_win('%urler%','div_loader');"
где
%urler%
это место куда будет подставляться соответствующий адрес. Также можно изменить тип целевого тега.
/system/libraries/pagination.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
// ------------------------------------------------------------------------
/**
* Pagination Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Pagination
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/libraries/pagination.html
*/
class CI_Pagination {
var $base_url = ''; // The page we are linking to
var $prefix = ''; // A custom prefix added to the path.
var $suffix = ''; // A custom suffix added to the path.
// cutter
var $tag_anchor_type = 'a';// тэг ссылки
var $tag_anchor_scryptline = ''; // пример 'onclick="open(a,b,c,d,%urler%);" ' это добавится в тело тэга %urler% будет заменен на номер страницы
// cutter end
var $total_rows = ''; // Total number of items (database results)
var $per_page = 10; // Max number of items you want shown per page
var $num_links = 2; // Number of "digit" links to show before/after the currently viewed page
var $cur_page = 0; // The current page being viewed
var $first_link = '‹ First';
var $next_link = '>';
var $prev_link = '<';
var $last_link = 'Last ›';
var $uri_segment = 3;
var $full_tag_open = '';
var $full_tag_close = '';
var $first_tag_open = '';
var $first_tag_close = ' ';
var $last_tag_open = ' ';
var $last_tag_close = '';
var $first_url = ''; // Alternative URL for the First Page.
var $cur_tag_open = ' <strong>';
var $cur_tag_close = '</strong>';
var $next_tag_open = ' ';
var $next_tag_close = ' ';
var $prev_tag_open = ' ';
var $prev_tag_close = '';
var $num_tag_open = ' ';
var $num_tag_close = '';
var $page_query_string = FALSE;
var $query_string_segment = 'per_page';
var $display_pages = TRUE;
var $anchor_class = '';
/**
* Constructor
*
* @access public
* @param array initialization parameters
*/
public function __construct($params = array())
{
if (count($params) > 0)
{
$this->initialize($params);
}
if ($this->anchor_class != '')
{
$this->anchor_class = 'class="'.$this->anchor_class.'" ';
}
log_message('debug', "Pagination Class Initialized");
}
// --------------------------------------------------------------------
/**
* Initialize Preferences
*
* @access public
* @param array initialization parameters
* @return void
*/
function initialize($params = array())
{
if (count($params) > 0)
{
foreach ($params as $key => $val)
{
if (isset($this->$key))
{
$this->$key = $val;
}
}
}
}
// --------------------------------------------------------------------
/**
* Generate the pagination links
*
* @access public
* @return string
*/
function create_links()
{
// If our item count or per-page total is zero there is no need to continue.
if ($this->total_rows == 0 OR $this->per_page == 0)
{
return '';
}
// Calculate the total number of pages
$num_pages = ceil($this->total_rows / $this->per_page);
// Is there only one page? Hm... nothing more to do here then.
if ($num_pages == 1)
{
return '';
}
// Determine the current page number.
$CI =& get_instance();
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
if ($CI->input->get($this->query_string_segment) != 0)
{
$this->cur_page = $CI->input->get($this->query_string_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
}
else
{
if ($CI->uri->segment($this->uri_segment) != 0)
{
$this->cur_page = $CI->uri->segment($this->uri_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
}
$this->num_links = (int)$this->num_links;
if ($this->num_links < 1)
{
show_error('Your number of links must be a positive number.');
}
if ( ! is_numeric($this->cur_page))
{
$this->cur_page = 0;
}
// Is the page number beyond the result range?
// If so we show the last page
if ($this->cur_page > $this->total_rows)
{
$this->cur_page = ($num_pages - 1) * $this->per_page;
}
$uri_page_number = $this->cur_page;
$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
$end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
// Is pagination being used over GET or POST? If get, add a per_page query
// string. If post, add a trailing slash to the base URL if needed
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
$this->base_url = rtrim($this->base_url).'&'.$this->query_string_segment.'=';
}
else
{
$this->base_url = rtrim($this->base_url, '/') .'/';
}
// And here we go...
$output = '';
// Render the "First" link
if ($this->first_link !== FALSE AND $this->cur_page > ($this->num_links + 1))
{
$first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;
// cutter
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $first_url,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$first_url.'"' : ' ';
$output .= $this->first_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$this->first_link.'</'.$this->tag_anchor_type.'>'.$this->first_tag_close;
}
// Render the "previous" link
if ($this->prev_link !== FALSE AND $this->cur_page != 1)
{
$i = $uri_page_number - $this->per_page;
if ($i == 0 && $this->first_url != '')
{
// cutter preg_replace('/%urler%/', $first_url,$this->tag_anchor_scryptline).' '.
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $this->first_url,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$this->first_url.'"' : ' ';
$output .= $this->prev_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$this->prev_link.'</'.$this->tag_anchor_type.'>'.$this->prev_tag_close;
}
else
{
$i = ($i == 0) ? '' : $this->prefix.$i.$this->suffix;
// cutter
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $this->base_url.$i ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$this->base_url.$i.'"' : ' ';
$output .= $this->prev_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$this->prev_link.'</'.$this->tag_anchor_type.'>'.$this->prev_tag_close;
}
}
// Render the pages
if ($this->display_pages !== FALSE)
{
// Write the digit links
for ($loop = $start -1; $loop <= $end; $loop++)
{
$i = ($loop * $this->per_page) - $this->per_page;
if ($i >= 0)
{
if ($this->cur_page == $loop)
{
$output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
}
else
{
$n = ($i == 0) ? '' : $i;
if ($n == '' && $this->first_url != '')
{
// cutter
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $this->first_url ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$this->first_url.'"' : ' ';
$output .= $this->num_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$loop.'</'.$this->tag_anchor_type.'>'.$this->num_tag_close;
}
else
{
$n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
//cutter
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $this->base_url.$n ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$this->base_url.$n.'"' : ' ';
$output .= $this->num_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$loop.'</'.$this->tag_anchor_type.'>'.$this->num_tag_close;
}
}
}
}
}
// Render the "next" link
if ($this->next_link !== FALSE AND $this->cur_page < $num_pages)
{
//cutter
$lnk=$this->base_url.$this->prefix.($this->cur_page * $this->per_page).$this->suffix;
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $lnk ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$lnk.'"' : ' ';
$output .= $this->next_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$this->next_link.'</'.$this->tag_anchor_type.'>'.$this->next_tag_close;
}
// Render the "Last" link
if ($this->last_link !== FALSE AND ($this->cur_page + $this->num_links) < $num_pages)
{
$i = (($num_pages * $this->per_page) - $this->per_page);
//cutter
$lnk=$this->base_url.$this->prefix.$i.$this->suffix;
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $lnk ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$lnk.'"' : ' ';
$output .= $this->last_tag_open.'<'.$this->tag_anchor_type.' '.$js.' '.$this->anchor_class.' '.$href.'>'.$this->last_link.'</'.$this->tag_anchor_type.'>'.$this->last_tag_close;
}
// Kill double slashes. Note: Sometimes we can end up with a double slash
// in the penultimate link so we'll kill all double slashes.
$output = preg_replace("#([^:])//+#", "\\1/", $output);
// Add the wrapper HTML if exists
$output = $this->full_tag_open.$output.$this->full_tag_close;
return $output;
}
}
// END Pagination Class
/* End of file Pagination.php */
/* Location: ./system/libraries/Pagination.php */
я не жадный, за одно в гите на свежий кодегнайтер отписал
https://github.com/pashager/CodeIgniter/compare/patch-1
собственно мои дополнения с обновлениями из гита
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.2.4 or newer
*
* NOTICE OF LICENSE
*
* Licensed under the Open Software License version 3.0
*
* This source file is subject to the Open Software License (OSL 3.0) that is
* bundled with this package in the files license.txt / license.rst. It is
* also available through the world wide web at this URL:
* http://opensource.org/licenses/OSL-3.0
* If you did not receive a copy of the license and are unable to obtain it
* through the world wide web, please send an email to
* licensing@ellislab.com so we can send you a copy immediately.
*
* @package CodeIgniter
* @author EllisLab Dev Team
* @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
* @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/
/**
* Pagination Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Pagination
* @author EllisLab Dev Team
* @link http://codeigniter.com/user_guide/libraries/pagination.html
*/
class CI_Pagination {
protected $tag_anchor_type = 'a';// tag link*
protected $tag_anchor_scryptline = ''; // 'onclick="open(a,b,c,d,'."'%urler%'".');" ' %urler% replasement URL link
protected $base_url = ''; // The page we are linking to
protected $prefix = ''; // A custom prefix added to the path.
protected $suffix = ''; // A custom suffix added to the path.
protected $total_rows = 0; // Total number of items (database results)
protected $per_page = 10; // Max number of items you want shown per page
protected $num_links = 2; // Number of "digit" links to show before/after the currently viewed page
protected $cur_page = 0; // The current page being viewed
protected $use_page_numbers = FALSE; // Use page number for segment instead of offset
protected $first_link = '‹ First';
protected $next_link = '>';
protected $prev_link = '<';
protected $last_link = 'Last ›';
protected $uri_segment = 3;
protected $full_tag_open = '';
protected $full_tag_close = '';
protected $first_tag_open = '';
protected $first_tag_close = ' ';
protected $last_tag_open = ' ';
protected $last_tag_close = '';
protected $first_url = ''; // Alternative URL for the First Page.
protected $cur_tag_open = ' <strong>';
protected $cur_tag_close = '</strong>';
protected $next_tag_open = ' ';
protected $next_tag_close = ' ';
protected $prev_tag_open = ' ';
protected $prev_tag_close = '';
protected $num_tag_open = ' ';
protected $num_tag_close = '';
protected $page_query_string = FALSE;
protected $query_string_segment = 'per_page';
protected $display_pages = TRUE;
protected $anchor_class = '';
/**
* Constructor
*
* @param array initialization parameters
* @return void
*/
public function __construct($params = array())
{
$this->initialize($params);
log_message('debug', 'Pagination Class Initialized');
}
// --------------------------------------------------------------------
/**
* Initialize Preferences
*
* @param array initialization parameters
* @return void
*/
public function initialize($params = array())
{
if (count($params) > 0)
{
foreach ($params as $key => $val)
{
if ($key === 'anchor_class')
{
$this->anchor_class = ($val != '') ? 'class="'.$val.'" ' : '';
}
elseif (isset($this->$key))
{
$this->$key = $val;
}
}
}
}
// --------------------------------------------------------------------
/**
* Generate the pagination links
*
* @return string
*/
private function generate_data_link($url)
{
$js = ($this->tag_anchor_scryptline == '') ? ' ' : preg_replace('/%urler%/', $url ,$this->tag_anchor_scryptline);
$href = ($this->tag_anchor_type == 'a') ? 'href="'.$url.'"' : ' ';
return array('js'=>$js,'href'=>$href);
}
public function create_links()
{
// If our item count or per-page total is zero there is no need to continue.
if ($this->total_rows == 0 OR $this->per_page == 0)
{
return '';
}
// Calculate the total number of pages
$num_pages = (int) ceil($this->total_rows / $this->per_page);
// Is there only one page? Hm... nothing more to do here then.
if ($num_pages === 1)
{
return '';
}
// Set the base page index for starting page number
$base_page = ($this->use_page_numbers) ? 1 : 0;
// Determine the current page number.
$CI =& get_instance();
// See if we are using a prefix or suffix on links
if ($this->prefix != '' OR $this->suffix != '')
{
$this->cur_page = (int) str_replace(array($this->prefix, $this->suffix), '', $CI->uri->segment($this->uri_segment));
}
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
if ($CI->input->get($this->query_string_segment) != $base_page)
{
$this->cur_page = (int) $CI->input->get($this->query_string_segment);
}
}
elseif ( ! $this->cur_page && $CI->uri->segment($this->uri_segment) != $base_page)
{
$this->cur_page = (int) $CI->uri->segment($this->uri_segment);
}
// Set current page to 1 if it's not valid or if using page numbers instead of offset
if ( ! is_numeric($this->cur_page) OR ($this->use_page_numbers && $this->cur_page == 0))
{
$this->cur_page = $base_page;
}
$this->num_links = (int) $this->num_links;
if ($this->num_links < 1)
{
show_error('Your number of links must be a positive number.');
}
// Is the page number beyond the result range?
// If so we show the last page
if ($this->use_page_numbers)
{
if ($this->cur_page > $num_pages)
{
$this->cur_page = $num_pages;
}
}
elseif ($this->cur_page > $this->total_rows)
{
$this->cur_page = ($num_pages - 1) * $this->per_page;
}
$uri_page_number = $this->cur_page;
if ( ! $this->use_page_numbers)
{
$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
}
// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
$end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
// Is pagination being used over GET or POST? If get, add a per_page query
// string. If post, add a trailing slash to the base URL if needed
if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
{
$this->base_url = rtrim($this->base_url).'&'.$this->query_string_segment.'=';
}
else
{
$this->base_url = rtrim($this->base_url, '/') .'/';
}
// And here we go...
$output = '';
// Render the "First" link
if ($this->first_link !== FALSE && $this->cur_page > ($this->num_links + 1))
{
$first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;
$data=$this->generate_data_link($first_url);
$output .= $this->first_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$this->first_link.'</'.$this->tag_anchor_type.'>'.$this->first_tag_close;
}
// Render the "previous" link
if ($this->prev_link !== FALSE && $this->cur_page != 1)
{
$i = ($this->use_page_numbers) ? $uri_page_number - 1 : $uri_page_number - $this->per_page;
if ($i == $base_page && $this->first_url != '')
{
$data=$this->generate_data_link($this->first_url);
$output .= $this->prev_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$this->prev_link.'</'.$this->tag_anchor_type.'>'.$this->prev_tag_close;
}
else
{
$data=$this->generate_data_link($this->base_url.$i);
$i = ($i == $base_page) ? '' : $this->prefix.$i.$this->suffix;
$output .= $this->prev_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$this->prev_link.'</'.$this->tag_anchor_type.'>'.$this->prev_tag_close;
}
}
// Render the pages
if ($this->display_pages !== FALSE)
{
// Write the digit links
for ($loop = $start -1; $loop <= $end; $loop++)
{
$i = ($this->use_page_numbers) ? $loop : ($loop * $this->per_page) - $this->per_page;
if ($i >= $base_page)
{
if ($this->cur_page == $loop)
{
$output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
}
else
{
$n = ($i == $base_page) ? '' : $i;
if ($n == '' && $this->first_url != '')
{
$data=$this->generate_data_link($this->first_url);
$output .= $this->num_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$loop.'</'.$this->tag_anchor_type.'>'.$this->num_tag_close;
}
else
{
$n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
$data=$this->generate_data_link($this->base_url.$n);
$output .= $this->num_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$loop.'</'.$this->tag_anchor_type.'>'.$this->num_tag_close;
}
}
}
}
}
// Render the "next" link
if ($this->next_link !== FALSE && $this->cur_page < $num_pages)
{
$i = ($this->use_page_numbers) ? $this->cur_page + 1 : $this->cur_page * $this->per_page;
$data=$this->generate_data_link($this->base_url.$this->prefix.$i.$this->suffix);
$output .= $this->next_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$this->next_link.'</'.$this->tag_anchor_type.'>'.$this->next_tag_close;
}
// Render the "Last" link
if ($this->last_link !== FALSE && ($this->cur_page + $this->num_links) < $num_pages)
{
$i = ($this->use_page_numbers) ? $num_pages : ($num_pages * $this->per_page) - $this->per_page;
$data=$this->generate_data_link($this->base_url.$this->prefix.$i.$this->suffix);
$output .= $this->last_tag_open.'<'.$this->tag_anchor_type.' '.$data['js'].' '.$this->anchor_class.' '.$data['href'].'>'.$this->last_link.'</'.$this->tag_anchor_type.'>'.$this->last_tag_close;
}
// Kill double slashes. Note: Sometimes we can end up with a double slash
// in the penultimate link so we'll kill all double slashes.
$output = preg_replace('#([^:])//+#', '\\1/', $output);
// Add the wrapper HTML if exists
return $this->full_tag_open.$output.$this->full_tag_close;
}
}
/* End of file Pagination.php */
/* Location: ./system/libraries/Pagination.php */
Спасибо! Думаю вещь полезная, но я вроде где-то видел специальные функции для этого пагинатора с аjax.
да я тоже заметил как у меня после обновления в админке список страниц не прогружался изза не совсем верной инициализации пагинатора, так вот там-то и увидел подобное, но пока мне не до этого.. уже нацарапал свой, как мне кажется более гибкий вариант.
Здравствуйте!Подскажите пожалуйста как сделать, чтобы при нажатии на пагинацию кроме открытия соотвествующих записей страница пролистывалась к нужной метке.
то есть пагинация откроет http://site.com/news/n, а нужно http://site.com/news/n#anchor. Это возможно?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум вебмастеров - сообщество ImageCMS → CodeIgniter → library('Pagination')
Форум работает на PunBB, при поддержке Informer Technologies, Inc