Постраничная навигация и модуль RewriteEngine

Noob1984

Новичок
Уважаемы специалисты!
Пытаюсь в который раз сделать навигацию на сайте, точнее в категориях сайта.

Пытаюсь сформировать url ссылку такого формата
Код:
http://site.ru/catalog/?page=2
в .htaccess включен модуль
Код:
RewriteEngine
RewriteBase /
Далее действую таким способом

PHP:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]*)/$ templ/lay/pages/catalog.php?url=$1
Осуществляю выборку с быза

PHP:
$pagination = 3;
		if (empty($_GET['page']) || ($_GET['page']) <= 0)
		{
			$page = 1;
		}
			else
		{
			$page = (int)$_GET['page'];
		}
		$query = "SELECT * FROM `articles` WHERE `category_id`='" .$value['category_id']. "'";
		$rowquery = mysqli_query($dbc, $query);
		$cont = mysqli_num_rows($rowquery);
		$page_comm = ceil ($cont / $pagination);
		if (!$page_comm) $page_comm = 1;
		if ($page > $page_comm) $page = $page_comm;
		$start = ($page - 1) * $pagination;
Далее передаю параметры выборки в функцию со статьями в которой прохожу в цикле и вывожу все статьи к данной категории, переменная $start, $pagination так же вставляю в запрос где определяю количество страниц которые будут выдоится на экран пользователю.

Далее, пишу функцию для навигации:
PHP:
function pagination ($page, $page_comm, $value)
		{

		/* ссылки навигации */
                $value // мссив с категорими сайта
		$back = ''; // ссылка назад
		$forward = ''; // ссылка в перед
		$startpage = ''; // ссылка в начало
		$endpage = ''; // ссылка в конец
		$page2left = ''; // вторая страница слева
		$page1left = ''; // первая страница слева
		$page2right = ''; // вторая страница справа
		$page1right = ''; // первая страница справа

		// ссылка назад 

		if($page > 1)
		{
			$back = "<a class='nav_link' href='/" .$value. "/?page=" .($page -1). "/'>&larr; Предыдущая</a>";
		}
		// ссылка в перед 

		if($page < $page_comm)
		{
			$forward = "<a class='nav_link' href='/" .$value. "/?page=" .($page +1). "/'> Следующая &rarr;</a>";
		}

		// ссылка в начало 
		if($page > 3)
		{
			$startpage = "<a class='nav_link' href='/" .$value. "/?page=1'>в начало</a>";
		}

		// ссылка в конец 
		if($page < ($page_comm - 2))
		{
			$endpage = "<a class='nav_link' href='/" .$value. "/?page=" .($page_comm)."/'>Последняя</a>";
		}

		// вторая страница слева 
		if($page  - 2 > 0)
		{
			$page2left = "<a class='nav_link' href='/" .$value. "/?page=" .($page - 2). "/'>" .($page - 2). "</a>";
		}
		// первая страница слева
		if($page  - 1 > 0)
		{
			$page1left = "<a class='nav_link' href='/" .$value. "/?page=" .($page - 1). "/'>" .($page - 1). "</a>";
		}
		// вторая страница справа 
		if($page  + 2 <= $page_comm)
		{
			$page2right = "<a class='nav_link' href='/" .$value. "/?page=" .($page + 2). "/'>" .($page + 2). "</a>";
		}
		// первая страница справа 
		if($page  + 1 <= $page_comm){
		$page1right = "<a class='nav_link' href='/" .$value. "/?page=" .($page + 1). "/'>" .($page + 1). "</a>";
		}
			echo $startpage.$back.$page2left.$page1left.'<a class="nav_active">' .$page. '</a>'.$page1right.$page2right.$forward.$endpage;
		}
вывожу результат работы функции в шаблоне с категориями

PHP:
echo '<center><div class="nav">';
		if ($page_comm > 1) pagination ($page, $page_comm, $value['animalurl']);
		echo '</div></center>';
