CakePHP: Numaralı Sayfalandırılmış Sonuçlar

2 Cevap php

Başlık biraz sakat ama 'ben morn 4'te ile gelebilir en iyisi. Ben paginating ediyorum linkleri, hiçbir şey fantezi bir tablo var. En 5 sayfada için 20 sayfa görüntülenir 100 bağlantılar vardır diyelim. Nasıl her bağlantı, 1 ile başlayan ve ilk sayfada 20 ile biten ve son sayfaya atlanır 81 ile 100 arasında olacağını numara olabilir. Benim sorguları BY yönünü ve sırasını değiştirerek birden fazla sorgu var bu yüzden bu olurdu dinamik. CakePHP'ye 1.2 kullanılarak yapılır. Bunun bir örneği, reddit.com olur

2 Cevap

Görünümündeki bu deneyin:

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

Bu size paginator mevcut durumu hakkında içinde biraz bilgi vereceğim. Örneğin, bu bulabilirsiniz:

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

'limit' being the "items per page" and 'page' being, well, the page.
With this information it should be pretty trivial to insert this kind of counter into your output.

$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++;
}

Şöyle pagination Logic:

SELECT count (*) my_table WHERE ... ORDER BY ...;

Öncelikle, paginated orada kaç kayıt bilmek istiyorum.

Ardından, aksi halde son birkaç kayıtları kendi sayfasını almazsınız, sayfa ve 'tavan' bu sayı başına istediğiniz kayıt sayısına göre kayıtların toplam sayısını bölün.

Şimdi kayıt sayısını ve sayfa numarası var.

Eğer daha fazla kayıtları kapma başlamak için ne rekor biliyorum böylece Sonra, konum ne olursa olsun sayfa için, sayfa başına kayıt sayısına göre sayfa numarasını eksi 1 çarpın. Bu sorgu, irade gibi bir şey görünüyor:

SEÇİN * my_table WHERE ... BY ... SINIR {xsayfadan başı kayıtları (Geçerli sayfa numarası - 1)} SİPARİŞ, {sayfa başına kayıtları}

Eğer eksi 1 nedeni, çünkü sayfa 1 vardı ve örneğin sayfa başına 20 kayıtları, daha sonra 1 x 20 = 20 kapma ve biz ilk sayfa için 20, 0'dan kayıtları değil kapma başlamak istiyorsanız olsaydı. Çarpılması önce Yani eksi 1.

Sonra sadece kayıtları görüntülemek!

: D