Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dzielenie tekstu po kropce
Forum PHP.pl > Forum > PHP
Purpen
Witajcie. Pragnę podzielić długi tekst, opowiadanie, na strony. Jednak nie chcę, aby przerywało mi opowiadania w połowie dialogu, czy zdania, dlatego chciałbym podzielić je po kropkach.
Na razie robię tak:

  1. $marker = '<!--BREAK PAGE-->';
  2. $tmpText = wordwrap($text, 15000, $marker );
  3. $pages = explode($marker, $tmpText);
  4. $pagesNo = count($pages);
  5. $pageIntval = intval($_GET['page']);
  6. $pageNo = $pageIntval-1;


A więc jak to przerobić, aby tekst dzieliło dopiero po kropce, a nie przerywało w połowie zdania?
tehaha
możesz pokombinować z funkcjami: http://php.net/manual/en/function.substr.php i http://www.php.net/manual/en/function.strrpos.php czyli:
wycinasz 15000 znaków funkcja substr(), znajdujesz ostatnią kropkę strrpos() i potem znowu docinasz do kropki kolejne strony tak samo manipulujący parametrem offset dla funkcji substr(), ilość stron obliczysz dzieleniem wyniku funkcji strlen() przez prób czyli u Ciebie 15000
Purpen
Kurczę, nie mam zielonego pojęcia jak to zrobić. Mógłbyś dać przykład?
tehaha
jeżeli chodzi Ci o podział na "mniej więcej" równe części to zrobiłbym tak:

rozbił na zdania i powstawiał znak <!--BREAK--> w miejscu gdzie będzie podział (najlepiej wykonać to przy wprowadzaniu tekstu do bazy):
  1. $text = '1fsda fsdafsadfs. 2fdsa fsad fsdaf sadf as. 3fdsa fsadjfsadofjsdfa. 4f dsafasdjfsadlfjasdlkfa. 5fsad fsdaf sadf a. 6fjdsalfjsadlkfjsda. 7fsdajflksdajfals.';
  2.  
  3. $treshold = 30; // number of characters per page
  4. $whole_text = '';
  5. $i=1;
  6.  
  7. $sentences = explode('.', $text);
  8.  
  9. foreach($sentences as $sentence)
  10. {
  11. if(trim($sentence) !='')
  12. {
  13. $whole_text .= $sentence.".";
  14. $current_part .= $sentence.".";
  15. if(strlen($current_part) > $i*$treshold)
  16. {
  17. $whole_text .="<!--BREAK-->";
  18. $current_part = '';
  19. ++$i;
  20. }
  21. }
  22. }


potem kiedy pobierasz tekst z bazy to na podstawie zmiennej $_GET['page'] wyświetlasz odpowiedni kawałek
  1. $parts_of_text = explode("<!--BREAK-->", $whole_text);
  2. if(isset($_GET['page']) && $_GET['page'] > 0)
  3. {
  4. $page = (int)$_GET['page']-1;
  5. }else
  6. {
  7. $page = 0;
  8. }
  9. echo $parts_of_text[$page];
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.