![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cześć, nie wiem jak się za takie coś zabrać:
Potrzebuje po pobraniu konkretnego tekstu (np 1500znaków ale będzie to zmienna liczba) podzielić go na 2 nierówne części. Np pierwsza ma 300znaków a druga - reszte. Czyli coś na kształt explode(); która nie dzieli po określonym separatorze a określonej ilości znaków... Zawsze można podzielić na równe części i wszystkie prócz pierwszej potraktować implode(); tylko kurcze nie wiem jak rozwiązać samo dzielenie tekstu. Byłbym wdzięczny za każde info, nie oczekuje gotowca - ucze się i chętnie poczytam 'wskazówki' (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 10 Dołączył: 4.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 19 Dołączył: 24.12.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, pomogliście (IMG:style_emoticons/default/smile.gif) A teraz kolejny 'etap' którego nie wiem jak ugryźć. Mianowicie chodzi o ucinanie słów w połowie, jak zrobić by skrypt doszedł do pierwszej kropki po tych np 300 znakach (czyli defacto będzie więcej niż 300 znaków) ?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
jeżeli chcesz zrobić coś na zasadzie, żeby tekst był nie dłuższy niż 300 znaków ale żeby ni urywał się w połowie słowa to możesz, po tym wycięciu 300 znaków, funkcją http://php.net/manual/en/function.strrpos.php ustalić pozycję ostatniej spacji lub ostatniej kropki i jeszcze raz przyciąć tekst tak żeby wyglądał bardziej elegancko, a jeżeli chcesz żeby znalazł pierwszą kropkę lub pierwszą spację za 300 znakiem to robisz funkcją http://php.net/manual/en/function.strpos.php z ustawionym offset na 300
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Śmiga (IMG:style_emoticons/default/smile.gif) A jest jakaś opcja, żeby odcięcie nastąpiło po jednym z wielu (tj kropka, wykrzyknik, znak zapytania) ? Bo jedyne na co wpadłem to zrobienie 3x tego samego i wybranie tej która ma najmniejsza wartość (czyli np znak '?' wystąpi prędzej niż '!' albo '.' to wyświetla się tekst do '?'). Ale mam wrażenie, że to da się zrobić prościej (a z pewnością szybciej/wydajniej) ^^.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
możesz tymi funkcjami ustalić pozycję dla znaków: ?, !, . , potem wybierasz sobie z nich najmniejszą funkcją http://php.net/manual/en/function.min.php żeby wybrać ten który jest najbliżej i ucinasz
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 22.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ok (dzięki Waszej pomocy) rozwiązałem swój problem, poniżej kod dla potomnych. Może komuś się przyda. Przy okazji byłbym wdzięczny gdyby ktoś to sprawdził/napisał co można było zrobić inaczej etc. Jakieś uwagi (IMG:style_emoticons/default/smile.gif)
-- Całość wrzucamy do pliku functions.php w głównym katalogu naszego theme'a. (wp includuje ten plik automatycznie). Co to robi? Dzieli nam tekst (cały, bez tagów <p>,<span> itp - czysty tekst) na 2 części. Pierwsza (excerpt) wyświetla fragment tekstu od początku do (domyślnie) 600 znaku. Skrypt wyszukuje pierwszą kropke/wykrzyknik/znak zapytania/średnik i dopiero po nim ucina tekst. Więc problem ucinania słowa/zdania w środku odpada. Plusy wiadome, możemy osobno wywoływać/formatować wstęp/tekst, działać na nim z jQuery, nie ma żadnych tagów-śmieci z WP. Wywołanie: Kod show_post(); // wyświetli wstęp, domyślnie 600 znaków show_post(content, 666); // wyświetli część tekstu zaczynając od 666 znaku. Więc jeśli chcemy wyświetlić cały tekst w ciągu od np 700 znaku to wpisujemy: Kod show_post(excerpt, 700); //pierwszy parametr nie jest wymagany show_post(content, 700); //wyświetli reszte tekstu Kod function cut_off($lookfor, $lenght) { global $more; $more = 1; $whole_content = get_the_content(); $cutoff_pos = strpos($whole_content, $lookfor, $lenght); return $cutoff_pos; } function show_post($select = "excerpt", $excerpt_lenght = "600") { global $more; $more = 1; $whole_content = get_the_content(); $whole_content_lenght = strlen($whole_content); if ($excerpt_lenght<$whole_content_lenght) { $punctation[0] = cut_off('.',"$excerpt_lenght"); $punctation[1] = cut_off('!',"$excerpt_lenght"); $punctation[2] = cut_off('?',"$excerpt_lenght"); $punctation[3] = cut_off(';',"$excerpt_lenght"); $i = 0; foreach($punctation as $pointer) { if(empty($pointer) === FALSE) { $true[$i] = $pointer; } $i++; } $nearest_pointer = min($true); $nearest_pointer = $nearest_pointer+1; $text[excerpt] = substr($whole_content, 0, $nearest_pointer); $text[content] = substr($whole_content, $nearest_pointer); echo $text[$select]; } else { echo "$whole_content"; } } |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 16:37 |