@MrGruffi

Пагинатор. В чем может быть проблема?

Файлы именуются порядковыми номерами, например, 0, 2, 100 и т.д.
//Установка значений переменных
$limit = 2; //Количество записей на страницу
$filecount = /* */ //Число файлов в каталоге
$start = ($_GET['id'] * $limit; //Стартовая страница 
$end = $start + $limit; //Конечная страница
$pages = ceil($filecount / $limit); //Количество отображаемых страниц, округленных в большую сторону
for ($i = $start; $i <= $end-1; $ i++)
{
  if (!is_file($i)) { continue; } //Используем для пропуска, если файла нет (напр.: 0,1,4,5)
 echo $i,"<br>"; //Знаю, плохо, но для наглядности
}


Это что касается вывода самих записей. Теперь пагинатор:
for($i = 1; $i <= $pages; $i++)
{
  echo $i; //Вывод *ссылок* конечно же, но опять же, для наглядности
}


Итак. В чем проблема?

А в том, что при удалении записи на той странице, которую я удалил, остается на одну запись меньше.
Например, имеем такую вот структуру (заголовки берутся из файлов и на самом деле представляют из себя файлы с 1 до 5)
Запись 1
Запись 2
Запись 3
Запись 4
Запись 5


Если разделить это согласно нашему лимиту, т.е по 2 записи на страницу, то выйдет такая картина:
Запись 1   Запись 3   Запись 5
Запись 2   Запись 4


Все пока хорошо.
Но если мы удалим "Запись 2", например, то получится вот такая картина:
Запись 1   Запись 3   Запись 5
           Запись 4


Т.е удаление произошло, а вот смещение - нет.
Я ничего умнее не придумал, как изменить условие
if (!is_file($i)) { continue; }
на
if (!is_file($i)) { $end++; continue; }

Это стало подвигать записи вверх, однако возникла новая проблема.
А именно, что после удаления и смещения, последняя запись первой страницы оказывалась первой записью второй страницы.

Удалив все три записи на первой странице (тем самым сместится отображение на три позиции вверх, и перейдя на вторую страницу я лицезрел ту же картину, что и на первой странице.

Ох... постарался понятно пояснить, надеюсь, поймете.
  • Вопрос задан
  • 2740 просмотров
Решения вопроса 1
morozovdenis
@morozovdenis
$files = ... // получить список файлов в массив
$files = array("fiel1.txt", "fiel3.txt", "file4.txt"); // например 

$current_page = 1; //например
$limit = 2;

for ($i = $current_page * $limit; $i < count($files) && $i < ($current_page + 1) * $limit; $i++)
{
    echo $files[$i];
}

выведет:
file4.txt

главный замысел в том что мы оперируем в моём примере с со списком файлов и их индексами в этом списке
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы