Название немного неудобно, но это лучшее, что я мог придумать в 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