Intereting Posts
Где следует хранить конфигурацию, зависящую от среды, в приложении Zend Framework 2? Как добавить фоновое изображение при создании текстового изображения с использованием php? Служба проверки URL-адреса для вредоносного ПО или фишинга? Пользовательские постоянные ссылки WordPress с использованием .htaccess Компонент Symfony3 Form, пытающийся передать значение null в тип намеченного метода в PHP 7 Адаптация метода select для приема более одного параметра загрузить ход с последующей обработкой Royal Mail Shipping API – запрос SOAP и запрос pem / сертификатов MySQL Итерации через элементы разделенной строки и делать с ними вещи Пытаться анализировать только изображения из RSS-ленты Каков наилучший способ передать HTML-код для встраивания через rss-канал в rss-парсер в php? PHP preg_split игнорирует escape-последовательность Вход FB с помощью oauth-5-laravel Не удалось запросить ресурс. Код HTTP: нет ответа Показывать заказы с максимальной ценой сначала в PHP и MySQL Как найти физическую длину строки?

CakePHP: нумерованные разбитые на результат результаты

Название немного неудобно, но это лучшее, что я мог придумать в 4 утра. У меня есть таблица ссылок, которые я разбиваю на страницы, ничего необычного. Допустим, есть 100 ссылок, которые отображают 20 страниц на 5 страниц. Как я могу пронумеровать каждую ссылку, начиная с 1 и заканчивая 20 на первой странице, и если мы пропустим последнюю страницу, будет от 81 до 100. У меня есть несколько запросов, изменяющих направление и ORDER BY моих запросов, так что это должно быть динамически. Выполнено с использованием CakePHP 1.2. Примером этого может быть reddit.com

Попробуйте это в представлении:

<?php debug($this->params['paging']); ?> 

Это даст вам немного информации о текущем статусе страницы. Например, вы найдете следующее:

 Array ( [Model] => Array ( [page] => 2 ... [options] => Array ( [limit] => 20 ... 

'limit' – это «пункты на странице» и 'page' , а страница.
С этой информацией должно быть довольно тривиально вставлять этот счетчик в ваш выход.

 $page = $this->params['paging']['Model']['page']; $limit = $this->params['paging']['Model']['options']['limit']; $counter = ($page * $limit) - $limit + 1; foreach ($models as $model) { echo $counter; // normal $model output $counter++; } 

Логика разбиения на страницы выглядит следующим образом:

SELECT count (*) FROM my_table WHERE … ORDER BY …;

Во-первых, вы хотите знать, сколько записей должно быть разбито на страницы.

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

Теперь у вас есть количество записей и количество страниц.

Затем, для любой страницы, на которой вы находитесь, вы умножаете номер страницы минус 1 на количество записей на странице, чтобы узнать, с какой записи начать захватывать дальнейшие записи. Этот запрос будет выглядеть примерно так:

SELECT * FROM my_table WHERE … ORDER BY … LIMIT {записи на страницу x (номер текущей страницы – 1)}, {записи на страницу}

Причина, по которой вы минус 1, состоит в том, что если вы были на странице 1 и, например, занимались 20 записями на страницу, то 1 x 20 = 20, и мы хотим начать захватывать записи с 0, а не 20 для первой страницы. Итак, вы минус 1 перед умножением.

Затем вы просто показываете записи!

: D