Edytor tekstu z akapitami


(Adjweb) #1

Witam, ostatnio tworzę webową aplikację, i narazie stoję na dodawaniu nowych treści.

Próbowałem już różnych edytorów typu CKEditor czy TinyMCE, jednak nie potrzebuję takiej "kobyły"

Szukam czegoś takiego co jest na blogu DP :slight_smile:

Dokładnie o taki efekt mi chodzi, i chciałbym to uzyskać bez wyżej wymienionych edytorów

Pozdrawiam i czekam na pomysły :slight_smile:

PS. Używam: PHP, MySQL, Jquery i CSS rzecz oczywista :smiley:

Jakby ktoś nie wiedział o co chodzi :slight_smile:

Znalazłem jedno jednak strona która nie lubi zwykłych ludzi :slight_smile:

http://algorytmy.pl/?id=2113


(Drobok) #2
  1. Twój link wymaga konta na portalu

  2. Chodź by ja zrobiłem podobnego topa kilka miesięcy temu ;]

  3. Poszukaj sobie ;], dla ułatwienia podpowiem, że chodzi tu o str_replace /n na

  4. Natomiast co do dwóch enterów musiałbyś obsłużyć jakiś koniec zawartości paragrafu. Więc z tym raczej będzie opornie. Np jeśli zakończyłbyś to kolejnymi enterami, mógłbyś sobie ładnie poszukać w tekście po dwóch enterach kolejnych i to je właśnie podmienić na zakończenie paragrafu ;]


(Adjweb) #3
  1. Konta jak konta, ale jeszcze abonament :slight_smile:

  2. Korzystam też z nl2br() i wtedy tekst wygląda tak:

    Wers 1

    Wers 2

    Wers 3

    Wers kolejny w nowym akapicie

    Coś dalej

A potrzebuję aby wyszło tak :slight_smile:

Wers 1


Wers 2 


Wers 3

Wers kolejny w nowym akapicie


Coś dalej

Nie wiem jak to zrobić do końca, nl2br daje same br'y, jednak z akapitami będzie problem, bo zdarza się że "mogą być więcej niż 2 entery"

Można to też jakoś rozbić po każdym BR, ale może ktoś jeszcze pomoże :slight_smile:

Pozdro !


(MaXDemage) #4

Witam.

Gdybym na szybko miał to rozwiązać zrobił bym to tak:

Kasuje html z tekstu jakąś funkcją pokroju htmpspecialchars.

Na samym początku całego tekstu dodaje

Potem na samym końcu dodaje

Używam nl2br. Jeśli jest więcej br'ów obok siebie niż dwa kasuje niepotrzebne; Jak znajduje dwa występujące po sobie br'e zamieniam je funkcją str_replace na string tego formatu:

Można by to jakimś wyrażeniem regularnym jeszcze spróbować zrobić. Ale nie chce mi się teraz nad tym myśleć. A powyższe co podałem powinno się jakoś sprawdzić.


(Adjweb) #5

Znalazłem coś takiego jednak nie działa dobrze do końca a powinno :slight_smile:

<?php

function nls2p($str)

{

  return str_replace('
', '', '
' 

        . preg_replace('#([\r\n]\s*?[\r\n]){2,}#', '$0
', $str) 

        . '');

}

?>


Turns two or more consecutive newlines (separated by possible white space) into a 
....


Pass result to regular nl2br() to add 
 to remaining nl's, eg,


<?php

echo nl2br(nls2p("Paragraph1\n\nParagraph2\n line1\n line2\n"));

?>


result:


Paragraph1

Paragraph2


line1


line2

Jednak to zarówno na hostingu (llinux) i xampp (win) nie działa tak jak autor napisał Otrzymuję na obu serwerach:

Paragraph1




Paragraph2


 line1


 line2

(MaXDemage) #6

Śpieeee! !!

?php

function nls2p($str)

{

  return str_replace('
', '', '
' 

        . preg_replace('#([\r\n]\s*?[\r\n]){2,}#', '
', $str) 

        . '');

}

?

edit: a kawałek echo nl2br(nls2p($tekst) bez zmian ;p


(Adjweb) #7

Witaj, powiem Ci, że jakaś dziwna sprawa, przy dodawaniu działa normalnie lecz wolałbym to zrobić podczas wyświetlania, bo tak będzie dużo łatwiej edytować mi ten tekst, i edycja na żywo również była by łatwiejsza :slight_smile:

Jednak pozostawia wiele do życzenia ten "system"

Znalazłem coś fajnego, ale pobrania nie widać, i usuwa kilka brów :slight_smile:

http://www.textism.com/tools/textile/

PS. Masz jeszcze jakieś pomysły ?

I czy dało by rade przy wyświetlaniu to zrobić tak jak w tym linku :slight_smile:

-- Dodane 08.01.2011 (So) 22:35 --

Dobra, rozwiązane, może się komuś przyda :slight_smile:

$tekst = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "
$1", $tekst);

			$tekst = nl2br($tekst);

			$tekst = preg_replace('/(
]*>\s*){2,}/', '
', $tekst);

Do wyświetlania, dodaje czysty tekst, bo edycja łatwiejsza :slight_smile: A w edycji używam:

$tekst = preg_replace('/\n\s+\n/',"\n\n",$tekst);

Aby multi entery na jeden zamienić :slight_smile:

PS. Dzięki za pomoc i pozdrawiam