Просмотр полной версии : ? по выводу страниц
Как сделать так, чтобы в галерее фоток, на каждой странице отображались не все ссылки с номерами страниц, а только несколько ссылок на страницы с фотками, например: 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
дык это ж для примера =)
ТС, тебе нужен только пример вывода страниц или всё вместе в запросами к БД ?
всё вместе нужно
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>";
}
примерно так
Эм, я для своей гостевухи писал так:
$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>";
}
Писал такую функцию для себя:
<?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="Предыдущая">«</a></span>';
$first = '<span class="pages"><a href="?page=1" title="Первая страница">««</a></span>';
}
// Вывод ссылок на последнюю и следующею страницу
if($page == $pages_all){
$plus = '';
$last = '';
}else{
$plus = '<span class="pages"><a href="?page='.($page + 1).'" title="Следующая">»</a></span>';
$last = '<span class="pages"><a href="?page='.$pages_all.'" title="Последняя страница">»»</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;
}
}
}
?>
спасибо! теперь прикрутить несложно будет :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot