Когда вы выполняете поиск в Google, результаты отображаются в виде списка, и у вас есть возможность переходить по страницам результатов. Это пример нумерации страниц. Разбиение на страницы просто означает, что пользователь имеет возможность просматривать страницы результатов, каждый раз просматривая их подмножество, вместо того, чтобы бесконечно прокручивать экран вниз.
Пагинация особенно полезна, когда вы кодируете приложение, которое взаимодействует с базой данных. Большой набор данных может иметь сотни возможных результатов для одного запроса, а разбиение на страницы создает более приятный пользовательский интерфейс.
В этом руководстве я буду использовать библиотеку разбивки на страницы CodeIgniter, чтобы показать вам, как вы можете создать список результатов с разбивкой по страницам из базы данных MySQL. Попутно вы также узнаете, как исправить проблему с ссылками на страницы, которые может создать библиотека.
Я предполагаю, что у вас есть готовая установка CodeIgniter 2.1. Для базы данных я буду использовать официальный пример базы данных, предоставленной MySQL, который доступен для загрузки в виде файла SQL.
Модель
Мы начнем с создания модели в приложении, которая должна выполнить две вещи: обеспечить подсчет всех записей в таблице » Country
Сохраните следующее как models/countries.php
class Countries extends CI_Model
{
public function __construct() {
parent::__construct();
}
public function record_count() {
return $this->db->count_all("Country");
}
public function fetch_countries($limit, $start) {
$this->db->limit($limit, $start);
$query = $this->db->get("Country");
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
$data[] = $row;
}
return $data;
}
return false;
}
}
Класс базы данных CodeIgniter с Active Record используется для подсчета и извлечения данных из базы данных.
Метод record_count()
$config
$config["total_rows"]
Библиотека будет использовать это вместе с другими опциями, которые мы установили, чтобы решить, как разделить результаты на страницы.
Метод fetch_countries()
Country
У этого метода есть два аргумента: $limit
$start
Они будут переданы в запрос, чтобы определить, сколько записей нужно вернуть и с какой записи начинать. Аргументы будут установлены в контроллере.
Контроллер
Далее нам нужно создать метод в стандартном контроллере Welcome
controllers/welcome.php
example1()
Но перед тем, как мы это сделаем, нам нужно загрузить модель, а также библиотеку разбиения на страницы в конструкторе класса.
<?php
class Welcome extends CI_Controller
{
public function __construct() {
parent:: __construct();
$this->load->helper("url");
$this->load->model("Countries");
$this->load->library("pagination");
}
public function example1() {
$config = array();
$config["base_url"] = base_url() . "welcome/example1";
$config["total_rows"] = $this->Countries->record_count();
$config["per_page"] = 20;
$config["uri_segment"] = 3;
$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$data["results"] = $this->Countries->
fetch_countries($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this->load->view("example1", $data);
}
}
Метод example1()
Опции помещаются в массив, который затем передается в качестве аргумента в метод инициализации библиотеки. Библиотека требует, чтобы параметры передавали базовый URL, общее количество строк, сколько строк на странице мы хотим, и какая часть URL будет содержать раздел страницы, который использует пользователь.
Помните те параметры, которые были заданы в запросе для списка стран ( $limit
$start
Они устанавливаются далее в вызове метода fetch_countries()
Переменная $page
Наконец, метод create_links()
Вид
Для файла представления мы можем скопировать views/welcome_message.php
example1.php
<body>
<div id="container">
<h1>Countries</h1>
<div id="body">
<?php
foreach($results as $data) {
echo $data->Name . " - " . $data->Continent . "<br>";
}
?>
<p><?php echo $links; ?></p>
</div>
<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
</div>
</body>
Так что теперь, когда вы посещаете http://yourdomain/welcome/example1
Дополнительные параметры конфигурации
Перейдите по ссылкам на нумерацию страниц, и вы должны просмотреть 239 записей в таблице « Country
Но вы можете заметить, что количество связанных цифр меняется. Сначала были цифры, а потом пять!
Существует пункт конфигурации, который может помочь решить эту проблему. Вероятно, на данном этапе полезно помнить, что мы извлекаем записи из базы данных, и CodeIgniter должен пересчитывать цифровые ссылки при доступе к каждой странице. Первое, что мы можем сделать, это отключить первую / последнюю предыдущую / следующую ссылку, чтобы привести в порядок навигацию. Это не останавливает расширение цифр, но наводит порядок.
Второе, что мы можем сделать, это вычислить количество страниц, разделив общее количество строк на количество строк, необходимое для каждой страницы, округлить результат и передать его параметру $config["num_links"]
Вот как выглядит метод example1()
public function example1() {
$config["base_url"] = base_url() . "welcome/example1";
$config["total_rows"] = $this->Countries->record_count();
$config["per_page"] = 20;
$config["uri_segment"] = 3;
$choice = $config["total_rows"] / $config["per_page"];
$config["num_links"] = round($choice);
$this->pagination->initialize($config);
$page = ($this->uri->segment(3))? $this->uri->segment(3) : 0;
$data["results"] = $this->Countries
->fetch_countries($config["per_page"], $page);
$data["links"] = $this->pagination->create_links();
$this->load->view("example1", $data);
}
Это улучшит ссылки сейчас.
Резюме
Теперь вы знаете, как использовать наиболее полезные параметры конфигурации для библиотеки разбивки на страницы CodeIgniter, а также можете исправить способ отображения ссылок на страницы, чтобы обеспечить согласованное взаимодействие с вашими пользователями. Руководство пользователя поставляется с каждой загрузкой CodeIgniter, поэтому обязательно проверьте другие параметры конфигурации библиотеки. Он содержит параметры для стилизации ссылок на страницы и изменения способа отображения ссылок на странице.
Изображение через Алексис Пуэнтес / Shutterstock
И если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как Jump Start PHP .
Комментарии к этой статье закрыты. Есть вопрос по PHP фреймворкам? Почему бы не спросить об этом на наших форумах ?