Я хочу отображать файлы в моем каталоге в браузере. Я знаю, что это возможно с помощью @opendir
и readdir
. Но я хочу ограничить количество файлов в списке конкретным номером и отобразить следующий, используя разбиение на страницы.
Вы можете использовать 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);
Glob prefilter:
$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
, тогда как пример glob
– это только путь к диску.
Зависит от того, как вы хотите это сделать. Там есть тонна javascript / jquery pagination library .. просто google "Javascript pagination."
Если javascript не является вариантом или если вы предпочитаете просто использовать php, тогда он должен быть относительно простым.
Используйте opendir / readdir, чтобы получить список всех файлов. Настройте столько, сколько хотите для отображения. Разделите остаток на это число, чтобы получить количество страниц. Затем возьмите срез из массива (страница – 1) * (число в список) до (число до списка). Это файлы, которые вы покажете. Пропустите номер страницы через get / post. Если он слишком высок, используйте последнюю страницу, слишком низкую или нечистовую, используйте первую страницу.
Для разбивки на страницы вы можете использовать Zend_Paginator .
После того, как вы получите список файлов в каталоге, вы настраиваете только 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 и, возможно, если вы хотите отобразить файл в таблице, используйте данные datatable, есть очень полезные компоненты из пользовательского интерфейса yahoo
Привет