Advertisement
  1. Code
  2. CodeIgniter

Seitenumbruch in CodeIgniter: Der vollständige Leitfaden

Scroll to top
Read Time: 12 min

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Der Vorteil eines Full-Stack-Webanwendungsframeworks besteht darin, dass Sie sich keine Gedanken über die üblichen Aufgaben wie Eingabeverarbeitung, Formularüberprüfung und Ähnliches machen müssen, da das Framework bereits Wrapper für diese Funktionen bereitstellt. So können Sie sich auf die Geschäftslogik der Anwendung konzentrieren, anstatt das Rad immer wieder neu zu erfinden.

Heute werden wir eine wichtige Bibliothek im CodeIgniter-Framework erkunden - die Paginierungsbibliothek.

Lassen Sie mich die Themen hervorheben, die wir im Verlauf dieses Artikels behandeln werden:

  • Demonstration des grundlegenden Paging
  • Erkunden Sie die Anpassungsoptionen
  • Seitenumbruch Konfiguration

Demonstration des grundlegenden Paging

In diesem Abschnitt wird ein Beispiel erläutert, das die Verwendung der Seitennumerierung in CodeIgniter veranschaulicht. Es ist der beste Weg zu verstehen, wie die Dinge insgesamt funktionieren.

In unserem Beispiel erstellen wir eine ziemlich einfache Benutzerliste, in der wir Datensätze aus der MySQL-Tabelle des Benutzers abrufen. Stellen Sie sicher, dass Sie die Felder "uid" und "uname" in Ihrer Benutzertabelle haben, um dieses Beispiel erfolgreich auszuführen.

Damit sind wir bereit zu rollen.

Gehen Sie voran und erstellen Sie eine Controller-Datei controllers/Paging.php mit den folgenden Inhalten.

1
<?php
2
defined('BASEPATH') OR exit('No direct script access allowed');
3
4
class Paging extends CI_Controller {
5
    public function __construct()
6
  {
7
		parent::__construct();
8
9
		// load Pagination library

10
		$this->load->library('pagination');
11
		
12
		// load URL helper

13
		$this->load->helper('url');
14
	}
15
	
16
	public function index() 
17
	{
18
		// load db and model

19
		$this->load->database();
20
		$this->load->model('Users');
21
22
		// init params

23
		$params = array();
24
		$limit_per_page = 1;
25
		$start_index = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
26
		$total_records = $this->Users->get_total();
27
28
		if ($total_records > 0) 
29
		{
30
			// get current page records

31
			$params["results"] = $this->Users->get_current_page_records($limit_per_page, $start_index);
32
			
33
			$config['base_url'] = base_url() . 'paging/index';
34
			$config['total_rows'] = $total_records;
35
			$config['per_page'] = $limit_per_page;
36
			$config["uri_segment"] = 3;
37
			
38
			$this->pagination->initialize($config);
39
			
40
			// build paging links

41
			$params["links"] = $this->pagination->create_links();
42
		}
43
		
44
		$this->load->view('user_listing', $params);
45
	}
46
	
47
	public function custom()
48
	{
49
		// load db and model

50
		$this->load->database();
51
		$this->load->model('Users');
52
	
53
		// init params

54
		$params = array();
55
		$limit_per_page = 2;
56
		$page = ($this->uri->segment(3)) ? ($this->uri->segment(3) - 1) : 0;
57
		$total_records = $this->Users->get_total();
58
	
59
		if ($total_records > 0)
60
		{
61
			// get current page records

62
			$params["results"] = $this->Users->get_current_page_records($limit_per_page, $page*$limit_per_page);
63
				
64
			$config['base_url'] = base_url() . 'paging/custom';
65
			$config['total_rows'] = $total_records;
66
			$config['per_page'] = $limit_per_page;
67
			$config["uri_segment"] = 3;
68
			
69
			// custom paging configuration

70
			$config['num_links'] = 2;
71
			$config['use_page_numbers'] = TRUE;
72
			$config['reuse_query_string'] = TRUE;
73
			
74
			$config['full_tag_open'] = '<div class="pagination">';
75
			$config['full_tag_close'] = '</div>';
76
			
77
			$config['first_link'] = 'First Page';
78
			$config['first_tag_open'] = '<span class="firstlink">';
79
			$config['first_tag_close'] = '</span>';
80
			
81
			$config['last_link'] = 'Last Page';
82
			$config['last_tag_open'] = '<span class="lastlink">';
83
			$config['last_tag_close'] = '</span>';
84
			
85
			$config['next_link'] = 'Next Page';
86
			$config['next_tag_open'] = '<span class="nextlink">';
87
			$config['next_tag_close'] = '</span>';
88
89
			$config['prev_link'] = 'Prev Page';
90
			$config['prev_tag_open'] = '<span class="prevlink">';
91
			$config['prev_tag_close'] = '</span>';
92
93
			$config['cur_tag_open'] = '<span class="curlink">';
94
			$config['cur_tag_close'] = '</span>';
95
96
			$config['num_tag_open'] = '<span class="numlink">';
97
			$config['num_tag_close'] = '</span>';
98
			
99
			$this->pagination->initialize($config);
100
				
101
			// build paging links

102
			$params["links"] = $this->pagination->create_links();
103
		}
104
	
105
		$this->load->view('user_listing', $params);
106
	}
107
}

