Подтвердить что ты не робот

CakePHP: как получить общее количество записей, полученных с помощью разбивки на страницы

Когда вы извлекаете записи, используя $this->paginate('Modelname') с некоторой страницей limit, как вы получаете общее количество извлеченных записей?

Я хотел бы отобразить этот общий счет в представлении, но count($recordsRetrieved) возвращает номер, отображаемый только на текущей странице. Итак, если общее количество найденных записей равно 99, а limit - 10, оно возвращает 10, а не 99.

4b9b3361

Ответ 1

Вы можете debug($this->Paginator->params());

Это даст вам

/*
Array
(
    [page] => 2
    [current] => 2
    [count] => 43
    [prevPage] => 1
    [nextPage] => 3
    [pageCount] => 3
    [order] =>
    [limit] => 20
    [options] => Array
        (
            [page] => 2
            [conditions] => Array
                (
                )
        )
    [paramType] => named
)
*/

Последний код для PHP >= 5.4:

$this->Paginator->params()['count'];

Для версий PHP менее 5.4:

$paginatorInformation = $this->Paginator->params();
$totalPageCount = $paginatorInformation['count'];

Ответ 3

Вот как я получил счетчик от моего контроллера *

Это для CakePHP 2.3. Он использует помощник вида, который обычно является не-no в контроллере, поскольку он нарушает MVC, но в этом случае я считаю целесообразным сохранить код DRY.

// Top of file
App::uses('PaginatorHelper', 'View/Helper');

// Later in controller method
$paginatorHelper = new PaginatorHelper(new View(null));
$records = $this->paginate();
$count = $paginatorHelper->params()['count'];

* Я знаю, что ФП спрашивает об этом, но я думаю, что если Арзон Баруа ответят, это помогает людям (хотя я думаю, что он говорит только о запрошенном счете, а не о фактическом подсчете, как хочет OP), тогда это может помочь тоже.

Ответ 4

Этот способ получает информацию о pagination над контроллером.

class YourController extends Controller{
  $helpers = array('Paginator');
  public fn(){
    $view = new View(null);
    var_dump($view->paginator->params());
  }
}