Как создать серию веб-страниц

Под сериями страниц я имею в виду наличие страниц, к которым можно перейти с помощью предыдущий, следующий, или же 1,2,3, ... Контент представляет собой список из 10 песен, и чтобы увидеть больше, пользователь может просто нажать следующий. Я планирую использовать PHP и MySQL. Мне нужно ваше мнение о том, как это сделать (не явно просить код, но личные мнения, которые могут быть дополнены кодом). Спасибо!

-4

Решение

MySQL предлагает LIMIT X,Y Ключевое слово, которое делает большую часть этой работы уже. X всегда стартовая позиция и Y количество строк для выбора.

Если у вас есть, например, форма поиска, а пользователь ищет песню жанра поп, Вы могли бы сделать что-то вроде SELECT name, artist, ... FROM songs WHERE genre = 'pop' LIMIT 0,10, Это вернет 10 песен результата поиска, начиная с позиции 0. Это будет ваша страница 1. Для страницы 2 вы просто запускаете тот же запрос снова, но с LIMIT 10,10,

Используя это, вы можете создать свой предыдущий а также следующий кнопки:

HTML

<a href="search.php?query=pop&page=1">Previous</a>
<a href="search.php?query=pop&page=3">Next</a>

PHP

$page = isset($_GET['page']) ? intval($_GET['page'] : 1;
$start = ($page - 1) * 10;
$query = "SELECT name, artist, ... FROM songs WHERE genre = 'pop' LIMIT $start,10";
1

Другие решения

Техника называется пагинацией. Вот вспомогательный класс PHP, который может помочь вам с разбиением на страницы:

<?php

// This is a helper class to make paginating
// records easy.
class Pagination {

public $current_page;
public $per_page;
public $total_count;

public function __construct($page=1, $per_page=20, $total_count=0){
$this->current_page = (int)$page;
$this->per_page = (int)$per_page;
$this->total_count = (int)$total_count;
}

public function offset() {
// Assuming 20 items per page:
// page 1 has an offset of 0    (1-1) * 20
// page 2 has an offset of 20   (2-1) * 20
//   in other words, page 2 starts with item 21
return ($this->current_page - 1) * $this->per_page;
}

public function total_pages() {
return ceil($this->total_count/$this->per_page);
}

public function previous_page() {
return $this->current_page - 1;
}

public function next_page() {
return $this->current_page + 1;
}

public function has_previous_page() {
return $this->previous_page() >= 1 ? true : false;
}

public function has_next_page() {
return $this->next_page() <= $this->total_pages() ? true : false;
}}

?>

ИСПОЛЬЗОВАНИЕ В СТРОИТЕЛЬСТВЕ SQL

$total_count = $db->get_var( "SELECT COUNT(*) FROM songs" );
$per_page = 10;
$current_page = $page;
$pagination = new Pagination($current_page, $per_page, $total_count);
$all = $db->get_results("SELECT * FROM songs ORDER BY id DESC LIMIT {$per_page} OFFSET {$pagination->offset()}");
1

По вопросам рекламы [email protected]