ForumCała strona

Nawigacja

Aktualnie online

Gości online: 9

Użytkowników online: 0

Łącznie użytkowników: 25,405
Najnowszy użytkownik: kipolas

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

JazOOn
25.06.2025 23:43:19
Dziadziejemy jantom...

jantom
23.06.2025 21:37:31
Z ciekawo?ci pogrzeba?em w historii i jest gorzej ni? my?la?em. Skórka Nadzieja ma ju? 17 lat.

jantom
23.06.2025 21:33:12
... troch? zasiedzia?o Wink

jantom
23.06.2025 21:32:38
Cecha tego, jak z 20+ lat temu pisano strony - tabelki wsz?dzie, szczególnie do tworzenia uk?adów stron. PF d?ugo by? wierny tej tradycji. A obecny szablon Supportu napisa?em z 15 lat temu i chyba mu

Zbigniew@
22.06.2025 17:50:03
Dlaczego forum jest dost?pne tylko dla 10% ludzi? Poniewa? wi?kszo?? osób korzysta z internetu na urz?dzeniach mobilnych.

Pobierz now? wersj?
Pobierz podr?cznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Nawigacja

PHP-Fusion v7 - BBCodes API

Napisane przez Wooya dnia 30 czerwca 2008 21:42 · 3 komentarze · 10617 czytań · Drukuj · Facebook · Wykop

Streszczenie:

Aplication Programming Interface (API) dla bbcode w PHP-Fusion v7

Nowy system bbcodes zapocz?tkowany w PHP-Fusion v7 (nie chwal?c si? jam to uczyni? ;) ) posiada 3 g?ówne pliki:

1) NAZWA_bbcode_include.php - w tym pliku budujemy w?asnego interpretera dla naszego bbcode. Najprostszym przyk?adem jest bbcode s?u??cy do pogrubiania tekstu (usuni?to nag?ówek licencji):

< ?php
if (!defined("IN_FUSION")) { die("Access Denied"); }
$text = preg_replace('#\[b\](.*?)\[/b\]#si', '< strong>\1< / strong>', $text);
?>


Jak widzicie, pierwsza linia zwiera kod zabezpieczaj?cy przed bezposrednimi odwo?aniami do pliku, a nastepna g?ówn? procedur?, która zamienia nam odpowiedni bbcode do postaci pogrubionego tekstu. Interpreter wyszukuje w zmiennej $text jakichkolwiek tagów [b][/b] i zamienia je na odpowiednie taki HTML - STRONG.

Ten plik jest wywo?ywany za ka?dym razem, gdy parsujemy jakikolwiek tekst przy pomocy funkcji parseubb(), pod warunkiem, ?e dany bbcode zosta? w??czony w panelu administracyjnym.

Informacja: zmienna $text jest wymagana w tym pliku! Nie mo?na u?y? innej zmiennej.

Wa?ne! nieinteraktywne nazwy bbcode (czyli takie, które nie posiadaj? w?asnego przycisku, ale powinny zosta? przetworzone, np.: autolink bbcode) MUSZ? zaczyna? si? od znaku !, np.: !autolink_bbcode_include.php, !autolink_bbcode_include_var.php

2) NAZWA_bbcode_include_var.php - ten plik zawiera informacje, niezb?dne do wy?wietlenia przycisku bbcode. Przyk?ad (jeden z bardziej zaawansowanych bbcode, usuni?to informacj? o licencji):

< br >";
}
return $generated;
}
}

$__BBCODE__[] =
array(
'description' => $locale['bb_geshi_description'],
'value' => "geshi",
'bbcode_start' => "[geshi=".$locale['bb_geshi_lang']."]",
'bbcode_end' => "[/geshi]",
'usage' => "[geshi=".$locale['bb_geshi_lang']."]".$locale['bb_geshi_usage']."[/geshi]",
'onclick' => "return overlay(this, 'bbcode_geshi_".$textarea_name."', 'rightbottom');",
'onmouseover' => "",
'onmouseout' => "",
'html_start' => ">",
'includejscript' => "",
'calljscript' => "",
'phpfunction' => "echo generate_geshi_langs('".$textarea_name."', '".$inputform_name."');",
'html_middle' => "",
'html_end' => "< / div>"
);
?>