Als Nächstes benötigen wir eine Modelldatei models/Users.php, die Datensätze aus der Benutzertabelle abruft

1
<?php
2
// models/Users.php

3
defined('BASEPATH') OR exit('No direct script access allowed');
4
5
class Users extends CI_Model 
6
{
7
    function __construct() 
8
	{
9
	  parent::__construct();
10
	}
11
12
	public function get_current_page_records($limit, $start) 
13
	{
14
		$this->db->limit($limit, $start);
15
		$query = $this->db->get("users");
16
17
		if ($query->num_rows() > 0) 
18
		{
19
			foreach ($query->result() as $row) 
20
			{
21
				$data[] = $row;
22
			}
23
			
24
			return $data;
25
		}
26
27
		return false;
28
	}
29
	
30
	public function get_total() 
31
	{
32
		return $this->db->count_all("users");
33
	}
34
}

Schließlich erstellen wir eine View-Datei unter views/user_listing.php, die den Benutzereintrag anzeigt.

1
<!-- views/user_listing.php -->
2
<html>
3
    <head>
4
		<title>Paging Example-User Listing</title>
5
	</head>
6
	
7
	<body>
8
		<div class="container">
9
			<h1 id='form_head'>User Listing</h1>
10
11
			<?php if (isset($results)) { ?>
12
				<table border="1" cellpadding="0" cellspacing="0">
13
					<tr>
14
						<th>ID</th>
15
						<th>NAME</th>
16
					</tr>
17
					
18
					<?php foreach ($results as $data) { ?>
19
						<tr>
20
							<td><?php echo $data->uid ?></td>
21
							<td><?php echo $data->uname ?></td>
22
						</tr>
23
					<?php } ?>
24
				</table>
25
			<?php } else { ?>
26
				<div>No user(s) found.</div>
27
			<?php } ?>
28
29
			<?php if (isset($links)) { ?>
30
				<?php echo $links ?>
31
			<?php } ?>
32
		</div>
33
	</body>
34
</html>

Nun, gehen Sie weiter und rufen Sie unsere benutzerdefinierte Seite unter http://your-Code-igniter-site/paging/index und Sie sollten die Benutzerliste zusammen mit der Paginierung sehen! Also, das war's, wir haben es geschafft! Mach dir keine Sorgen, ich werde dich nicht so bald verlassen, da wir jetzt anfangen werden, jeden Teil des Codes zu analysieren.

Wir beginnen mit der Modelldatei models / Users.php, da diese von unseren Controller-Methoden aufgerufen wird. Es gibt zwei wichtige Methoden, get_current_page_records und get_total, die unser Modell implementiert, um die Paginierungslinks zu erstellen.

Lassen Sie uns die Methode get_total durchlaufen. Es wird verwendet, um die Anzahl der Datensätze in der Benutzertabelle zu zählen.

1
public function get_total()
2
{
3
    return $this->db->count_all("users");
4
}

Als nächstes gibt es eine Methode get_current_page_records.

1
public function get_current_page_records($limit, $start)
2
{
3
    $this->db->limit($limit, $start);
4
    $query = $this->db->get("users");
5
 
6
    if ($query->num_rows() > 0)
7
    {
8
        foreach ($query->result() as $row)
9
        {
10
            $data[] = $row;
11
        }
12
        
13
        return $data;
14
    }
15
 
16
    return false;
17
}

Es gibt zwei wichtige Argumente, die Sie in der Methode get_current_page_records beachten sollten. Das erste Argument $limit wird verwendet, um die Anzahl der Datensätze anzugeben, die während der Abfrage zurückgegeben werden. Und das zweite Argument, $start, fungiert als Startindex des Datensatzes.

Wie Sie sehen, können wir mit den Werten von $start und $limit Datensätze nach Seite abrufen. Das ist die Essenz von Paging, und mittlerweile haben wir die wichtigste Methode dieses Artikels implementiert!

