cakePHP almak oturumları, serileştirme veya yazılan olmadan yazılan veri ile sayfalandırmak

4 Cevap php

Ben öz koşulları ve alanlar için mesaj sayfalandırmamayı kontrolörü / endeksinde küçük bir arama ve filtre form yöntemi yazı, yarattık ($ this-> paginate ($ koşulları))

Bu ilk sayfa için iyidir, ancak daha sonraki sayfalarda dosyalayıcı koşulları kaybolur. pagination passArgs de get değişkenleri destekler.

Diğer paginated sayfalara yazılan koşulları geçmek için bir un karmaşık bir yolu var mı?

The method I have looked at is pass the $conditions in session , which isnt without complexity of assigning session and unset the session on submitting the form again (more refinements to the filter criteria by the user ) The other method is passing the $conditions as serialized string url_encode as an get parameter.

Daha passArgs, oturumlar ve url kodlamak kek tarzı gibi görünmüyor gibi bunu yapmak için iyi bir pasta yolu var mı.

Teşekkürler

4 Cevap

Sen passedArgs kullanabilirsiniz.

yöntem denetleyicisi:

if ( empty($this->passedArgs['search']) ){
    $this->passedArgs['search'] = $this->data['YourModel']['search'];
}
if ( empty($this->data) ){
    $this->data['YourModel']['search'] = $this->passedArgs['search'];
}

Sizin görüşünüze göre:

$this->Paginator->options(array('url' => $this->passedArgs));

Is there an un complex way to pass the post conditions to the other paginated pages?

Hayır.

Is there an good cake way to do this more like passArgs, sessions and url encode do not look like cake style.

Tek yolu, ne olursa olsun, kek veya pasta var.

  1. Arama GET yöntemi kullanılarak yapılmalıdır.

  2. Parametreler SORGU STRING aktanlmasmı.

Method = "GET" ve daha sonra http_build_query ile kullanın Yani, bir sorgu dize birleştirin ve diğer sayfalara bağlantı yapmak için kullanabilirsiniz () arama formunu olun.

Biraz meraklı olmak, SO burada bir örnek görebilirsiniz:

http://stackoverflow.com/questions/tagged?tagnames=php&page=5&sort=newest&pagesize=50

Benim olsaydı ben oturumuna şeyler tasarrufu sizin fikir ile çalışır. Sonra kullanıcı kolaylığı ile geri ve ileri gitmek için izin böylece, her sayfayı kaydetmek için, oturuma bir sayfa boyutu eklersiniz.

$this->Session->write('Search.page.1.params',$params);
$this->Session->write('Search.page.2.params',$params2);

Kek bir şekilde bunu yapmak için, muhtemelen kendi Sayfalandırmayı yardımcısını veya eklenti yazmak isterdim. Eğer gibi denetleyicileri daha effectivly kullanabilirsiniz hangi

$this->MyPages->paginate('MyModel');

Ben bir SavedSearch model veya benzeri içine oturum params dökümü olabilir gibi, bu işlev aynı zamanda onlar istedi, kullanıcıların 'benim aramayı kaydet' izin seçeneği verecek, sanırım.

Olsa yeni bir arama başlamadan önce $this->Session->destroy() unutmayın!

Ayrıca ve samimi görünümlü URL'ler tutarak (onları bir oturum olduğu gibi dolan olmadan) arama imi URL'leri kullanıcıların sağlayan, bu çözmek için Post/Redirect/Get design pattern deseni kullanabilirsiniz. Örneğin:

function index($searchTerms = null) {
    // post/redirect/get
    if (isset($this->data['SearchForm'])) {
        $this->redirect(array($this->data['SearchForm']['search_terms']));
    }
    // your normal code here.
}

/controller/action fakat kullanıcının yönlendirildiği ve bunun yerine GETler olduğu Arama formu verileri mesajlarını /controller/action/search+terms terimler bir parametre olarak eyleme geçirilir burada (yani $searchTerms) .

/controller/action?data[SearchForm][search_terms]=search+terms: sadece GET form gönderme yöntemini değiştirmek, bunun yerine bir şey gibi görecek