Ten plik wymaga bardziej szczegó?owych informacji:
- pierwsza linia zabezpiecza przed bezpo?rednim dost?pem do pliku
- jak widzicie mo?emy definiowa? w?asne funkcje wewn?trz w?asnych bbcode. Wa?ne: zawsze sprawdzajcie, czy dana funkcja nie zosta?a ju? wcze?niej zdefiniowana przy pomocy funkcji function_exists(), poniewa? dany bbcode mo?e by? wywo?ywany wi?cej ni? raz przy jednym prze?adowywaniu strony
- tablica dwuwymiarowa$__BBCODE__:


  • description - g?ówny opis bbcode; zmienne lokalizacyjne mog? by? wpisane bezpo?rednio w pliku lub te? zapisane w odpowiednim pliku lokalizacyjnym (locales/J?ZYK/bbcodes/NAZWA.php)
  • value - nazwa bbcode; musi by? taka sama jak prefix plików _bbcode_include.php, _bbcode_include_var.php i nazwa pliku lokalizacyjnego
  • bbcode_start - pocz?tkowy tag bbcode; ten parametr mo?e by? wykorzystany do tworzenia do zamkni?tych lub otwartych bbcode (otwarte bbcode, to takie, gdzie nie wyst?puje tag zamykaj?cy; mo?e zosta? u?yty, np.: jako bezpo?redni link do danego artyku?u)
  • bbcode_end - ko?cowy tag bbcode; je?eli chcesz utwo?y? otwarty bbcode, zostaw to pole puste
  • usage - krótka informacja na temat, jak u?ywa? danego bbcode; mo?na wpisa? tekst na trwa?e lub u?y? odpowiedniej zmiennej z pliku lokalizacyjnego
  • onclick - ten parametr mo?e zosta? u?yty np.: przy otwieralnych bbcode jak np.:P w powy?szym przyk?adzie w GeSHi bbcode; g?ównym celem tego parametru jest u?ywanie funkcji JS overlay(), która zosta?a zapocz?tkowana w jscript.js v7 (u?ycie tej funkcji zostanie wyja?nione pó?niej)
  • onmouseover - je?eli chcesz zrobi? co? gdy twoja myszka znajduje si? nad przyciskiem bbcode... przeznaczenie dla skryptów JS
  • onmouseout - jak wy?ej
  • html_start - tutaj mo?esz zdefiniowa? pocz?tkowy kod HTML dla rozwijanych bbcode (i nie tylko; jakikolwiek kod HTML zostanie wykonany); w wi?kszo?ci wypadków b?dzie to tag DIV; pami?taj aby doda? funkcj? JS do zdarzenia onclick - overlayclose(). W innym wypadku klikni?ty button nie zamknie si? a? do nast?pnego prze?adowania strony :) Powy?ej mo?esz zobaczy? podstawowy schemat u?ywania tej funkcji
  • includejscript - je?eli twój bbcode potrzebuje jakichkolwiek funkcji JS, to tutaj mo?esz za??czy? pliki, które posiadaj? te funkcje; bbcode COLOR jest jednym z przyk?adów, który korzysta z tej funkcji
  • calljscript - w tym miejscu mo?esz wywo?a? funkcj? JS, która zosta?a zawarta w powy?szym pliku
  • phpfunction - tutaj wpisujesz funkcj? PHP, któr? chcesz wywo?a?; bbcode SMILEY jest jednym z bbcode, który korzysta z tej funkcji; wywo?uje on funkcj? display_smileys(); w bbcode GeSHi wywo?ali?my funkcj? nazwan? generate_geshi_langs()
  • html_middle - tutaj umieszczamy g?ówny kod HTML dla naszych rozwijanych bbcode; jak widzicie powy?ej, dzi?ki funkcji generate_geshi_langs() wygenerowali?my przyciski dla dost?pnych j?zyków parsera; s? tam przyciski, które zawieraj? funkcj? JS addText(), która dodaje nasze bbcode do pola TEXTAREA (u?ywanie funkcji JS addText() i insertText() zostanie wyja?nione dalej w tym artykule)
  • html_end - w wi?kszo?ci wypadków, b?dzie to tag zamykaj?cy DIV


