Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wszczepienie bbcode do mojego kodu
Forum PHP.pl > Forum > PHP
korey
Witam sporo szukałem w sieci jak i na tym forum funkcji BBCode kilka znalazłem ale za każdym razem nie działało.
Chcę dodać BBCode do:
- formularza który dodaje newsy do bazy danych.
- funkcji która odczytuje newsy z bazy danych.

napisałem takiego newsa z użyciem HTML:
  1. <!-- tresc wpisana w formularzu -->
  2. <b>Pogrubiony tekst</b><br />
  3. <u>Podkreślony tekst</u><br />
  4. <i>Pochylony tekst</i><br />
  5. normalny tekst<br />
  6. <a href="http://www.google.pl">moj link</a><br />
  7. <img src="http://www.strona.pl/obrazek.gif" border="1"><br />
  8. <font color="#FF0000">Jak dobrze pamiętam to jest czerwony kolor</font>

Tak wygląda News po dodaniu do DB i odczytaniu do wyświetlenia


Wygląd Pól Formularza dodającego newsa:
  1. <tr>
  2. <td></td>
  3. <td>
  4. <input type="button" value="B" name="bold" title="Pogrubiony tekst: tekst " style="font-weight: bold;" />
  5. <input type="button" value="I" name="italic" title="Tekst pochyły: tekst " style="font-style: italic;" />
  6. <input type="button" value="U" name="underline" title="Podkreślony tekst: tekst " style="text-decoration: underline;" />
  7. <input type="button" value="IMG" name="obrazek" title="Wstawianie Obrazka: " />
  8. <input type="button" value="URL" name="obrazek" title="Wstawianie Linku: url obrazka " />
  9. <option name="kolor" value="red" />czerwony
  10. <option name="kolor" value="green" />zielony
  11. </select>
  12. </td>
  13. </tr>
  14.  
  15. <tr>
  16. <td>Krótka Tresc:</td>
  17. <td><textarea id="tresc" name="tresc" id="content" cols="60" rows="7"><?php echo $tresc; ?></textarea></td>
  18. </tr>


Co do formularza chciałbym by po kliknięciu na button np "B" od razu w polu <textarea> name="tresc" od razu pojawiło się .
Jeśli już to by było wysyłamy newsa ubranego w BBCode do DB. teraz pozostaje tylko odpowiednio odczytać go z bazy i to właśnie pojawia się problem bo nie mam zielonego pojęcia jak sie do tego zabrać sad.gif nie oczekuje gotowca, tylko jakiegoś przykładu. No ale jeśli znalazłby się ktoś kto ma to w małym palcu i byłby w stanie mi to jakoś napisać w formie wolontariatu to tez bym się ucieszył. oczywiście mogę sie odwdzięczyć jakimś linkiem smile.gif pozdrawiam i bardzo proszę o obfitą pomoć gdyż to idzie na szczytne cele smile.gif
tehaha
żeby to elegancko zrobić potrzebujesz tutaj sporo javascript ale najprostszy możliwy przykład to taki:


//tutaj miał być kod ale jak dodawałem posta to mi ciągle podmieniało i z przykładowego kodu, zamiast tego daje link http://www.loco.ayz.pl/bbcode/a.html


potem przed zapisem do bazy danych powinieneś użyć funkcji strip_tags() żeby usunąć html jeśli user wpisał, i potem podmienić BBcode na znaki html.

