• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Podzielenie tekstu na strony (paginacja)

Object Storage Arubacloud
0 głosów
162 wizyt
pytanie zadane 6 maja 2019 w PHP przez Whereismycode Obywatel (1,710 p.)

W jaki sposób mogę napisać paginacje strony, ale tylko gdy tekst przekracza granicę 500 znaków?

Teraz zachodzi kolejne pytanie. Gdy instrukcja warunkowa już sprawdzi długość to łatwo domyślić się, że ostanie słowo zostanie ucięte, co stylistycznie wygląda okropnie. Pomysł który przychodzi mi na myśl to zamiast liczyć znaki to być może łatwiej policzyć słowa, ale czy tekst z bazy w takiej formie będzie można policzyć jako tekst?

Przykład:

<span style="font-size:20px;">Tekst który został <b>dodany</b> przez edytor tekstu</span>

 

komentarz 6 maja 2019 przez Perseusz Bywalec (2,190 p.)
edycja 6 maja 2019 przez Perseusz

Możesz zostać przy liczeniu znaków i odciąć ostatnie słowo:

if(strlen($twojString) > 500){
  $pozycjaOstatniejSpacji = strrpos($twojString, ' ', 501);
  $stringZastepczy = '...';

  # Usuwa znaki po ostatniej spacji i wstawia „...” (spacje też)
  $stringBezOstatniegoSlowa = substr_replace(
    $twojString,
    $stringZastepczy,
    $pozycjaOstatniejSpacji
  );
}

Dość obrazowo to napisałem, wydaje mi się że dobrze

https://php.net/manual/en/function.strrpos.php

1 odpowiedź

0 głosów
odpowiedź 6 maja 2019 przez mrspock1 Mądrala (6,420 p.)
A może zrobić tak, jak już będziesz miał przybliżoną długość kolejnego fragmentu tekstu, to poszukać w obie strony najbliższe miejsce gdzie się kończy akapit. Jeśli to będzie niedaleko od przybliżonej długości, to tam skończysz jeden fragment. Prawidłowo podzielony tekst na akapity powinien mieć ich dużo i podział wyjdzie prawidłowo. Nie przypominam sobie żeby robiono inaczej.

 

Teoretycznie możesz od wyliczonej przybliżonej długości śledzić w którąś stronę , gdzie jest koniec wyrazu (najbliższa spacja) i przesunąć długość fragmentu do tej spacji. Przy liczeniu kolejnego fragmentu zawsze licz od początku żeby zapewnić, że algorytm liczy zawsze ten sam koniec, niezależnie od tego który fragment liczysz.

 

Nie wiem czy tak jest praktykowane, ale wydaje mi się że cała duża strona jest zapisana w jednym polu bazy danych. Wtedy dla tego pola robisz tabelę "jeden do wielu" i w tej tabeli "wiele" zapisujesz kolejne numery znaku końcowego podzielonych fragmentów (żeby nie liczyć za każdym razem). Do tej tabeli "wiele" obliczenia byłyby robione za każdym razem tylko wtedy, gdy nastąpi edycja tekstu w tabeli głównej.

Podobne pytania

0 głosów
2 odpowiedzi 516 wizyt
pytanie zadane 13 czerwca 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
0 głosów
0 odpowiedzi 254 wizyt
pytanie zadane 8 grudnia 2018 w PHP przez niezalogowany
0 głosów
0 odpowiedzi 183 wizyt
pytanie zadane 3 lutego 2018 w PHP przez mi-20 Stary wyjadacz (13,190 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...