2.a) ma?e wyja?nienie na temat tablicy $__BBCODE_NOT_QUOTABLE__ ...
Zobaczmy przyk?ad (hide_bbcode_include_var.php; pomini?to nag?ówek licencyjny):

if (!defined("IN_FUSION")) { die("Access Denied"); }
if (iADMIN) {
$__BBCODE__[] =
array(
"description" => $locale['bb_hide_description'],
"value" => "hide",
"bbcode_start" => "[hide]",
"bbcode_end" => "[/hide]",
"usage" => "[hide]".$locale['bb_hide_usage']."[/hide]"
);
} else {
$__BBCODE_NOT_QUOTABLE__[] = "hide";
}
?>

Zawarto?? tej tablicy pozwala na wycinanie z cytowanego ?ród?a bbcode HIDE na forum. Dlaczego? To zdarzenie zosta?o zareportowane jako b??d, kiedy wiadomo?? wys?ana przez administratora zawiera?a bbcode HIDE, to nie by?a ona widoczna dla zwyk?ych uzytkowników tak d?ugo, a? ... u?ytkownik nie zacytowa? wiadomo?ci administratora :) I dlatego. Je?eli twój bbcode z jakich? przyczyn nie powinien by? cytowany, to po prostu dodaj nowy element do tablicy $__BBCODE_NOT_QUOTABLE__ (który w rzeczywisto?ci jest warto?ci? "value" z danego bbcode)...

3) locale/J?ZYK/bbcodes/NAZWA.php - ten plik zawiera definicje lokalizacyjne dla bbcode. Tablice j?zykowe nie s? ustandaryzwoane, ale ja zdecydowa?em si? stosowa? poni?szy schemat (przyk?ad locale dla Allegro bbcode):

< ?php
$locale['bb_allegro'] = "Allegro";
$locale['bb_allegro_description'] = "Szuka towarów na Allegro - polskim serwise aukcyjnym";
$locale['bb_allegro_usage'] = "Tekst do wyszukania na Allegro";
?>


  • $locale['bb_allegro'] - nazwa bbcode; ten tekst pojawia si? przed wywo?aniem parsera (po parsowaniu wyglada to tak "Allegro: cabria exclusive" gdzie Allegro jest pogrubione a cabria exclusive jest linkiem do wyszukiwarki Allegro z teksetem "cabria exclusive" jako parametr)
  • $locale['bb_allegro_description'] - opis bbcode Allegro
  • $locale['bb_allegro_usage'] - opis uzywania bbcode Allegro


Oczywi?cie ka?dy plik lokalizacyjny bbcode mo?e by? bardziej skomplikowany. Jak napisa?em wy?ej osobi?cie preferuj? schemat tablicy lokalizacyjnej jak poni?ej:

$locale['bb_BBNAZWA_CO'] zamiast numerów u?ywanych powszechnie w plikach lokalizacyjnych PHP-Fusion.




Teraz wyja?ni? u?ywanie funkcji JS overlay(), która jest powszechnie stosowana w rozwijanych bbcode. Wywo?anie tej funkcji jest bardzo proste. Wywo?ujemy j? w pliku NAZWA_bbcode_include_var.php w tablicy $__BCODE__ w zdarzeniu onclick:

"return overlay(this, 'bbcode_NAZWA_".$textarea_name."', 'rightbottom');"
);
?>


