2014-11-11 2 views
0

Итак, я работаю над системой разбиения на страницы, которая извлекает данные извне, после того, как, наконец, выяснив проб и ошибок, я получил решение, которое работает. Пройдя через него, что-то показалось мне странным, как в документации $paginator = Paginator::make($items, $totalItems, $perPage);

Мне было интересно, что в действительности используется параметр $perPage? Вы могли бы подумать, что то, что указано в каждом номере, покажет, что многие предметы. Но с ручной разбивкой на страницы вам нужно ограничить результаты, которые передаются в $items, чтобы он работал, иначе вы получите вывод всех элементов (как показано ниже в коде). Исправлена ​​ли ручная разбивка на страницы? потому что если $perPage не соответствует общему количеству элементов в массиве $items, он показывает все.

Пример: Paginator::make(array('10xarray')), 10, 2); Показать 5 страниц с 2 элементами на странице? где на самом деле на самом деле он показывает 10 предметов с 5 страницами, на которых показаны все те же 10 предметов.

<?php 
class MainController extends BaseController { 

    public function library() 
    { 
     $this->layout->title = 'testing'; 
     $this->layout->main = View::make('library/layout'); 
     // Pagination data 
     $media = array(
      array('title' => 'test'), 
      array('title' => 'test'), 
      array('title' => 'test'), 
      array('title' => 'test') 
     ); 
     $perPage = 2; 
     $currentPage = Input::get('page', 1); 
     $pagedData = array_slice($media, ($currentPage - 1) * $perPage, $perPage); 

     $this->layout->main->paginated = Paginator::make($pagedData, count($media), $perPage); 

     if(Request::ajax()) { 
      return Response::json(
       View::make(
        'library/layout', 
        array('paginated' => $this->layout->main->paginated) 
       )->render() 
      ); 
     } 
    } 
} 

ответ

0

не является недостатком. это предполагаемое поведение.

это руководство paginator - это просто контейнер. ни больше ни меньше. как вы его реализуете, на вас.

без запроса LIMIT, вы никогда не сможете сделать разбивку на страницы. когда вы используете pagination(), laravel выполняет работу под капотом. когда вы идете на руководство, вам нужно сделать это вручную и получить больший контроль.

почему вы думаете, что это называется руководство по разбивке по страницам в первую очередь?

+0

В соответствии с заголовком вопроса '$ perPage' не влияет на разбиение на страницы, кроме простого отображения номеров страниц. Единственный раз, когда он работает, как следует, это то же самое число, что и '$ items', что вызывает вопрос:« Почему он там? когда это просто 'count ($ items)' – Bankzilla

+0

, потому что laravel вычисляет количество страниц путем деления общего количества данных на этот '$ perPage' (также равный' $ item', который вы ссылаетесь). Они __Must__ будут такими же. Основная ответственность за разбиение на страницы - это создание ссылок на страницы, __NOT__ выборка данных из базы данных. 2-я часть, является ответственностью программиста. – itachi

+0

Я уже понимаю все это, в том числе варианты использования разбивки на страницы, точка, которую я пытаюсь выяснить, может ли «$ perPages» быть сброшена вместе. Если каждый раз, когда он ** должен ** быть равен счету '$ items', тогда это не обязательно, и поскольку, если вы добавите какой-либо другой номер, он сломает его ... если нет другого варианта использования, который не имеет были упомянуты. – Bankzilla

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