Расчет смещения для цикла for - PullRequest
0 голосов
/ 03 февраля 2011

Я пытаюсь выполнить разбиение на страницы в массиве, который я получил, и сейчас я зацикливаюсь на нем с помощью цикла for, подобного этому

for($i = $pages->low;$i<$total;++$i)

Мне нужно выяснить, как получить переменную $total для вычисления на основе текущей страницы и количества строк, чтобы цикл работал правильно для количества элементов в массиве.

У меня есть следующие переменные:


    $pages->low (equals the number of rows the pagination has already been through
    e.g. Page 1 = 0, Page 2 = 5, Page 3 = 10 etc...

    $pages->total_items (explains itself)
    $pages->current_page
    $pages->ipp (items per page, FYI 5)

Так какую формулу я бы использовал для вычисления количества строк, которые должен пройти цикл, например, если в массиве было всего 13 элементов и 5 результатов на страницу, на первой странице $total должно равняться 5, страница два должны равняться 10 и страница три должна равняться 13 и т. д.

Спасибо

Ответы [ 3 ]

1 голос
/ 03 февраля 2011
$total = min($pages->ipp * ($pages->current_page + 1), $pages->total_items);

Это делает obivous, но ограничивает его общим количеством предметов.

Хотя я лично просто использовал бы здесь LimitIterator.

0 голосов
/ 03 февраля 2011

непонятно, почему если на странице 1 было 13 элементов, то общее количество должно быть равно 5 ???

Для меня, если вы пытаетесь показать $ pages-> ipp Следующие элементы на страницах 2 вы можете перейти от $ pages-> low к $ pages-> low + $ pages-> ipp

0 голосов
/ 03 февраля 2011
$start_from = ($current_page - 1) * $per_page;

Из модуля нумерации страниц Kohana:

$this->total_pages        = (int) ceil($this->total_items / $this->items_per_page);
$this->current_page       = (int) min(max(1, $this->current_page), max(1, $this->total_pages));
$this->current_first_item = (int) min((($this->current_page - 1) * $this->items_per_page) + 1, $this->total_items);
$this->current_last_item  = (int) min($this->current_first_item + $this->items_per_page - 1, $this->total_items);
$this->previous_page      = ($this->current_page > 1) ? $this->current_page - 1 : FALSE;
$this->next_page          = ($this->current_page < $this->total_pages) ? $this->current_page + 1 : FALSE;
$this->first_page         = ($this->current_page === 1) ? FALSE : 1;
$this->last_page          = ($this->current_page >= $this->total_pages) ? FALSE : $this->total_pages;
$this->offset             = (int) (($this->current_page - 1) * $this->items_per_page);
...