Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как разбить текстовый файл на страницы?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Как сделать, чтобы содержимое текстового файла (enter.txt) разбивалось на страницы (по 10 новостей)?
Irina88
Отправлено: 24 Ноября, 2021 - 19:58:57
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Как сделать, чтобы содержимое текстового файла (enter.txt) разбивалось на страницы (по 10 новостей)?

Ну подсчитать количество строк можно с помощью

echo sizeof (file ('enter.txt'));
Вывести первые 10 новостей через `

$first = array_slice($lines, 0, 10);`

$news = implode('', $first);
А дальше как?
 
 Top
Vladimir Kheifets
Отправлено: 25 Ноября, 2021 - 19:04:06
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Как сделать, чтобы содержимое текстового файла (enter.txt) разбивалось на страницы (по 10 новостей)?


Добрый день, Ирина!
Про страницы по 10 новостей не понятно.
Может быть определить количество строк в файле, которые должны вводится на одной странице, например, 10 строк.
Далее важно учитывать, что файлы могут большими и лучше их читать не целиком,
а читать частями постранично начиная с любой строки.
Допустим, есть файл News.txt
Спойлер (Отобразить)
Необходимо определить количество строк в файле из исходя из того,
что на одной странице должно быть 10 строк, рассчитать количество страниц.
Для реализации этой задачи применён PHP класс SplFileObject.
Спойлер (Отобразить)
так выводится первая страница
Спойлер (Отобразить)

Удачи!

(Отредактировано автором: 25 Ноября, 2021 - 19:05:46)

 
 Top
Irina88
Отправлено: 25 Ноября, 2021 - 19:59:08
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Vladimir Kheifets, спасибо. А как вынести список страниц вниз страницы?

Спойлер (Отобразить)


Что то не получается...
 
 Top
Vladimir Kheifets
Отправлено: 26 Ноября, 2021 - 06:39:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Vladimir Kheifets, спасибо. А как вынести список страниц вниз страницы?

Спойлер (Отобразить)


Что то не получается...


Просто так...
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 26 Ноября, 2021 - 06:40:57)

 
 Top
Irina88
Отправлено: 26 Ноября, 2021 - 20:08:26
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Вот что у меня получилось:


Вопрос: как сделать чтобы со страницы ?page='2' была ссылка на <a href='?page=3'>&gt;&gt;&gt;</a> ;
c ?page='3' на ?page='4' и т.д.?
 
 Top
Vladimir Kheifets
Отправлено: 26 Ноября, 2021 - 21:52:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Вот что у меня получилось:

Вопрос: как сделать чтобы со страницы ?page='2' была ссылка на <a href='?page=3'>&gt;&gt;&gt;</a> ;
c ?page='3' на ?page='4' и т.д.?

чтобы понять откуда это получилось нужно увидеть Ваш код
Про ссылки
Если Вы хотите чтобы на странице была ссылка "следующая",
то нужно вычилить номер следушей стрницы $_GET['page']+1
и если значение не превышает максимальное количество страниц вывести эту ссылку.
Аналогично для ссылки "назад" $_GET['page']-1...
 
 Top
Vladimir Kheifets
Отправлено: 27 Ноября, 2021 - 07:31:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Вопрос: как сделать чтобы со страницы ?page='2' была ссылка на <a href='?page=3'>&gt;&gt;&gt;</a> ;
c ?page='3' на ?page='4' и т.д.?

PHP:
скопировать код в буфер обмена
  1. <?
  2. function ReadLinesFromFile($StartLine, $nLines, $file){
  3.         $EndLine=$StartLine+$nLines;
  4.         $line = $StartLine;
  5.         $news=[];
  6.         while ($line < $EndLine ) {
  7.                 $file->seek($line-1);
  8.                 $news[]=$file->current();
  9.                 $line++;
  10.         }
  11.         return $news;
  12. }
  13. echo <<<HTML
  14. <html>
  15. <head>
  16.         <title>News</title>
  17. </head>
  18. <body>
  19. HTML;
  20. $file = new SplFileObject('News.txt');
  21. $file->seek(PHP_INT_MAX);
  22. $linesTotal = $file->key();
  23. $LineInPage=7;
  24. $Pages = ceil(($linesTotal-1)/$LineInPage);
  25. $page=isset($_GET['page'])?$_GET['page']:1;
  26. /*
  27. $aPage=1;
  28. while($aPage<=$Pages)
  29. {
  30.         if($aPage==$page)
  31.                 echo " $aPage ";
  32.         else
  33.                 echo " <a href='?page=$aPage' >$aPage</a> ";
  34.         $aPage++;
  35. }
  36. echo "<hr>";
  37. */
  38. $StartLine=($page-1)*$LineInPage+1;
  39. $news = ReadLinesFromFile($StartLine, $LineInPage, $file);
  40. foreach ((Array)$news as $line) echo "$line<br>";
  41. echo "<hr>";
  42. $aPage=1;
  43. while($aPage<=$Pages)
  44. {
  45.         if($aPage==$page)
  46.                 echo " $aPage ";
  47.         else
  48.                 echo " <a href='?page=$aPage' >$aPage</a> ";
  49.         $aPage++;
  50. }
  51. echo "<hr>";
  52. $previewPage=$page-1;
  53. $nextPage=$page+1;
  54. if($previewPage>0)
  55.         echo "<a href='?page=$previewPage'><<<</a> ";
  56. echo " <select></select> ";
  57. if($nextPage<=$Pages)
  58.         echo " <a href='?page=$nextPage'>>>></a>";
  59. echo <<<HTML
  60. </body>
  61. <script>
  62. page = '$page';
  63. Pages = '$Pages';
  64. select = document.getElementsByTagName('select')[0];
  65. if(Pages>1)
  66. {
  67.         optArr=Array.from({length: Pages}, (v, k) => k+1);
  68.         optArr.splice(page-1, 1);
  69.         for(i in optArr)
  70.         {
  71.                 opt = document.createElement('option');
  72.         opt.innerHTML = optArr[i];
  73.         select.appendChild(opt);
  74.         }
  75.         select.addEventListener("change", function (e){
  76.                 window.location.href="?page="+e.target.value;
  77.         });
  78. }
  79. else
  80.         select.style.display="none";
  81. </script>
  82. </html>
  83. HTML;
  84. ?>

