Я хочу отображать файлы в моем каталоге в браузере. Я знаю, что это возможно с помощью @opendir
и readdir
.. Но я хочу ограничить количество файлов в списке определенным числом и отобразить следующий с помощью разбиения на страницы.
ПРОСМОТР файлов в директории с нумерацией страниц - php
Ответы (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>';
}
Перекрестная публикация примера (также в этом вопросе) --
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
— это просто путь к диску.
Зависит от того, как вы хотите это сделать. Существует множество библиотек разбиения на страницы javascript/jquery. Просто погуглите «Разбиение на страницы Javascript».
Если javascript не подходит или вы предпочитаете просто использовать php, то это должно быть относительно просто.
Используйте opendir/readdir, чтобы получить список всех файлов. Настройте столько, сколько вы хотите для отображения. Разделите остаток на это число, чтобы получить количество страниц. Затем возьмите срез из массива от (страница - 1) * (число в список) до (число в список). Это файлы, которые вы будете показывать. Передайте номер страницы через get/post. Если оно слишком высокое, используйте последнюю страницу, слишком низкое или нечисловое — используйте первую страницу.
Для разбиения на страницы вы можете использовать Zend_Paginator.
Как только вы получите список файлов в каталоге, вы только настраиваете пагинатор, а он позаботится обо всем остальном.
Может быть, что-то вроде этого?
$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];
}
А затем ваши навигационные кнопки изменят номер страницы.
вам следует попробовать разбиение на страницы YUI 2 и, возможно, если вы хотите отобразить файл в таблице, используйте таблицу данных, есть очень полезные компоненты из пользовательского интерфейса yahoo
Привет