Also, das war unser Modell - einfach und elegant!

Bewegen wir uns weiter, schauen wir uns die Controller-Datei an. Mach weiter und schnapp dir den Code der Konstruktormethode.

1
public function __construct()
2
{
3
    parent::__construct();
4
 
5
    // load Pagination library

6
    $this->load->library('pagination');
7
    
8
    // load URL helper

9
    $this->load->helper('url');
10
}

Um die Seitennummerierung in CodeIgniter zu verwenden, müssen Sie zunächst die Paginierungsbibliothek laden. Und wir können es tun, indem wir $this->load->library('pagination')benutzen.

Wir haben auch den URL-Helper geladen, so dass wir globale Hilfsfunktionen verwenden können, die von diesem Helfer bereitgestellt werden.

Jetzt sind wir bereit, durch das Herz unseres Controllers zu gehen - die index-Methode.

1
public function index() 
2
{
3
		// load db and model

4
		$this->load->database();
5
		$this->load->model('Users');
6
7
		// init params

8
		$params = array();
9
		$limit_per_page = 1;
10
		$start_index = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
11
		$total_records = $this->Users->get_total();
12
13
		if ($total_records > 0) 
14
		{
15
			// get current page records

16
			$params["results"] = $this->Users->get_current_page_records($limit_per_page, $start_index);
17
			
18
			$config['base_url'] = base_url() . 'paging/index';
19
			$config['total_rows'] = $total_records;
20
			$config['per_page'] = $limit_per_page;
21
			$config["uri_segment"] = 3;
22
			
23
			$this->pagination->initialize($config);
24
			
25
			// build paging links

26
			$params["links"] = $this->pagination->create_links();
27
		}
28
		
29
		$this->load->view('user_listing', $params);
30
	}

Zunächst stellen wir sicher, dass die Datenbank korrekt geladen ist. Danach laden wir das Users-Modell, damit wir die Modellmethoden verwenden können.

1
$this->load->database();
2
$this->load->model('Users');

Als nächstes initialisieren wir ein paar wichtige Variablen.

1
// init params

2
$params = array();
3
$limit_per_page = 1;
4
$start_index = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
5
$total_records = $this->Users->get_total();

Die Variable $limit_per_page definiert das Limit pro Seite. Natürlich können Sie es so einstellen, wie Sie es wünschen; Zum Beispiel ist es auf 1 gesetzt.

Die Variable $start_index enthält den Startindex des MySQL-Datensatzes. Wenn CodeIgniter die Seitenumbruch-Links erstellt, hängt es standardmäßig den Startindex der Seite als drittes Segment in der URL an. Sie können dieses Standardverhalten ändern, aber das ist etwas, was wir für den letzten Abschnitt dieses Artikels reservieren, wo wir die Anpassungsoptionen besprechen.

Schließlich rufen wir die Methode get_total des Benutzermodells auf, um die Gesamtdatensätze der Benutzertabelle abzurufen, und sie werden der Variablen $total_records zugewiesen.

Als nächstes holen wir die Datensätze der aktuellen Seite mit der Methode get_current_page_records.

1
// get current page records

2
$params["results"] = $this->Users->get_current_page_records($limit_per_page, $start_index);

Bevor wir tatsächlich Paginierungslinks erstellen können, müssen wir die minimale Paging-Konfiguration mit der initialize-Methode der Paging-Bibliothek initialisieren.

1
$config['base_url'] = base_url() . 'paging/index';
2
$config['total_rows'] = $total_records;
3
$config['per_page'] = $limit_per_page;
4
$config["uri_segment"] = 3;
5
6
$this->pagination->initialize($config);

Und das sind die Mindestparameter zum Erstellen der Seitenumbruch-Links.

  • base_url: Die URL, die beim Erstellen von Paginierungslinks verwendet wird
  • total_rows: Gesamtanzahl der Datensätze
  • per_page: Anzahl der Datensätze pro Seite

Schließlich verwenden wir die Methode create_links, um Paginierungslinks zu erstellen.

1
// build paging links

2
$params["links"] = $this->pagination->create_links();

Der Rest ist nur die Formalität, um unsere View user_listing aufzurufen und die Ausgabe zu rendern! Führen Sie die URL http://your-code-igniter-site/paging/index aus, um die Benutzerliste zusammen mit den Paginierungslinks anzuzeigen.

Dies ist ein sehr einfaches und nützliches Paginierungsbeispiel, das Sie Ihren Anforderungen entsprechend erweitern können.

Im nächsten Abschnitt erfahren Sie, wie Sie die Standardpaginierung hinsichtlich Aussehen und Funktionalität anpassen können.

Erkunden Sie die Anpassungsoptionen

In diesem Abschnitt werden wir die verfügbaren Optionen untersuchen, die Sie verwenden könnten, wenn Sie die standardmäßigen Seitenumbruch-Links anpassen möchten.

URI-Segment

Obwohl die CodeIgniter-Paging-Bibliothek den Paging-bezogenen Parameter automatisch über die URL erkennt, können Sie einen benutzerdefinierten Wert definieren, wenn Sie ein anderes URL-Muster verwenden.

1
$config["uri_segment"] = 4;

Anzahl der Ziffernlinks

Mit der Option num_links können Sie die Anzahl der digit-Links festlegen, die vor und nach der aktiven Seitenzahl in den Paginierungslinks angezeigt werden.

1
$config['num_links'] = 2;

Seitenzahl als URI-Segment

Wenn Sie auf das Paging-URI-Segment zugreifen, ist dies standardmäßig ein Startindex. Wenn Sie beispielsweise zehn Datensätze pro Seite haben, beträgt das Paging-URI-Segment 20 für die dritte Seite. Wenn Sie in den Seitenverknüpfungen tatsächliche Seitenzahlen anzeigen möchten, können Sie stattdessen use_page_numbers auf TRUE setzen.

1
$config['use_page_numbers'] = TRUE;

Natürlich müssen Sie sicherstellen, dass Sie den richtigen Startindex basierend auf der Seitenzahl berechnen, die Sie von der URL abrufen.

Abfragestring beibehalten

In den meisten Fällen landen Sie in der Situation, in der Sie Abfragezeichenfolgenparameter beibehalten möchten, die nicht mit der Seitennumerierung zusammenhängen. Sie können die Option reuse_query_string verwenden, um diese Einrichtung zu aktivieren.

1
$config['reuse_query_string'] = TRUE;

Dies waren einige Optionen, mit denen Sie die standardmäßige Seitenumbruchfunktionalität ändern konnten. Als Nächstes betrachten wir einige andere Optionen, mit denen Sie die Art und Weise ändern können, in der Paginierungslinks angezeigt werden.

Wrapper-Tag

Wenn Sie den Paginierungscode mit einem anderen HTML-Tag umbrechen möchten, können Sie dies mit den Optionen full_tag_open und full_tag_close tun.

1
$config['full_tag_open'] = '<div class="pagination">';
2
$config['full_tag_close'] = '</div>';

Es könnte wirklich nützlich sein, wenn Sie ein benutzerdefiniertes Styling auf die Paginierungslinks anwenden möchten.

Erste, Letzte, Nächste und Vorherige

Wenn Sie den Text ändern möchten, der für den ersten, letzten, nächsten und vorherigen Link angezeigt wird, können Sie das auch tun.

1
$config['first_link'] = 'First Page';
2
$config['last_link'] = 'Last Page';
3
$config['next_link'] = 'Next Page';
4
$config['prev_link'] = 'Prev Page';

Wenn Sie diese einzelnen Links in ein beliebiges HTML-Tag einfügen möchten, können Sie dies genauso tun, wie wir es getan haben, um den gesamten Paging-Code zu umbrechen.

1
$config['first_tag_open'] = '<span class="firstlink">';
2
$config['first_tag_close'] = '</span>';
3
 
4
$config['last_tag_open'] = '<span class="lastlink">';
5
$config['last_tag_close'] = '</span>';
6
 
7
$config['next_tag_open'] = '<span class="nextlink">';
8
$config['next_tag_close'] = '</span>';
9
 
10
$config['prev_tag_open'] = '<span class="prevlink">';
11
$config['prev_tag_close'] = '</span>';

Aktiver Link und Nummernlink

Manchmal möchten Sie die aktive Verknüpfung anders formatieren. Sie können dies tun, indem Sie Wrapper-Tags wie unten gezeigt anwenden.

1
$config['cur_tag_open'] = '<span class="curlink">';
2
$config['cur_tag_close'] = '</span>';

Auf die gleiche Weise, wenn Sie digitale Links mit etwas umhüllen wollen:

1
$config['num_tag_open'] = '<span class="numlink">';
2
$config['num_tag_close'] = '</span>';

Und damit endet die Geschichte der Anpassung. In der Tat könnten Sie fortfahren und sich das Anpassungsbeispiel unter http:://your-code-igniter-site/paging/custom ansehen, das bereits in unserer Controller-Datei enthalten ist!