(Отредактировано автором: 27 Ноября, 2021 - 07:32:34)

 
 Top
Irina88
Отправлено: 27 Ноября, 2021 - 19:44:40
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Вот код:

Спойлер (Отобразить)


Если page>2 то <form> дублируется...
(Добавление)
А в яваскрипте я вообще "дуб дубом". Там все работает. Но не знаю как форму (<form>) с полем ввода для выбора страницы впихнуть.
 
 Top
Vladimir Kheifets
Отправлено: 27 Ноября, 2021 - 20:16:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Вот код:

Спойлер (Отобразить)


Если page>2 то <form> дублируется...
(Добавление)
А в яваскрипте я вообще "дуб дубом". Там все работает. Но не знаю как форму (<form>) с полем ввода для выбора страницы впихнуть.


Это нужно убрать:

Обратите внимание, что я заменил input на select, а option допоняются в зависимости от выбранной страницы .
Например, если страниц всего 3 и Вы находитесь на 1 стр., то можете выбрать 2 и 3, а если на 2 стр., то можете выбрать 1 и 3.
Если Вы принципиально хотите использовать input, то Вам придётся в JS проверять введённое значение и если введён номер актуальной страницы выдавать сообщение и не перезагружать ту же страницу повторно.
Посмотрите внимательно мой код с select. Всё работает без fofm
Удачи!

(Отредактировано автором: 27 Ноября, 2021 - 20:17:34)

 
 Top
Vladimir Kheifets
Отправлено: 28 Ноября, 2021 - 08:27:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Вот код:

Спойлер (Отобразить)


Если page>2 то <form> дублируется...
(Добавление)
А в яваскрипте я вообще "дуб дубом". Там все работает. Но не знаю как форму (<form>) с полем ввода для выбора страницы впихнуть.


<form> дублируется... из-за того, что <form>...<form> внутри while - это ошибка.
Вот два варианта кода:
1. С <input> без кнопки:
Спойлер (Отобразить)

2. С <input> с кнопкой:
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 30 Ноября, 2021 - 07:21:30)

 
 Top
Irina88
Отправлено: 28 Ноября, 2021 - 19:21:59
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Из 22х записей отображается только 20(

Вот код:

Спойлер (Отобразить)


Вот скрин:

 
 Top
Vladimir Kheifets
Отправлено: 29 Ноября, 2021 - 06:45:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Из 22х записей отображается только 20(
Вот скрин:

Покажите, пожалуйста, текстовой файл

(Отредактировано автором: 29 Ноября, 2021 - 06:48:47)

 
 Top
Vladimir Kheifets
Отправлено: 29 Ноября, 2021 - 11:06:24
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Irina88 пишет:
Из 22х записей отображается только 20(

Сделал файл
Спойлер (Отобразить)
проверил и изменил код
Спойлер (Отобразить)
Удачи!
 
 Top
Irina88
Отправлено: 29 Ноября, 2021 - 19:14:11
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




Vladimir Kheifets, спасибо.

А сколько сообщений надо написать в форум чтобы можно было нажать "спасибо" пользователю?
 
 Top
Irina88
Отправлено: 11 Августа, 2022 - 19:22:41
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Март 2018  
Откуда: Kyiv, Ukraine


Помог: 0 раз(а)




В связи с обновлением версии PHP на сервере ho.ua, перестал работать данный скрипт. Недовольство, огорчение Помогите адаптировать его под PHP 8.0.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB