2010-12-01 1 views
1

Ich habe viel versucht, aber ich kann es nicht verstehen, jede Hilfe wird geschätzt. Meine Artikel haben Stimmen und ich habe eine Seite, auf der die meisten Artikel angezeigt werden sollen. Bin mit Codeigniter btw. Der Controller:Codeigniter Seitennummerierung funktioniert nicht wie erwartet

function most_voted() 
    { 
     $per_page = 3; 
     $cur_page = $this->uri->segment(4); 
     /* 
     if($cur_page == "") $cur_page = 1; 
     else $cur_page = (integer)$cur_page; 
     */ 
     $offset = ($cur_page - 1) * $per_page; 
     if($offset < 0) $offset = 0; 
     $this->load->model('article_model'); 
     $result_rows = $this->article_model->GetMostVoted($per_page,$cur_page); 
     $total_rows = sizeof($result_rows) + 10; 
     echo "total rows is : ".$total_rows.'<br>'; 
     echo "cur page is : $cur_page <br>"; 

     //$this->load->library('pagination'); 
     $config['base_url'] = base_url().'articles/most_voted/page/'; 
     $config['uri_segment'] = 4; 
     $config['num_links'] = 3; 
     $config['first_link'] = '<<First'; 
     $config['last_link'] = 'Last>>'; 
     $config['prev_link'] = '< Previous'; 
     $config['next_link'] = 'Next >'; 
     $config['total_rows'] = $total_rows; 
     $config['per_page'] = $per_page; 
     $this->pagination->initialize($config); 


     $data['articles'] = $result_rows; 
     $data['view_file_name'] = 'articles/all_articles_view'; 
     $this->load->view('includes/template',$data); 
     //echo $this->db->last_query(); 
    } 

Das Modell:

function GetMostVoted($limit,$offset) 
    { 
     $this->db->order_by('votes','desc'); 
     $q=$this->db->get('cgh_articles',$limit,$offset); 
     if($q->num_rows() > 0) 
     { 
      foreach($q->result() as $row) 
      { 
       $data[] = $row; 
      } 
      return $data; 
     } 
    } 

Das Problem: Problem ist, dass wenn ich Paginierung wie < Zurück 1 2 3 4 5 Next erhalten> aber auf 2 Klick geht an url: page/3 klick auf 3 geht zu url: page/6 klick auf 4 geht zu url: page/9 und so weiter. Ich möchte einen Klick auf 2, um zu Seite/2 zu gelangen, 3 zu Seite/3 und so weiter. Irgendwelche Vorschläge, was läuft falsch?

Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen, danke.

Antwort

3

Die Funktionsweise der Paginierungsklasse besteht darin, dass sie das Element zurückgibt, mit dem die Seite beginnen soll.

Zum Beispiel bedeutet URL: hostanme/controller/page/9, dass die Seite beginnend mit dem 9. am meisten gewählten Artikel gerendert werden soll. Siehe das Beispiel in der codeigniter documentation.

Sie haben auch $total_rows = sizeof($result_rows) + 10;. Warum das ?

+0

danke, jd. sizeof ($ result_rows) + 10 ist nur eine ganze Zahl, die ich vorerst hart codiert habe. Ich werde es durch die tatsächliche Anzahl der zurückgegebenen Ergebnisse ersetzen. Also meinst du, dass die standardmäßige ci-Paginierung mir nicht geben wird, was ich wollte? – SIndhu

+0

Es klingt wie Sie etwas anderes wollen. Aber wenn man darüber nachdenkt, ist die Art und Weise, wie die Codigniter-Bibliothek funktioniert, eine gute Übung: Sie sagt Ihnen genau, bei welchem ​​Element Sie die Wiedergabe Ihrer Seite beginnen sollten, damit Sie das nicht selbst herausfinden müssen. –

+0

Ich sehe Ihren Punkt und verstehe jetzt, wie die Paginierungsbibliothek funktioniert (obwohl ich dies nirgends in den ci-Benutzerdokumenten erwähnt). Aber ehrlich gesagt, ich wollte das nicht auf meiner Seite haben, denn wenn es mich verwirren würde, würde es meinen Endbenutzer noch mehr verwirren. Von einem Benutzer pov, führen die meisten Websites, Foren Sie auf Seite 3, wenn Sie auf 3, 7 = 7 und so weiter, auch SO klicken. Ich denke, ich muss etwas schreiben, das anders ist als Ci? – SIndhu