Paging-Konfiguration

Jetzt wissen Sie, welche Konfiguration erforderlich ist, um bei jeder Modellauflistung eine anständige Seitennummerierung einzurichten. Und die meiste Zeit möchten Sie es auf der gesamten Website gleich behalten. Was wirst du tun, um das zu erreichen? Sie könnten versucht sein, den Konfigurationscode zu kopieren und in jede Aktion einzufügen, für die die Paginierungskonfiguration erforderlich ist.

In der Tat gibt es eine bessere Möglichkeit, mit diesem Szenario umzugehen. Sie können eine Paging-Konfigurationsdatei unter application/config/pagination.php erstellen und die Variable $config verwenden, um Ihre Einstellungen zu definieren.

1
<?php
2
$config['per_page'] = 10;
3
$config["uri_segment"] = 3;
4
 
5
$config['full_tag_open'] = '<div class="pagination">';
6
$config['full_tag_close'] = '</div>';
7
    
8
$config['first_link'] = 'First Page';
9
$config['first_tag_open'] = '<span class="firstlink">';
10
$config['first_tag_close'] = '</span>';
11
    
12
$config['last_link'] = 'Last Page';
13
$config['last_tag_open'] = '<span class="lastlink">';
14
$config['last_tag_close'] = '</span>';
15
    
16
$config['next_link'] = 'Next Page';
17
$config['next_tag_open'] = '<span class="nextlink">';
18
$config['next_tag_close'] = '</span>';
19
 
20
$config['prev_link'] = 'Prev Page';
21
$config['prev_tag_open'] = '<span class="prevlink">';
22
$config['prev_tag_close'] = '</span>';
23
 
24
$config['cur_tag_open'] = '<span class="curlink">';
25
$config['cur_tag_close'] = '</span>';
26
 
27
$config['num_tag_open'] = '<span class="numlink">';
28
$config['num_tag_close'] = '</span>';

Auf dieser Grundlage sollte die überarbeitete index -Aktionsmethode wie folgt aussehen:

1
public function index()
2
{
3
    // load db and model

4
    $this->load->database();
5
    $this->load->model('Users');
6
 
7
    // init params

8
    $params = array();
9
    $start_index = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
10
    $total_records = $this->Users->get_total();
11
    
12
    // load config file

13
    $this->config->load('pagination', TRUE);
14
    $settings = $this->config->item('pagination');
15
    $settings['total_rows'] = $this->Users->get_total();
16
    $settings['base_url'] = base_url() . 'paging/config';
17
 
18
    if ($total_records > 0)
19
    {
20
        // get current page records

21
        $params["results"] = $this->Users->get_current_page_records($settings['per_page'], $start_index);
22
        
23
        // use the settings to initialize the library

24
        $this->pagination->initialize($settings);
25
        
26
        // build paging links

27
        $params["links"] = $this->pagination->create_links();
28
    }
29
    
30
    $this->load->view('user_listing', $params);
31
}

Natürlich ändern sich die Variablen total_rows und base_url von Aktion zu Aktion, daher müssen Sie sie explizit in jeder Aktion festlegen.

Um dies zu erreichen, müssen Sie zuerst die Paginierungskonfiguration laden.

1
$this->config->load('pagination', TRUE);
2
$settings = $this->config->item('pagination');

Als Nächstes können Sie die aktionsspezifischen Einstellungen überschreiben.

1
$settings['total_rows'] = $this->Users->get_total();
2
$settings['base_url'] = base_url() . 'paging/config';

Und du bist damit fertig!

Das war also die Geschichte der Paginierungskonfiguration, und damit endet auch dieser Artikel!

Fazit

Heute haben wir die Code-Bibliothek in CodeIgniter durchsucht.

Im ersten Teil dieses Artikels habe ich gezeigt, wie Sie die Paginierungsbibliothek verwenden können, indem Sie ein sehr einfaches, aber nützliches Beispiel bereitstellen.

Danach haben wir die Anpassungsoptionen besprochen, die Ihnen zur Verfügung stehen, während Sie die Seitennummerierung einrichten.

Schließlich haben wir im letzten Abschnitt die Paginierungskonfiguration besprochen.

CodeIgniter ist eine leistungsstarke PHP-Plattform. Egal, ob Sie gerade erst anfangen oder mit der nächsten Version beginnen, vergessen Sie nicht, zu überprüfen, was wir für Sie verfügbar haben.

Ich würde gerne Ihr Feedback in Form von Anfragen und Kommentaren mit dem unten stehenden Feed wissen!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.