#php #sql #wordpress #pagination
#php #sql #wordpress #разбивка на страницы
Вопрос:
Привет из sql, я беру массив и создаю список продуктов. В настоящее время он отображает для меня список, но я хочу ограничить количество отображаемых элементов и использовать разбивку на страницы. Я создал код, но при нажатии далее не отображаются следующие элементы. Изменяет ссылку на domain.com/name/2 но элементы все те же. Когда я нахожусь на domain.com/name/2 нажатие кнопки далее не приводит к domain.com/name/3 и остается на domain.com/name/2 , дополнительно на domain.com/name/2 предыдущая кнопка не отображается. Моя ссылка на страницу domain.com/name / может быть, здесь проблема? Я буду благодарен за вашу помощь
<?php
$page = $_GET['page'];
if (empty($page) || is_numeric($page) == FALSE) {
$page = 1;
}
else {
$page = $_GET['page'];
}
$items = 2;
$offset = ($page * $items) - $items;
global $wpdb;
$table = "items";
$names = $wpdb->get_col("SELECT Name FROM $table LIMIT $items OFFSET $offset");
$numbers = $wpdb->get_col("SELECT Number_it FROM $table LIMIT $items OFFSET $offset");
foreach (array_combine($numbers, $names) as $number => $name )
{
echo '<p>'.$name.' <a href="name.php?product='.$number.'">'.$number.'</a></p>';
};
?>
<a href="domain.com/name/?page=<?php echo $page 1; ?>">Next Page</a>
<?php if ($page != 1) { ?>
<a href="domain.com/name/?page=<?php echo $page - 1; ?>">Previous Page</a>
<?php } ?>
Комментарии:
1. вы уверены, что это
$_GET['page']
то, что вы думаете,/2
вместо?page=2
, вероятно, требует некоторой работы с Htaccess. Например, ваши ссылки расположены таким образом<a href="domain.com/name/?page=<?php echo $page 1; ?>">
— Так что же этоdomain.com/name/2
илиdomain.com/name/?page=2
2. у вас есть какие-либо доказательства?
3. В вашем коде также много «незначительных» ошибок, подобных этой
<?php echo $page 1; ?>
на последней странице у вас будет одна дополнительная кнопка «далее», которая указывает на страницу, которая не существует. Эту вещь вверху$page = $_GET['page']; if (empty($page) || is_numeric($page) == FALSE) { ... }
можно было бы переписать, чтобы она была более краткой.$page = (empty($_GET['page']) || !is_numeric($_GET['page'])) ? 1 : $_GET['page'];
поскольку он у вас есть, вы все еще открыты для проблем с неопределенным индексом. Это<?php if ($page != 1) { ?>
бессмысленно, так какempty($page)
будет перехватывать0
значения и изменять их на1
. etc….4. @ArtisticPhoenix ?page= 2 на моем сайте автоматически изменен на / 2, но мне интересно, не является ли сбой кода результатом неправильного чтения ссылки. Но как вы проверяете какие-либо идеи?
5. Эти 2 SQL-запроса объединяют данные
array_combine
, но между ними нет физической связи, поэтому вы полагаетесь исключительно на порядок, в котором они хранятся. Что, вероятно, действительно плохая идея… Поскольку у вас действительно нет грантополучателя, то эти 2 записи связаны. Не говоря уже о том, чтоarray_combine
удалит все дубликаты в первом массиве и выдаст неустранимую ошибку, если два массива не имеют одинакового размера и т.д… Сейчас это моя работа, но по мере старения вашей базы данных у вас, вероятно, возникнут проблемы. Одна неуместная строка там, и вы будете комбинировать то, что не хотите, без очевидных ошибок.