За последние 24 часа нас посетили 62772 программиста и 1781 робот. Сейчас ищут 749 программистов ...

не могу сделать постраничную навигацию

Тема в разделе "PHP для новичков", создана пользователем Alex84, 23 фев 2012.

  1. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Имеется код вывода содержимого папки с сортировкой файлов по времени добавления. Нужна к нему постраничная навигация. Пробовал и так и сяк, не получается.

    Код (Text):
    1.  
    2. <?php
    3.  
    4.  
    5. $files = array();
    6. $list = glob('*.*');
    7. foreach($list as $file)
    8.  $files[$file] = filemtime($file);
    9.  
    10. arsort($files);
    11.  
    12. foreach($files as $file => $date)
    13.  echo $file . ' -> ' . date('H:i:s d-m-Y', $date) . '<br/>';
    14.  
    15.  
    16. ?>
    Помогите пожалуйста рещить проблему
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    а покажи как пробовал?
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Выше топик есть уже с Постраничной навигацией, возьмите от туда и переделайте как вам нужно.
    viewtopic.php?f=13&t=7193&start=210
     
  4. artem-Kuzmin

    artem-Kuzmin Активный пользователь

    С нами с:
    16 фев 2012
    Сообщения:
    809
    Симпатии:
    0
    Вам нужно узнать сколько файлов в папке это размер этого массива $list..
    Задать переменную сколко на странице будет, получать активную страницу и при получении а активной читать из массива смещаясь от нулевого элемента на нужное кол-во
     
  5. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Нашёл постраничный вывод

    Код (Text):
    1.  
    2. <?php
    3. /*
    4. *постраничная навигация в скриптах на файлах
    5. *автор: nc_soft
    6. *18.09.07
    7. */
    8.  
    9. /*сгенерируем массив (для гостевой этот массив может быть получен как
    10. file('gb.dat') )
    11. в данном случаи проэмулируем его массивом 1,2,3...100 */
    12. $arr=range(1,100);
    13.  
    14. //всего сообщений
    15. $all=count($arr);
    16.  
    17. //число сообщений на странице
    18. $pnumber=5;
    19.  
    20. echo '<p>всего элементов: '.$all.'</p>';
    21.  
    22. //номер страницы
    23. $page=(isset($_GET['page'])) ? (int)$_GET['page'] : 1;
    24.  
    25. //число страниц
    26. $num_pages=ceil($all/$pnumber);
    27.  
    28. //начальная позиция
    29. $start=$page*$pnumber-$pnumber;
    30.  
    31. //проверка номера страницы
    32. if ($page > $num_pages || $page < 1)
    33. {
    34.     $page=1;
    35.     $start=0;
    36. }
    37.  
    38. if ($all)
    39. {
    40.     //элементы выводятся в обратном порядке!!
    41.     for ($i=$all-$start-1; $i>=$all-$start-$pnumber; $i--)
    42.     {
    43.         if (!isset($arr[$i])) break;
    44.         echo '<p>';
    45.         echo $arr[$i];
    46.         echo '</p>';
    47.     }
    48.  
    49.     //навигация
    50.     echo '<p>';
    51.  
    52.     for($pr = '', $i =1; $i <= $num_pages; $i++)
    53.     {
    54.         echo $pr=(($i == 1 || $i == $num_pages || abs($i-$page) < 2) ? ($i == $page ? " [$i] " : ' <a href="'.$_SERVER['SCRIPT_NAME'].'?page='.$i.'">'.$i.'</a> ') : (($pr == ' ... ' || $pr == '')? '' : ' ... '));
    55.     }
    56.  
    57.     echo '</p>';
    58. }
    59. else
    60. {
    61.     echo '<p>элементов нет</p>';
    62. }
    63.  
    64. ?>
    Сверху этого кода код который выводит содержимое. Вписываю $arr= $list выводит содержимое постранично. А когда вписываю уже $arr= $file который сортирует файлы и ничего не получается.
     
  6. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Как перенести содержимое переменной $file в цикле foreach в другую переменную например $ttt но уже не в цикле foreach?
    Нужно получить содержимое переменной $file но уже не в цикле foreach. Хвост foreach мешает. Но а без этого цикла тоже нельзя.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Что, то вы тут замышляете велосипед))).
     
  8. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Тогда какой код можно использовать вместо foreach?
     
  9. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Здесь нечего ловить.
     
  10. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Код (PHP):
    1. <?php
    2. // Сколько записей выводить на странице
    3. $perPage = 25;
    4. // Путь к папке, которую просматриваем
    5. $dir = 'C:\WINDOWS';
    6. // Переменная, в которую будем складывать html-код
    7. $html = '';
    8. // Получаем список файлов и папок
    9. $files = scandir($dir);
    10. // Оставляем только файлы и определяем время их создания
    11. foreach($files as $num => $file) {
    12.     // Полный путь к проверяемому файлу
    13.     $full = $dir . DIRECTORY_SEPARATOR . $file;
    14.     // Проверяемый файл является файлов (не папкой)?
    15.     if(is_file($full)) {
    16.         // Тогда определим его дату создания и добавим в массив
    17.         $files[$file] = filemtime($full);
    18.     }
    19.     // Уберём более не нужную информацию
    20.     unset($files[$num]);
    21. }
    22. // Отсортируем список по дате
    23. asort($files);
    24. // Определим кол-во файлов в папке
    25. $total = count($files);
    26. // Рассчитаем кол-во страниц
    27. $pages = (int) ceil($total / $perPage);
    28. // Если в папке есть хотя бы один файл, то работаем
    29. if($total > 0) {
    30.     // Получим номер запрошенной страницы
    31.     $page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
    32.     // Проверим, что запрошенная страница существует
    33.     if($page > $pages or $page < 1)
    34.         exit('Нет такой страницы');
    35.     // Посчитаем, с какого файла начинать вывод
    36.     $start = ($page - 1) * $perPage;
    37.     // Выберем файлы, которые должны быть отображены на этой странице
    38.     $out = array_slice($files, $start, $perPage);
    39.     // Подготовим html-код для выводимых файлов
    40.     foreach($out as $file => $date)
    41.         $html .= '<div>' . $file . '   [' . date('d.m.Y H:i', ((int) $date)) . ']</div>';
    42. } else
    43.     $html .= 'Нет файлов для отображения на этой странице';
    44. // Если страниц больше, чем 1
    45. if($pages > 1) {
    46.     // То выведем ссылки на них
    47.     $html .= '<div>Страницы:  ';
    48.     for($i = 1; $i <= $pages; ++$i)
    49.         $html .= ' [url="?page=' . $i . '"]' . $i . '[/url]';
    50.     $html .= '</div>';
    51. }
    52. // Отобразим подготовленный html
    53. echo($html);
    54. ?>
     
  11. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    sobachnik, Спасибо большое, а как сделать так чтобы новые файлы появлялись не вконце списка?
     
  12. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Заменить asort на arsort.
    Вообще у PHP есть мануал, в котором можно найти нужную функцию: http://www.php.ru/manual/index.html
     
  13. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Спасибо!