Получаю прекрасно все стать и навигацию, но не задача-не могу переходить по страничкам. В чем загвоздка помогите люди знающие и имеющие дело когда нибудь с Модулем RewriteEngine!
Спасибо всем кто откликнется!
 

С.

Продвинутый новичок
Зачем здесь модуль RewriteEngine? Он тут совсем не нужен. А если и нужен, то разработку надо вести по отдельности. Сначала страничную навигацию, а потом навешивать RewriteEngine если очень хочется.

Поэтому решение проблемы: убрать RewriteEngine, продолжить отладку навигации без него.
 

Noob1984

Новичок
Зачем здесь модуль RewriteEngine? Он тут совсем не нужен. А если и нужен, то разработку надо вести по отдельности. Сначала страничную навигацию, а потом навешивать RewriteEngine если очень хочется.

Поэтому решение проблемы: убрать RewriteEngine, продолжить отладку навигации без него.
Да без него вообще ни каких проблем! Алгоритм работает как часы.

RewriteEngine как может Вы заметили служит для передачи в GET понятные урлы, следовательно убрав RewriteEngine я получаю domain.net/category_id/page=3, ну как потом с таки урлами быть? что скажет боты и seo? Я конечно прекрасно понимаю что можно без RewriteEngine обойтись но таких способов я не знаю.
 

WMix

герр M:)ller
Партнер клуба
значит наоборот, настроить mod_rewrite на абстрактном скрипте
PHP:
print_r($_GET);
убедиться что все работает а после смешивать
 

Noob1984

Новичок
WMix
PHP:
Array
(
    [url] => insects
)
В данной категории 23 странице по 3 статьи на каждой.


значит наоборот, настроить mod_rewrite на абстрактном скрипте

Можно по подробней?
 
Последнее редактирование:

Breeze

goshogun
Команда форума
Партнер клуба
ТС, тебе для начала нужно справиться с тремя задачами:

1. правильно сделать подсчет строк в категории, т.к. mysqli_num_rows для этого не подходит, у sql есть COUNT
2. как сделать выборку из базы только необходимой страницы, смори LIMIT
3. сделать все без RewriteEngine, который только мешает сейчас

и еще прочитать http://phpfaq.ru/debug
 

Noob1984

Новичок
ТС, тебе для начала нужно справиться с тремя задачами:

1. правильно сделать подсчет строк в категории, т.к. mysqli_num_rows для этого не подходит, у sql есть COUNT
2. как сделать выборку из базы только необходимой страницы, смори LIMIT
3. сделать все без RewriteEngine, который только мешает сейчас

и еще прочитать http://phpfaq.ru/debug
Спасибо за рекомендацию, просто сколько людей столько и мнений, один думает что я совсем новичок а другой думает что же он там наворотил!
Прошу не судить так строго, я не перехожу на личности.

Что касаемое моей проблемы так я ее решил и все прекрасно работает!
Загвоздка в данном участке была
PHP:
RewriteCond %{QUERY_STRING} page=([^\/]*)
Изначально регулярка стояла только число ([0-9]) но я через get передаю не цифры а буквы по этому пришлось быстро по мозговать и сделать так: page=([^\/]*)
Все спасибо, конечно самый главный участок кода не выкладываю, потому что я думаю тут и так всем все ясно! Всем спасибо!
 
Последнее редактирование:

michelle

Новичок
Я обычно говорю - Слушаться старших надо!

Breeze тебе хорошую весчь подсказывает!

Но понятно, школоло гениально по определению
 

Breeze

goshogun
Команда форума
Партнер клуба
Noob1984

понятно, ты находишь себе и другим проблемы на ровном месте, замалчивая, недоговаривая и делая все через одно место
 

michelle

Новичок
Согласен про то что старших слушать надо! а вот про школоло ты погорячился!
Есть люди, разум которых и 50 лет неотличается от школоты.
Репликами в этом топике ты ведешь себя как 100% школота.

На этом умолкаю - выводы от советов делай сам.
Советы тебе дали нормальные, и думай как их использовать, а не тролить и игнорировать.
 
Сверху