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
Форумы портала PHP.SU :: Версия для печати :: Как разбить текстовый файл на страницы?
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Как разбить текстовый файл на страницы?

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

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

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

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

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

$news = implode('', $first);
А дальше как?
2. Vladimir Kheifets - 25 Ноября, 2021 - 19:04:06 - перейти к сообщению
Irina88 пишет:
Как сделать, чтобы содержимое текстового файла (enter.txt) разбивалось на страницы (по 10 новостей)?


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

Удачи!
3. Irina88 - 25 Ноября, 2021 - 19:59:08 - перейти к сообщению
Vladimir Kheifets, спасибо. А как вынести список страниц вниз страницы?

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


Что то не получается...
4. Vladimir Kheifets - 26 Ноября, 2021 - 06:39:39 - перейти к сообщению
Irina88 пишет:
Vladimir Kheifets, спасибо. А как вынести список страниц вниз страницы?

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


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


Просто так...
Спойлер (Отобразить)
Удачи!
5. Irina88 - 26 Ноября, 2021 - 20:08:26 - перейти к сообщению
Вот что у меня получилось:


Вопрос: как сделать чтобы со страницы ?page='2' была ссылка на <a href='?page=3'>&gt;&gt;&gt;</a> ;
c ?page='3' на ?page='4' и т.д.?
6. Vladimir Kheifets - 26 Ноября, 2021 - 21:52:20 - перейти к сообщению
Irina88 пишет:
Вот что у меня получилось:

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

чтобы понять откуда это получилось нужно увидеть Ваш код
Про ссылки
Если Вы хотите чтобы на странице была ссылка "следующая",
то нужно вычилить номер следушей стрницы $_GET['page']+1
и если значение не превышает максимальное количество страниц вывести эту ссылку.
Аналогично для ссылки "назад" $_GET['page']-1...
7. Vladimir Kheifets - 27 Ноября, 2021 - 07:31: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. ?>
8. Irina88 - 27 Ноября, 2021 - 19:44:40 - перейти к сообщению
Вот код:

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


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

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


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


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

Обратите внимание, что я заменил input на select, а option допоняются в зависимости от выбранной страницы .
Например, если страниц всего 3 и Вы находитесь на 1 стр., то можете выбрать 2 и 3, а если на 2 стр., то можете выбрать 1 и 3.
Если Вы принципиально хотите использовать input, то Вам придётся в JS проверять введённое значение и если введён номер актуальной страницы выдавать сообщение и не перезагружать ту же страницу повторно.
Посмотрите внимательно мой код с select. Всё работает без fofm
Удачи!
10. Vladimir Kheifets - 28 Ноября, 2021 - 08:27:41 - перейти к сообщению
Irina88 пишет:
Вот код:

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


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


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

2. С <input> с кнопкой:
Спойлер (Отобразить)
Удачи!
11. Irina88 - 28 Ноября, 2021 - 19:21:59 - перейти к сообщению
Из 22х записей отображается только 20(

Вот код:

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


Вот скрин:

12. Vladimir Kheifets - 29 Ноября, 2021 - 06:45:07 - перейти к сообщению
Irina88 пишет:
Из 22х записей отображается только 20(
Вот скрин:

Покажите, пожалуйста, текстовой файл
13. Vladimir Kheifets - 29 Ноября, 2021 - 11:06:24 - перейти к сообщению
Irina88 пишет:
Из 22х записей отображается только 20(

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

А сколько сообщений надо написать в форум чтобы можно было нажать "спасибо" пользователю?
15. Irina88 - 11 Августа, 2022 - 19:22:41 - перейти к сообщению
В связи с обновлением версии PHP на сервере ho.ua, перестал работать данный скрипт. Недовольство, огорчение Помогите адаптировать его под PHP 8.0.

 

Powered by ExBB FM 1.0 RC1