2013-04-13 9 views
6

नहीं दिखा रहा क्वेरी में 6 रिकॉर्ड है और इस कोड को सही ढंग से 3 पृष्ठों पर इसे दिखाने:ZF2 paginator अंतिम पृष्ठ

(action) 
    public function listAction() 
     { 
      $page = (int) $this->params()->fromRoute('id', 0); 
      $posts = $this->getPagesTable()->selectPages(); 
      $paginator = new Paginator(new PaginatorIterator($posts)); 
      $paginator->setCurrentPageNumber($page) 
         ->setItemCountPerPage(2) 
         ->setPageRange(7); 
      return new ViewModel(array(
        'paginator' => $paginator, 
        )); 
     } 
(view) 
    <?php foreach ($paginator as $post) : ?> 
     <h2><?php echo $this->escapeHtml($post->id); ?></h2> 
     <div><?php echo $this->escapeHtml($post->name);?> 
    <?php endforeach; ?> 

लेकिन जब मैं कार्रवाई में foreach पाश जोड़ें:

public function listAction() 
{ 
    $page = (int) $this->params()->fromRoute('id', 0); 
    $posts = $this->getPagesTable()->selectPages(); 
    $paginator = new Paginator(new PaginatorIterator($posts)); 
    $paginator->setCurrentPageNumber($page) 
       ->setItemCountPerPage(2) 
       ->setPageRange(7); 
    foreach ($paginator as $post) { 
     // some code or empty foreach 
    }; 
    return new ViewModel(array(
      'paginator' => $paginator, 
      )); 
} 

पेजिनेटर अंतिम (3) पृष्ठ नहीं दिखाता है (1 और 2 पृष्ठ सही ढंग से दिखाया गया है)। क्यों? धन्यवाद!


हैं $ paginator- जोड़ने> getIterator() -> रिवाइंड() foreach के बाद {}, paginator शो केवल प्रथम पृष्ठ और दूसरे और तीसरे पृष्ठों नहीं दिखाते।

+1

एक अजीब समस्या है, लेकिन आप कार्रवाई में एक खाली foreach क्यों है? यदि आपने उदाहरण को छोटा बनाने के लिए वहां कोड हटा दिया है तो आपने समस्या को हटा दिया होगा! मैंने भी सोचा होगा कि $ पदों के माध्यम से लूपिंग अधिक कुशल रहेगी? – CodeMonkey

+0

असली परियोजना में foreach में कुछ कोड शामिल हैं। – morin

+0

@CodeMonkey '$ posts' में सभी पंक्तियां हैं जहां' $ पेजिनेटर 'सीमित आइटम हैं (जो पृष्ठ पर प्रदर्शित होने जा रहे हैं)। देखने के लिए पहले 'आइटम' में उन आइटमों को प्राप्त करने के लिए, आपको ऐसे लूप की आवश्यकता है (जैसे खाली लूप या '$ पेजिनेटर-> getCurrentItems()' या $ paginator-> getItemsByPage ($ पृष्ठ) ') के परिणामस्वरूप ऊपर दिए गए नमूने '$ paginator' आइटम खाली में। – webcoder

उत्तर

0

इटरेटर पैटर्न एक सूचक की तरह है, इससे पहले कि आप इसे रीसेट करना चाहते हैं।

+0

पुनरावर्तक को रीसेट कैसे करें? – morin

+0

@ मॉरिन इसे आज़माएं: '$ पेजिनेटर-> getIterator() -> रिवाइंड()' –

+0

अगर $ paginator-> getIterator() -> रिवाइंड() foreach {} के बाद प्राप्त करें, पेजिनेटर केवल पहला पृष्ठ दिखाएं और दिखाएं दूसरे और तीसरे पृष्ठ। – morin

0

मैं भी यही मुद्दा

का सामना करना पड़ा लेकिन अब मैं

i am using iterator_to_array($userList); 
दृश्य पेज में

हल कर रहा हूँ इस लाइन यह ठीक काम कर रहा है हटाने के बाद हो सकता है यह सहायक आप