Yii Framework Forum: CPagination-nel eltérő pagesize az első oldalon - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

CPagination-nel eltérő pagesize az első oldalon Rate Topic: -----

#1 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 19 May 2012 - 12:58 PM

Hogy lehet megoldani azt, hogy ha van egy komplex lekérdezésem, hogy az 1. oldalon x eredmény legyen, de 2. oldaltól már y?
Akárhogy próbálom nem jön össze.
Ez az alap ötlet a kontrollerben:
$pages->pageSize = 5;
if(isset($_GET['page'])) $page->pageSize = 10;


Ezzel nem is lenne alapvetően semmi gond, de a 2. oldaltól mintha össze vissza kérdezné le az eredményeket. Van erre valami megoldás? Vagy esetleg én csinálom rosszul?
0

#2 User is offline   gyz 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 17-March 11

Posted 19 May 2012 - 03:11 PM

Szia

Hát ez érdekes feladat. A baj az ha a CActiveDataProvider-ben állítod a pageSize-t, akkor szerintem így alakul a lekérdezés.

1. oldal: 1-5
2. oldal: 11-20
3. oldal: 21-30

Tehát a 6-10 rekordokat nem fogod látni.
Szerintem ezt csak úgy tudod megvalósítni, ha csinálsz saját lapozót.
Mert neked ilyen kell:

1. oldal: 1-5
2. oldal: 6-15
3. oldal: 16-25
stb...

Csinálj egy saját lapozót és írd felül az applyLimit metódust.

class MyCPagination extends CPagination {

public function applyLimit($criteria) {
..... ide kell a feltétel ami kiszámolja az új limiteket ....
}

Most így első nekifutásra ez jutott eszembe. Remélem tudtam segíteni.
Üdv!
0

#3 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 19 May 2012 - 03:56 PM

View Postgyz, on 19 May 2012 - 03:11 PM, said:

Szia

Hát ez érdekes feladat. A baj az ha a CActiveDataProvider-ben állítod a pageSize-t, akkor szerintem így alakul a lekérdezés.

1. oldal: 1-5
2. oldal: 11-20
3. oldal: 21-30

Tehát a 6-10 rekordokat nem fogod látni.
Szerintem ezt csak úgy tudod megvalósítni, ha csinálsz saját lapozót.
Mert neked ilyen kell:

1. oldal: 1-5
2. oldal: 6-15
3. oldal: 16-25
stb...

Csinálj egy saját lapozót és írd felül az applyLimit metódust.

class MyCPagination extends CPagination {

public function applyLimit($criteria) {
..... ide kell a feltétel ami kiszámolja az új limiteket ....
}

Most így első nekifutásra ez jutott eszembe. Remélem tudtam segíteni.
Üdv!


Igen, pont így szeretném. De nem CActiveDataProvider-t használok. Sima CDbcriteria és model findAll funkciók. Ezt sajnos nem tudom variálni, mert keresési funkciókból generálja ezt le. Szóval elég komplikált. :)
Amúgy, ahogy írod. A 2. oldalon már kevesebb jelenik meg, mint amennyinek kellene. De holnap meglesem ezt a saját applyLimit-es dolgot. :)
0

#4 User is offline   Speeedfire 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 192
  • Joined: 02-March 12

Posted 20 May 2012 - 04:30 AM

Én nem az applyLimit-tel próbálkoztam most, hanem a getOffset-tel, mert ez állítja be az értéket. Tegnap is próbálkoztam már ezzel csak nem a CPanination-ön belül.
Már majdnem jó a dolog.
4 adattal próbálkozok most.
1 oldalra 1-et akarok, a 2.-ra kettőt, a harmadikra meg maradna 1
Az első 2. oldal így már jó is, viszont a 3. oldalt nem jeleníti meg. Azt levágja, de úgy néz ki jó úton haladok. :)

class MyCPagination extends CPagination {

    public function getOffset() {
        if($this->getCurrentPage() != 0) {
            return ($this->getCurrentPage()*$this->getPageSize())-Yii::app()->params['firstPageSize'];
        } else {
            return $this->getCurrentPage()*$this->getPageSize();
        }
    }

}

0

#5 User is offline   Rajcsányi Zoltán 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 46
  • Joined: 10-November 09
  • Location:Hungary, Zalaegerszeg

Posted 25 October 2012 - 04:49 PM

Azért ez a probléma ennyire nem egyszerű. Nézd meg: /yii/framework/web/CPagination.php kódnak.

Az alábbi metódusokat újra kell írnod:
getCurrentPage
getPageCount
setFirstPageSize($value)

Fel kellene venned egy privát változót is
private $_firstPageSize=null;
---
Zoltan Rajcsanyi
homepage: http://ezmegaz.hu
skype: zolones7666

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users