ale to tylko maksymalnie uproszczony przykład bo dobrze by było żeby user mógł zaznaczyć myszką tekst a potem objąć go BBcode, po za tym trzeba też pomyśleć co zrobić jak user przypadkowo skasuje jeden nawias [ przy BBcode
korey
przykład jest ok, dokladnie o to mi chodziło ale kodu nie ma.. co do js gdybym byl w nim biegły nie pisałbym tego tematu
tehaha
kod jest tylko taki
  1. <form name="myform">
  2. <input name="bold" type="button" value="Bold" title="Pogrubiony tekst: tekst " onclick="java script:document.myform.tresc.value+='[Bold]tekst[/Bold]'"/>
  3. <input type="button" value="Pochyły" name="italic" title="Tekst pochyły: tekst " onclick="java script:document.myform.tresc.value+='[Italic]tekst[/Italic]'"/>
  4. <input type="button" value="Podkreślenie" name="underline" title="Podkreślony tekst: [underline]tekst[/underline] " onclick="java script:document.myform.tresc.value+='[Underline]tekst[/Underline]'"/>
  5.  
  6. <textarea id="tresc" name="tresc" id="content" cols="60" rows="7"></textarea>
  7. </form>


no to masz 3 wyjścia albo zadowolisz się takim przykładem, albo nauczysz się javascript , albo weźmiesz sobie jakiś gotowy edytor wysiwyg i problem z głowy,
bo taki konkretny BBcode z dużym usablity to naprawdę dużo javascripta więc wątpię żeby ktoś Ci napisał gotowca
korey
No a wiesz jak zrobić by zaznaczony tekst mi oprawialo własnie w np
  1. [b] [/b]
tehaha
ogólnie słaby jestem z javascript ale z pomocą wujka Google udało się, aczkolwiek nie działa pod IE:

  1. <script type="text/javascript">
  2. function formatText(el,tagstart,tagend) {
  3. if (el.setSelectionRange) {
  4. el.value = el.value.substring(0,el.selectionStart) + tagstart + el.value.substring(el.selectionStart,el.selectionEnd) + tagend + el.value.substring(el.selectionEnd,el.value.length)
  5. }
  6. else {
  7. var selectedText = document.selection.createRange().text;
  8.  
  9. if (selectedText != "") {
  10. var newText = tagstart + selectedText + tagend;
  11. document.selection.createRange().text = newText;
  12. }
  13. }
  14. }
  15. <form name="myform">
  16. <input type="button" value="BOLD" onclick="formatText(document.getElementById('content'),'[bold]','[/bold]')"/>
  17. <input type="button" value="ITALIC" onclick="formatText(document.getElementById('content'),'[italic]','[/italic]')"/>
  18. <input type="button" value="UNDERLINE" onclick="formatText(document.getElementById('content'),'[underline]','[/underline]')"/>
  19. <textarea id="content" cols="60" rows="7"></textarea>
  20. </form>
blooregard
Tu masz małą wskazówkę, ale musisz sobie sam przerobić:
  1. if (document.selection) // to działa w IE
  2. {
  3. var range = document.body.createTextRange();
  4. range.moveToElementText(elm);
  5. range.select();
  6. }
  7. else if (window.getSelection) // ...a to w FF i Operze
  8. {
  9. var range = document.createRange();
  10. range.selectNodeContents(elm);
  11. var selection = window.getSelection();
  12. selection.removeAllRanges();
  13. selection.addRange(range);
  14. }
korey
po kompinowalem na rozne sposoby i brazk pożądanego efektu sad.gif ostatecznie mam takie coś.
  1. <script type="text/javascript">
  2. if (document.selection) // to działa w IE
  3. {
  4. var range = document.body.createTextRange();
  5. range.moveToElementText(tresc);
  6. range.select();
  7. }
  8. else if (window.getSelection) // ...a to w FF i Operze
  9. {
  10. var range = document.createRange();
  11. range.selectNodeContents(tresc);
  12. var selection = window.getSelection();
  13. selection.removeAllRanges();
  14. selection.addRange(range);
  15. }
  16.  
  17. <form name="myform" action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  18.  
  19. <input name="B" type="button" value="B" title="Pogrubiony tekst: tekst " style="font-weight: bold;" onclick="java script:document.myform.tresc.value+=''"/>
  20.  
  21. <input type="button" value="I" name="I" title="Tekst pochyły: tekst " style="font-style: italic;" onclick="java script:document.myform.tresc.value+=''"/>
  22.  
  23. <input type="button" value="U" name="U" title="Podkreślony tekst: tekst " style="text-decoration: underline;" onclick="java script:document.myform.tresc.value+=''"/>
  24.  
  25. <input type="button" value="IMG" name="obrazek" title="Wstawianie Obrazka: " />
  26.  
  27. <input type="button" value="URL" name="obrazek" title="Wstawianie Linku: url obrazka " />
  28.  
  29. <textarea id="tresc" name="tresc" id="content" cols="60" rows="7"><?php echo $tresc; ?></textarea>
  30.  
  31. </form>


ten kod dziala tylko tak ze klikamy na button i w textarea wyskakuje np:
Kod
wcześniej wpisany tekst, zaznaczony i po kliknieciu na inpunt [b] [/b]
tehaha
Cytat(korey @ 9.04.2010, 08:45:13 ) *
po kompinowalem na rozne sposoby

jakim kombinowaniu jak po prostu wkleiłeś kod, który dał Ci blooregard? musisz go przerobić, żeby robił to co chcesz
blooregard
Cytat
ten kod dziala tylko tak ze klikamy na button i w textarea wyskakuje np:

Musisz go przerobić tak, by zaznaczony tekst w <textarea> znalazł się pomiędzy znacznikami. Czyli kombinacja tego, co Ci podałem+Twojego kodu.
korey
tehaha miało być kombinowałem smile.gif

Troszke przysiedziałem i zrobiłem takie coś:

Kod
onclick="java script:document.myform.tresc.value='[b]'+document.myform.tresc.value+'[/b]'"


teraz działa jak trzeba. doszliśmy to połowy wątku. teraz jak mam juz zapisanego w bazie danych newsa oprawionego w bbcode chciałbym zrobić funkcje która by bbcode przerabiała na html. da sie coś takiego zrobić.? biggrin.gif
thek
Korey... Nawet na forum tutaj jest CAŁY topic o skrypcie naszego kolegi, który zrobił sobie parser phpBB i udostępnił dla ogółu, a Ty jeszcze o to pytasz? No wstyd :/
korey
widzialem chyb ten temat ale nie potrafie go przystosować do swojego kodu sadsmiley02.gif php ciagle mi jakieś błędy wywalało
Wicepsik
str_replace ci wystarczy
korey
Dobra zrobiłem juz funkcje która odbiera z DB tekst oprawiony w BBCode i odpowiednio przerabia. i to działa poprawnie.

Wracając do mojego formularza to niby oznacza mi tekst w znaczniki BBCode, ale od razu czały tekst jaki jest w textarea a nie to co zaznaczyłem myszką ;/



Hey jest tu ktoś..?
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.