Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dzielenie tekstu po kropce
Purpen
post 19.06.2010, 14:14:20
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
tehaha
post 19.06.2010, 14:44:19
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Purpen
post 19.06.2010, 16:21:14
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Kurczę, nie mam zielonego pojęcia jak to zrobić. Mógłbyś dać przykład?
Go to the top of the page
+Quote Post
tehaha
post 19.06.2010, 17:24:19
Post #4





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


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];
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 11:26