PHP: Попытка придумать ссылку «предыдущая» и «следующая» - PullRequest
2 голосов
/ 11 января 2011

Я показываю 10 записей на странице. Переменные, с которыми я сейчас работаю, это ..

$total = total number of records
$page  = whats the current page I'm displaying

Я поместил это в верхней части моей страницы ...

if ( $_GET['page'] == '' ) { $page = 1; } //if no page is specified set it to `1`
else { $page = ($_GET['page']); }  // if page is specified set it

Вот мои две ссылки ...

    if ( $page != 1 ) { echo '<div style="float:left" ><a href="index.php?page='. ( $page - 1 ) .'" rev="prev" >Prev</a></div>'; }     
    if ( !( ( $total / ( 10 * $page ) ) < $page ) ) { echo '<div style="float:right" ><a href="index.php?page='. ( $page + 1 ) .'" rev="next" >Next</a></div>'; }

Теперь я предполагаю (если я о чем-то не думаю), что я могу отображать ссылку «Предыдущая» каждый раз, кроме случаев, когда страница имеет значение «1». Как это сделать, если ссылка «Далее» не отображается на последней странице?

Ответы [ 7 ]

2 голосов
/ 11 января 2011

замените последнюю строку кода на:

if ($page*10 < $total) echo '<div style="float:right" ><a href="index.php?page='. ( $page + 1 ) .'" rev="next" >Next</a></div>';
1 голос
/ 12 января 2011

Похоже, вам нужно определить, находитесь ли вы на первой или последней странице, и "защитить" код от этих условий.

if (/* not the first page */) {
  // print the prev link
}

if (/* not the last page */) {
  // print the next link
}

У вас уже есть код для определения, если страница = 1, поэтому теперь вам просто нужно определить, находитесь ли вы на последней странице или нет (целочисленное деление или ceil () должны быть в пути).

Для страниц результатов PHP из SQL есть замечательная статья о PHPFreaks http://www.phpfreaks.com/tutorial/basic-pagination

1 голос
/ 12 января 2011

// lets get total number of pages here
$itemsPerPage = 10;
$totalItems = 105; // just for example
$pagesNo = ceil( $totalItems / $itemsPerPage );

// get the current page here...
$current = ( isset($_GET['page']) ) ? (int)$_GET['page'] : 1;    // if page is defined, use it, instead use 1
$current = ( $current > 0 ) ? $current : 1;                    // if page was -1,-2... for instance, use 1

// show us 'Prev' button
echo ( $current > 1) ? "<a href='".($current-1)."'>Prev</a>" : "";

// show current page NO
echo $current;

// show 'Next' button
echo ( $current < $pagesNo) ? "<a href='".($current+1)."'>Next</a>" : "";

Должно быть так ... Это просто быстрый код ... Позже, поработайте над некоторым промежутком страниц (установите, сколько страниц должно отображаться до / после номера текущей страницы ...)

1 голос
/ 12 января 2011

У вас есть ошибка в последней строке:

$totalPages = ceil( $total / 10 );
if ( $page < $totalPages ) ) { echo "<div style="float:right" ><a href="index.php?page='. ( $page + 1 ) .'" rev="next" >Next</a></div>"; }
1 голос
/ 12 января 2011

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

Вот функция, которая возвращает словарь вещей, которые могут быть полезны:

function pagination($numberItems, $perPage, $currentPage) {
    $numPages = ceil($numberItems/$perPage);
    return array( 
        'numberPages' => $numPages,
        'start' => ($currentPage - 1) * $perPage + 1,
        'end' => min($currentPage * $perPage, $numberItems),
        'hasNext' => $page != $numPages,
        'hasPrev' => $page != 1
    );
}
1 голос
/ 11 января 2011

Вам нужно общее количество, разделенное на количество страниц ($total / 10) с дополнительной страницей, если есть остаток.Используйте функцию ceil .

$page < ceil($total / 10)
1 голос
/ 11 января 2011
!( ( $total / ( 10 * $page ) ) < $page )

Я ... не думаю, что это правильно.

Предположим, $total равно 1000 - тогда на странице 99 1000/990 равно меньше 99,но есть еще одна страница для показа.

Что вы, вероятно, хотите, чтобы проверить, больше или равно 10 * $page $total.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...