2011-02-03 3 views
0

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

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, страница 2 должна равняться 10, а страница 3 должна равняться 13 и т. Д.?

Благодаря

+0

thats начальная школа математика. Вы уверены, что сможете программировать без базовой арифметики? –

ответ

1
$total = min($pages->ipp * ($pages->current_page + 1), $pages->total_items); 

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

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

+0

Это прекрасно (LimitIterator), намного лучше, чем замедленный цикл, который я использовал раньше. – Jack

0
$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); 
0

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

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

Смежные вопросы