ПРОСМОТР файлов в директории с нумерацией страниц - php

Я хочу отображать файлы в моем каталоге в браузере. Я знаю, что это возможно с помощью @opendir и readdir .. Но я хочу ограничить количество файлов в списке определенным числом и отобразить следующий с помощью разбиения на страницы.


person Alfred    schedule 24.02.2011    source источник
comment
Пожалуйста, проголосуйте, если вы найдете вопрос полезным .. :)   -  person Alfred    schedule 24.02.2011


Ответы (6)


Вы можете использовать scandir для чтения всего содержимого каталога в массив . Затем выведите содержимое массива на основе значения разбиения на страницы.

$offset = 10; //get this as input from the user, probably as a GET from a link
$quantity = 10; //number of items to display
$filelist = scandir('/mydir');

//get subset of file array
$selectedFiles = array_slice($filelist, $offset-1, $quantity);

//output appropriate items
foreach($selectedFiles as $file)
{
    echo '<div class="file">'.$file.'</div>'; 
}
person Surreal Dreams    schedule 24.02.2011
comment
Я попробовал ‹?php $offset = 10 //получить это как ввод от пользователя, вероятно, как GET из ссылки $quantity = 10; //количество отображаемых элементов $filelist = scandir('../'); //получить подмножество файлового массива $selectedFiles = array_slice($filelist, $offset-1, $quantity); //выводим соответствующие элементы foreach($selectedFiles as $file) { echo '‹div class=file›$file‹/div›\n'; } ?› .. но не работает - person Alfred; 24.02.2011
comment
Я рад, что смог помочь. Что я напутал? :) - person Surreal Dreams; 24.02.2011
comment
magento. stackexchange.com/questions/316910/ - person Kirti Nariya; 10.07.2020

Перекрестная публикация примера (также в этом вопросе) --

DirectoryIterator и LimitIterator — мои новые лучшие друзья, хотя glob, кажется, легче выполняет предварительную фильтрацию. Вы также можете написать собственный FilterIterator. Думаю, нужен PHP > 5.1.

Без предварительного фильтра:

$dir_iterator = new DirectoryIterator($dir);
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);

Глобальный предварительный фильтр:

$dir_glob = $dir . '/*.{jpg,gif,png}';

$dir_iterator = new ArrayObject(glob($dir_glob, GLOB_BRACE));
$dir_iterator = $dir_iterator->getIterator();
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);

Тогда делайте свое дело:

foreach ($paginated as $file) { ... }

Обратите внимание, что в примере DirectoryIterator $file будет экземпляром SplFileInfo< /a>, тогда как пример glob — это просто путь к диску.

person drzaus    schedule 31.01.2013

Зависит от того, как вы хотите это сделать. Существует множество библиотек разбиения на страницы javascript/jquery. Просто погуглите «Разбиение на страницы Javascript».

Если javascript не подходит или вы предпочитаете просто использовать php, то это должно быть относительно просто.

Используйте opendir/readdir, чтобы получить список всех файлов. Настройте столько, сколько вы хотите для отображения. Разделите остаток на это число, чтобы получить количество страниц. Затем возьмите срез из массива от (страница - 1) * (число в список) до (число в список). Это файлы, которые вы будете показывать. Передайте номер страницы через get/post. Если оно слишком высокое, используйте последнюю страницу, слишком низкое или нечисловое — используйте первую страницу.

person Explosion Pills    schedule 24.02.2011
comment
Я хочу решение на чистом php. Не Java, иначе меня здесь не будет.. :) - person Alfred; 24.02.2011
comment
magento. stackexchange.com/questions/316910/ - person Kirti Nariya; 10.07.2020

Для разбиения на страницы вы можете использовать Zend_Paginator.
Как только вы получите список файлов в каталоге, вы только настраиваете пагинатор, а он позаботится обо всем остальном.

person mike    schedule 24.02.2011

Может быть, что-то вроде этого?

$page = 1;
$resultsPerPage = 10;

$files = array();

while(($obj = readdir($dir))) {
    $files[] = $obj;
}

$limit = $page * $resultsPerPage;
($limit > count($files)) ? $limit = count($files) : $limit = $limit;
for($i = ($limit - $resultsPerPage); $i < $limit; $i++) {
   echo($files[$i];
}

А затем ваши навигационные кнопки изменят номер страницы.

person Dai    schedule 24.02.2011

вам следует попробовать разбиение на страницы YUI 2 и, возможно, если вы хотите отобразить файл в таблице, используйте таблицу данных, есть очень полезные компоненты из пользовательского интерфейса yahoo

Привет

person Alejandro    schedule 25.02.2011