Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Хелп плиз с навигацией :\

2.0K
04 февраля 2008 года
calgon
90 / / 27.06.2006
Нужна навигация типа :
Главная страница :
1 | 2 | 3 | 4 | 5 | 6 | >>
При нажатии на "6" :
<< | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | >>
При нажатии на "11" :
<< | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | >>
и т.д.
Причем :
для 1-й страницы (главной) ссылка идет как : index.html
для 2-й : index1.html
для 3-й : index2.html
и т.д.

У кого-нить есть такого плана php-скрипт?
14K
05 февраля 2008 года
Progr\.
72 / / 15.10.2007
Только вчера такое писал :)

Делаешь выборку с COUNT(id), потом смотришь запрошенную пользователем страницу $page = $_GET['page'], делишь её на количество новостей на странице, пишешь цикл от $i = 1 до количество страниц ($pages = $page / количество новостей на странице). Если $i == 1 и $page != 1, то это будет <<<, иначе, если $i == $pages и $page != $pages, то это будет >>>, иначе, если $i < $page+6 и $i > $page-6, то, если $i == $page, это будет запрошенная страница (выделяем жирным, без <a href='...'></a>), иначе это будет страница от 2 до 11 (если запрошена 6 страница).

Вообщем принцип понятен, я думаю. ;)
21K
05 февраля 2008 года
t3s
26 / / 12.03.2007
когда-то писал форум, делал примерно так:
 
Код:
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$limit=abs($page*20);
$result = mysql_query ("SELECT * FROM base ORDER BY `lasttime` DESC LIMIT $limit,20");
while ($row = mysql_fetch_array($result)){
// всякие блаблабла, то что необходимо вывести
}


собсно цифровая навигация (номера страниц):
Код:
$q="SELECT count(*) FROM `base`";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];
$num_pages=ceil($total_rows/20);
for($i=1;$i<=$num_pages;$i++) {
  if ($i-1 == $page) {
print ("<b>");
   echo $i." ";
print ("</b>");
     $next_page=$i+1;
     $prev_page=$i-1;
  } else {
    echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
  }
}

ссылки "следующая" и "предыдущая":
 
Код:
if ($prev_page <= 0){
print "";
} else {
    echo '<a href='.$_SERVER['PHP_SELF'].'?page='.$prev_page.'><b> <-- </b></a>';
}
if ($next_page > $num_pages){
print "";
} else {
    echo '<a href='.$_SERVER['PHP_SELF'].'?page='.$next_page.'><b> --> </b></a>';
}
244
05 февраля 2008 года
UAS
2.0K / / 19.07.2006
Я думаю mfender не будет обижаться)) Да и я сам использую эту функцию:

Код:
$startItem - порядковый номер записи
$itemsCount - всего записей из БД, которые могут быть
$unitsPerPage - записей показываемых на одной странице
$unitsInNavbar - сколько ссылок будет в "листалке"
$URLString - опционально, если хочется получить уже готовые ссылки, типа article8.htm - в этом случае параметр $URLString будет выглядеть как article%d.htm
//============================================

function GetNavArray($startItem, $itemsCount, $unitsPerPage, $unitsInNavbar, $URLString=null)
{
    $num_units_all=ceil($itemsCount/$unitsPerPage);
    $actual_block=floor(($startItem/$unitsPerPage)/$unitsInNavbar);
    $end_block=$num_units_all/$unitsInNavbar;
    $start_unit=floor(($actual_block*$unitsInNavbar)+1);
    $end_unit=$start_unit+$unitsInNavbar;
    for($n=$start_unit; $n<$end_unit; ++$n){
        $val = (int)(($n*$unitsPerPage)-$unitsPerPage);
        if($val<=$startItem) $ret['actual_unit'] = $n;
        $ret['pages'][$n] = is_null($URLString) ? $val : sprintf($URLString, $val);
    }
    $start_unit!=1 ? $ret['prev_arrow'] = $actual_block * (($unitsPerPage * $unitsInNavbar) - $unitsPerPage) : $ret['prev_arrow'] = 0;
    $actual_block < floor($num_units_all/$unitsInNavbar) ? $ret['next_arrow'] = $end_unit * $unitsPerPage - $unitsPerPage : $ret['next_arrow'] = 0;
    if(!is_null($URLString)){
        $ret['prev_arrow'] = $ret['prev_arrow'] ? sprintf($URLString, $ret['prev_arrow']) : 0;
        $ret['next_arrow'] = $ret['next_arrow'] ? sprintf($URLString, $ret['next_arrow']) : 0;
    }
    return $ret;
}  


//========================================================
Т.е., например GetNavArray(200, 30000, 20, 5, "article%d.htm") вернёт вот такой массив:

Код:
Array
(
    [actual_unit] => 11
    [pages] => Array
        (
            [11] => article200.htm
            [12] => article220.htm
            [13] => article240.htm
            [14] => article260.htm
            [15] => article280.htm
        )
    [prev_arrow] => article160.htm
    [next_arrow] => article300.htm
)

// mfender; codenet.ru
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог