Как вывести стр

Статус
Закрыто для дальнейших ответов.

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Вот сделал, постраничный вывод сообщений, но когда много становится стр, мне нужно так сделать, чтоб они не все выводились. Ток при переходе к дургим стр появлялись следуюшие. Ну примено как тут на форуме.


 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Ну это же не сложно тут надо всего-то две функции написать
Код:
function start_page($page, $num) // (Текущая страница, скока показывать)
{
  return ($page-$num > 0) ? $page-$num : 0;
}

/*вторая функция аналогично*/

$page = $_GET['page'];
$start_page = start_page($page, 5);
$end_page = end_page($page, 5);

/*в цикле $i от $start_page до $end_page*/
Не забудь что должно быть условие, что если превышено количество выода, напимер если ты находишься на последней странице не вывелось ещё 5 )))
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Вот написал код, но вроде слишком мудрено. Оч большой получился. Плиз напиши как по проще сделать. Или мой какнить можно сократить. А и можешь принцип ниписать, как ты тут написал.

Заранее спс.

1)Считаем количесво топиков и делим его на количесво топиков на одной странице
2) округляем значение в большую сторону.
3) далее в цикле for указываем с какой по какую выводить.
С какой = количесво топиков на одной странице*данная страница.
По какую = С какой + количесво топиков на одной странице
4) а страницы выводим в низу, крличество содержится в значении которое мы округлили
Код:
<?php
			  if($num_page != 1) {
?>
	<div class="pages">
<?php
$url = "index1.php";
		
		function start_page($page, $num) {
			global $num_page;
			if(((2 * $num) + 1) == $num_page || ((2 * $num) + 1) > $num_page) {
				return $start_page = 1;
			} else {
			if(($page - $num) <= 0) {
				$start_page = 1;
			} else {
				$start_page = $page - $num;
				if(($page + $num) > $num_page) {
					$start_page = $page - (((2 * $num) + 1) - $num);
				}
			}
			return $start_page;
			}
		}
		function end_page($page, $num) {
			global $num_page;
			if(((2 * $num) + 1) == $num_page || ((2 * $num) + 1) > $num_page) {
				return $end_page = $num_page;
			} else {
			$end = (2 * $num) + 1;
			if(($page - $num) <= 0) {
				$end_page = $end;
			} else {
				$end_page = $page + $num;
				if($end_page > $num_page) {
					$end_page = $num_page;
				}
			}
			return $end_page;
			}
		}
		
		$start_page = start_page($page, 2);
		$end_page = end_page($page, 2);
		
		for($i = $start_page; $i <= $end_page; $i++) {
			if($i == $page) {
?>	
			<?=$i;?>
<?php			
			} else {
?>	
			<a href="<?=$url."?page=".$i;?>"><?=$i;?></a>
<?php
			}
		}
	}
?>
	</div>
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Конечно неравильно!
Вот так!
Код:
<?php
function start_page($page, $num) {
  return (($page-$num) > 0) ? ($page-$num) : 0;
}

function end_page($page, $num, $numPages) {
  return (($page+$num) < $numPages) ? ($page+$num) : $numPages;
}

/*Считаем всё, там количество страниц = $num_page и др*/

if($num_page > 1) {
?>
	<div class="pages">
<?php
$url = "index1.php";
		   
$start_page = start_page($page, 2);
$end_page = end_page($page, 2, $num_page);
		
		for($i = $start_page; $i <= $end_page; $i++) {
			if($i == $page) {
?>	
			<?=$i;?>
<?php			
			} else {
?>	
			<a href="<?=$url."?page=".$i;?>"><?=$i;?></a>
<?php
			}
		}
	}
?>
	</div>
Примерна так
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Все я разобрался, просто я думал, что количество отоброжаемых стр должно быть всегда одинаковым, вот и мудрил.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
))) Всё в нашем деле просто, надо только представить что ты хочешь получить )))
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Вот готовый код. Что тут моно подправить??? А и лучше всегда выходить из интерпритатора php. Как тут например:
Код:
<?php
if($rows == 0) {
?>
	<p>В гостевой книге нет записей <b>:(</b></p>
<?php
	}
?>
Код:
<?php
	$link = connect_db();
	$rows = mysql_query("SELECT COUNT(*) FROM guest_book;");
	$rows = mysql_fetch_array($rows);
	$rows = $rows['COUNT(*)'];
	if($rows == 0) {
?>
	<p>В гостевой книге нет записей <b>:(</b></p>
<?php
	}
	
	$page = $_GET['page'];
	$num_page = ceil($rows / $posts);
	
	if(!isset($page)) $page = 1;
	if($page < 1) $page = 1;
	if($page > $num_page) $page = $num_page;
	
	$start = ($page-1) * $posts;
	$result = mysql_query("SELECT * FROM guest_book ORDER BY id_num DESC LIMIT ".$start.", ".$posts.";");
	if($result) {
		while($row = mysql_fetch_array($result)) {
			$name = $row['nick'];
			$email = $row['e_mail'];
			$text = $row['text'];
			$date = $row['date'];
			
?>
	<table cellpadding="4" cellspacing="0" align="center" id="table">
	  <tr class="info">
		<td class="nick" align="left">Написал(а): <?=$name;?></a></td><td>E-mail: <?=$email;?></td><td class="date" align="right">Дата: <?=$date;?></td>
	  </tr>
	  <tr>
		<td colspan="3"><?=$text;?></td>
	  </tr>
	</table><p>
	
<?php
		}
	}
	mysql_close($link);

	if($num_page != 1) {
		echo "<div class=\"pages\">";

		$url = "index.php";
		$num = 4;
		
		function start_page($page, $num) {
			  if(($page-$num) > 0) $result = $page-$num;
			else $result = 1;
			return $result;
		}

		function end_page($page, $num, $num_page) {
			  if(($page+$num) > $num_page) $result = $num_page;
			else $result = $page+$num;
			return $result;
		}
		
		$start_page = start_page($page, $num);
		$end_page = end_page($page, $num, $num_page);
		
		if((($page-$num)-1) > 0) echo "<a href=\"$url?page=1\">1</a><b>...</b>";
		if($page > 1) echo "<a href=\"$url?page=".($page-1)."\" title=\"Предыдущая страница\"><</a>";
		
		for($i = $start_page; $i <= $end_page; $i++) {
			if($i == $page) {
?>	
			<span style="color: #FF3300;"><?=$i;?></span>
<?php			
			} else {
?>
				<a href="<?=$url."?page=".$i;?>"><?=$i;?></a>
<?php
			}
		}
		if($page < $num_page) echo "<a href=\"$url?page=".($page+1)."\" title=\"Следующая старница\">></a>";
		if(($page+$num) < $num_page) echo "<b>...</b><a href=\"$url?page=$num_page\">$num_page</a>";	
	}
?>
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Если работает, то пусть хоть так...
Сколько раз вам показывал сокращённую запись функций, вы так и лепите свои )))

Если уж хотите уменьшить до минимума код. Изучите ООП напишите 2 класса mysql и navigator.
Всё что нужно прописать в них, а затм просто использовать их в нужном месте.
Будет намного короче... А пока и так сойдёт )))
 

Fliand

Well-Known Member
Регистрация
16.09.2007
Сообщения
81
Ок, спс огромное. :biggrin:
 
Статус
Закрыто для дальнейших ответов.
Верх Низ