Перейти к содержимому


Партнерская программа Kredov

  • Закрытая тема Тема закрыта

Проблемы с классом постраничной выдачи из mysql + ЧПУ

#1 Avin

Avin
  • Пользователь
  • 82 сообщений
  • Репутация: 1
0

Отправлено 21 Апрель 2012 - 16:40

Добрый день, друзья!

У меня большая проблема, которую я не могу решить уже более месяца.

На сайте ввожу постраничный вывод контента из mysql пользовался готовым классом paging. Он прекрасно работает, но с вводом ЧПУ, работать он не желает и я никак не могу его исправить, постоянно, какие то ошибки.

Для перемещения между страницами он дает ссылки сайт.ру/?p=номер_страницы
А я хочу сделать так: сайт.ру/page/номер_страницы

в .htaccess я внес все что нужно, при ручном вводе в адресной строке сайт.ру/page/номер_страницы все работает, а класс никак не хочет выдавать ссылки в таком формате.

Прошу Вашей помощи!

Исходный код класса:

<?php
class Paging {

private $page_size = 10;
private $link_padding = 10;
private $page_link_separator = ' ';
private $next_page_text = 'следующая >';
private $prev_page_text = '< предыдущая';
private $result_text_pattern = 'Показано с %s по %s из %s';
private $page_var = 'p';

private $db;
private $q;
private $total_rows;
private $total_pages;
private $cur_page;

public function __construct($db, $q='', $page_var='p')
{
	$this->db = $db;
	if ($q) $this->set_query($q);
	$this->page_var = $page_var;
	$this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1;
}

public function set_query($q)
{
	$this->q = $q;
}

public function set_page_size($page_size)
{
	$this->page_size = abs((int)$page_size);
}

public function set_link_padding($padding)
{
	$this->link_padding = abs((int)$padding);
}

public function get_page($q='')
{
	if ($q) $this->set_query($q);

	$r = $this->db->query( $this->query_paging($this->q) );
	$this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());

	if ($this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size);
	
	if ($this->cur_page > $this->total_pages)
	{
		$this->cur_page = $this->total_pages;
		if ( $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) );
	}
	
	return $r;
}

public function get_result_text()
{
	$start = (($this->cur_page-1) * $this->page_size)+1;
	$end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);

	return sprintf($this->result_text_pattern, $start, $end, $this->total_rows);
}

public function get_page_links()
{
	if ( !isset($this->total_pages) ) return '';

	$page_link_list = array();

	$start = $this->cur_page - $this->link_padding;
	if ( $start < 1 ) $start = 1;
	$end = $this->cur_page + $this->link_padding-1;
	if ( $end > $this->total_pages ) $end = $this->total_pages;

	if ( $start > 1 )  $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
	for ($i=$start; $i <= $end; $i++)  $page_link_list[] = $this->get_page_link( $i );
	if ( $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
	if ( $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages );

	return implode($this->page_link_separator, $page_link_list);
}

public function get_next_page_link()
{
	return isset($this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : '';
}

public function get_prev_page_link()
{
	return isset($this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : '';
}

private function get_page_link($page, $text='')
{
	if (!$text)	$text = $page;

	if ($page != $this->cur_page)
	{
		$reg = '/((&|^)'.$this->page_var.'=)[^&#]*/';
		$url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page);
		return '<a href="'.$url.'">'.$text.'</a>';
	}
	return '<span>'.$text.'</span>';
}

private function query_paging()
{
	$q = $this->q;

	if ($this->page_size != 0)
	{
		//calculate the starting row
		$start = ($this->cur_page-1) * $this->page_size;
		//insert SQL_CALC_FOUND_ROWS and add the LIMIT
		$q = preg_replace('/^SELECTs+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}";
	}

	return $q;
}
}
?>

Сам скрипт брал отсюда http://www.tigir.com...hp_paging_class (не бейте за указание внешней ссылки)

Буду бесконечно благодарен за помощь.

 

 

  • 0

#2 Avin

Avin
    Topic Starter
  • Пользователь
  • 82 сообщений
  • Репутация: 1

Отправлено 23 Апрель 2012 - 16:24

Понимаю, что кода слишком много и я не привел дамп из бд.
Проблему решил вроде бы.
Тему можно закрыть
  • 0


Оформление форума – IPBSkins.ru