Jedyn? rzecz? jak? musimy zmieni? w naszym rozwijanym bbcode jest NAZWA. Kiedy rozwijany bbcode zostanie otwarty (rozwini?ty), to aby go zamkn?? musimy wywo?a? funkcj? JS overlayclose() w sekcji html_start DIV (onclick).

< ?php
$__BBCODE__[] =
array (
'html_start' => ">"
);
?>





Funkcje JS addText() i insertText() w rozwijanych bbcode.
Nie ma potrzeby t?umaczy? jak u?ywa? tych funkcji w nierozwijanych bbcode, poniewa? s? one wywo?ywane automatycznie przez funkcj? display_bbcodes(). Kiedy budujemy rozwijany bbcode wtedy musimy wywo?a? te funkcje w przycisku INPUT w metodzie onclick w sekcji html_middle:
  • zamkni?te bbcode (posiadaj?ce tag otwieraj?cy i zamykaj?cy):

    < input type='button' value='VALUE' class='button' style='width:100px' onClick=\"addText('".$textarea_name."', '[BBCODE]', '[/BBCODE]', '".$inputform_name."');return false;\">


  • otwarte bbcode (posiadaj?ce tylko tag otwieraj?cy):

    < input type='button' value='VALUE' class='button' style='width:100px' onClick=\"insertText('".$textarea_name."', '[BBCODE]', '".$inputform_name."');return false;\">


Jedynymi warto?ciami jakie musimy zmieni? s? WARTO?? i BBCODE oraz style je?li jest taka potrzeba.




I na ko?cu objasnienie funkcji display_bbcodes() i parseubb().
1) display_bbcodes()

< ?php
include_once INCLUDES."bbcode_include.php";
echo "< form name='some_form' method='POST' action='".FUSION_SELF."'>";
echo "< textarea name='some_textarea'>";
echo display_bbcodes("some_textarea", "some_form", "b|u|i");
echo "< input type='submit' name='post' value='Submit'>";
echo "< / form>";
?>


W?a?nie wy?wietlili?my bbcode dla pola some_textarea (warto?? domy?lna to "message"), które jest po?o?one w formie some_form (warto?? domy?lna to "inputform") i chcemy wy?wietli? tylko bbcode b, u, i (domy?lnie wszystkie w??czone bbcode).

2) parseubb()

< ?php
//query calls
$sometext = $data['some_field'];
$sometext = parseubb($sometext, "b|u|i");
echo $sometext;
?>


W?a?nie przetworzyli?my tekst w $sometext i tylko bbcode b, u, i. Je?eli w tek?cie $sometext wyst?pi? inne bbcode - nie zostan? one przetworzone.




Mam nadziej?, ?e ten artyku? pomo?e wam tworzy? wi?cej wspania?ych bbcode dla PHP-Fusion v7, który stanie si? najlepszym CMS kiedykolwiek ;)

Zawsze wasz:
Robert Gaudyn aka Wooya

Komentarze

#1 | mkolumb dnia 21 września 2008 19:56
Hmm, a jest sposób by ten bbcode by? wykonywany na ca?ej stronie? Tzn. nie tylko w komentarzach, forum itp. ale równie? w panelach i ogólnie tre?ci strony? To by mia?o wtedy bardzo du?e zastosowanie
#2 | Wooya dnia 22 września 2008 17:36
Przeciez tak jest! Wystarczy podac parseubb() dla tekstu w ktorym msz bbcode. Przykladowo dla panelu bedzie to:

Rozwiń Kod źródłowy
#3 | Kshyhoo dnia 22 stycznia 2011 23:12
Jakie? braki w kodach...

Dodaj komentarz

Zaloguj się, aby móc dodać komentarz.

Oceny

Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się lub zarejestruj, żeby móc zagłosować.

Świetne! Świetne! 0% [0 głosów]
Bardzo dobre Bardzo dobre 0% [0 głosów]
Dobre Dobre 100% [1 głos]
Średnie Średnie 0% [0 głosów]
Słabe Słabe 0% [0 głosów]
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl