PDA

Просмотр полной версии : ? по выводу страниц


Ridikh
18.12.2008, 00:48
Как сделать так, чтобы в галерее фоток, на каждой странице отображались не все ссылки с номерами страниц, а только несколько ссылок на страницы с фотками, например: 1, 2, 3, 4, 5... 11... 51... 101... Последняя »?

На данный момент вывод ссылок осуществляется с помощью while, но так получается что выводится очень много ссылок, а это лишний трафф пользователя и время ожидания загрузки страниц(((

optimazer
18.12.2008, 02:37
инфо о фотках забиваешь в БД
потом
ловишь гет-параметры, к примеру first_view и last_view
mysql_query("SELECT * FROM foto LIMIT ".$_GET['first_view']." ,".$_GET['last_view'].";");
проверяешь если фотки еще остались
генеришь ссылку на эту же страницу с новыми гет-параметрами

.:EnoT:.
18.12.2008, 03:30
mysql_query("SELECT * FROM foto LIMIT ".$_GET['first_view']." ,".$_GET['last_view'].";");

у тебя большое будущее с такой "обработкой" гет-запросов :) intval бы хоть поставил))

ТС, тебе нужен только пример вывода страниц или всё вместе в запросами к БД ?

optimazer
18.12.2008, 10:28
дык это ж для примера =)

Ridikh
18.12.2008, 12:32
ТС, тебе нужен только пример вывода страниц или всё вместе в запросами к БД ?

всё вместе нужно

optimazer
18.12.2008, 17:07
допустим таблица foto в БД и она имеет структуру

f_id int(50) PK not null autoincriment
foto_url varchar(255) not null

$link = mysql_connect('твой_сервер_БД','пол ьзователь','пароль');
mysql_select_db('имя_БД');

if ($_GET['first_view'] == "" or $_GET['last_view'] == "") {
$_GET['first_view'] == 0;
$_GET['last_view'] == 10;
}

$res = mysql_query("SELECT * FROM foto LIMIT ".intval($_GET['first_view'])." ,".intval($_GET['last_view']).";");
while($row = mysql_fetch_assoc($res)){
echo "<img src='".$row['foto']."'><br>";
}

$q = mysql_query("SELECT COUNT(*) FROM foto ");
$temp[0] = mysql_fetch_array($q);

if ($temp[0] > $_GET['last_view']) {
echo "<a href="этот_файл.php?first_view=10&last_view=20">next</a>";
}

примерно так

Ru}{eeZ
18.12.2008, 17:57
Эм, я для своей гостевухи писал так:
$maxNews - количество комментириев на страницу
count($name) - количество комментариев
ceil() - чтобы отображались все страницы, содержащие новости

for($i = 1; $i <= ceil(count($name)/$maxNews); $i++) {
if($_GET['page'] == $i) echo '<font color = "gray">'."$i".'</font> ';
else echo "<a href = \"?page=$i\">$i </a>";
}

d_x
18.12.2008, 18:47
Писал такую функцию для себя:

<?php
print pagstxt(10,100);
print '<br>';
print pagstxt(2,100);
print '<br>';
print pagstxt(97,100);

function pagstxt($page,$maxp) //$page - какая сейчас страница, $maxp - сколько всего страниц
{
$ptxt='';

if($maxp<=7)
{
for($i=1;$i<=$maxp;$i++)
{
if($i==$page)
$adds="[ $i ]";
else
$adds=$i;

$k=$i-1;

$ptxt.="<a href='?page=$k'>$adds</a> ";
}

return $ptxt;
}
else
{
if($page>3)
$c1=2;
else
$c1=$page-1;



if($page>$maxp-3)
$c2=$maxp-$page;
else
$c2=2;



for($i=$page-$c1;$i<=$page+$c2;$i++)
{
if($i==$page)
$adds="[ $i ]";
else
$adds=$i;

$k=$i-1;

$ptxt.="<a href='?page=$k'>$adds</a> ";
}

if($page>4)
$ptxt="<a href='?page=0'>1</a> ... ".$ptxt;
else if($page==4)
$ptxt="<a href='?page=0'>1</a> ".$ptxt;

$tmp=$maxp-1;

if($page<$maxp-3)
$ptxt.="... <a href='?page=$tmp'>$maxp</a> ";
else if($page==$maxp-3)
$ptxt.="<a href='?page=$tmp'>$maxp</a> ";
}

return $ptxt;
}
?>


Этот пример выведет следующие ссылки:
1 ... 8 9 [ 10 ] 11 12 ... 100
1 [ 2 ] 3 4 ... 100
1 ... 95 96 [ 97 ] 98 99 100

Думаю, прикрутить это к тому, что есть, труда не составит.

.:EnoT:.
18.12.2008, 18:48
всё вместе нужно
угу)

Код откоментировал, надеюсь разберёшься. Выдирал из своего класса, поэтому может переменные какие-то забыл, хотя вроде всё норм.

<?php

// Берём текущую страницу
$page = !empty($_GET['page']) && is_numeric($_GET['page']) ? intval($_GET['page']) : 1;
// Глубина вывода страниц
$pages_deep = 4;
// Сколько фоток выводить на одной странице
$onpage = 10;

// Запрашиваем общее кол-во фоток в БД
$sql = mysql_query('SELECT COUNT(*) AS `total`
FROM `photos`
ORDER BY id ASC');

if($sql){

$result = mysql_fetch_assoc($sql);
// Определяем на сколько страниц поместится весь контент
$pages_all = intval(($result['total'] - 1) / $onpage) + 1;

if(!$page || $page <= 0) $page = 1;
elseif($page > $pages_all) $page = $pages_all;

$start = intval($page * $onpage - $onpage);

// Запрашиваем контект в соответствии с указанной страницей
$explode_sql = mysql_query("SELECT * FROM `photos`
ORDER BY id ASC
LIMIT ".$start.", ".$onpage);

if($explode_sql && mysql_num_rows($explode_sql)){

while($res = mysql_fetch_assoc($explode_sql)){

// Выводим

}

// Выводим навигацию по страницам

// Страницы влево
for($i = $pages_deep * -1; $i < 0; $i++){

if(($page + $i) <= 0) continue;
elseif($page == $i) continue;
else{
$pages_left[] = '<span class="pages"><a href="?page='.($page + $i).'">'.($page + $i).'</a></span>';
}

}

// Страницы вправо
for($i = 1; $i <= $pages_deep; $i++){

if(($page + $i) > $pages_all) continue;
elseif($page == $i) continue;
else{
$pages_right[] = '<span class="pages"><a href="?page='.($page + $i).'">'.($page + $i).'</a></span>';
}

}

// Вывод ссылок на первую и предыдущую страницы
if(!$page || $page == 1){
$minus = '';
$first = '';
}else{
$minus = '<span class="pages"><a href="?page='.($page - 1).'" title="Предыдущая">&laquo;</a></span>';
$first = '<span class="pages"><a href="?page=1" title="Первая страница">&laquo;&laquo;</a></span>';
}

// Вывод ссылок на последнюю и следующею страницу
if($page == $pages_all){
$plus = '';
$last = '';
}else{
$plus = '<span class="pages"><a href="?page='.($page + 1).'" title="Следующая">&raquo;</a></span>';
$last = '<span class="pages"><a href="?page='.$pages_all.'" title="Последняя страница">&raquo;&raquo;</a></span>';
}

// Если страницы не сгенерировались
if(join('', array_merge($pages_left, $pages_right)) == ''){

echo '';

}else{
// Выводим
echo '<span class="pages">Страница '.$page.' из '.$total.'</span>';
echo $first.$minus.join('', $pages_left);
echo '<span class="pages"><b>'.$page.'</b></span>';
echo join('', $pages_right).$plus.$last;
}


}

}


?>

Ridikh
18.12.2008, 20:05
спасибо! теперь прикрутить несложно будет :)