Jump to content
Michael2318

[PHP/MySQL] Prosta obsługa BB-Code & uśmieszków

Recommended Posts

Michael2318

W tym poradniku pokażę Wam jak dodać obsługę prostych bb-code oraz uśmieszków w tekście. Przyda się to chociażby w różnego rodzaju CMSach ;)
Uśmieszki będą "zgrane" z bazą danych, więc będzie można też podpiąć to pod jakiś panel administracyjny, ale w tym poradniku nie o tym.

A więc najpierw tworzymy naszą tabelę smilies:
 

CREATE TABLE `smilies` (
  `smilies_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `code` varchar(50) COLLATE utf8_unicode_ci DEFAULT '',
  `smile_url` varchar(100) COLLATE utf8_unicode_ci DEFAULT '',
  PRIMARY KEY (`smilies_id`)
);

Nasza tabela składać się będzie z:

smilies_id - czyli po prostu ID danej emotki w bazie danych (to właśnie Wam się przyda, jeśli będziecie chcieli podpiąć to pod panel administracyjny ;) ),
code - czyli po prostu kod emotki, np. : ),
smile_url - czyli nazwa naszej emotki, która "siedzi" w katalogu FTP.

Teraz czas na kod naszej funkcji.

A więc wewnątrz naszej funkcji zaczynamy od pobrania wszystkich uśmieszków z bazy danych:

function prepare_message($message)
{
$sql = "SELECT * FROM `smilies`";
$result = mysql_query($sql)
or die(mysql_error()
);

Następnie definiujemy, iż zmienne $kod oraz obrazek to tablice. W kolejnym kroku otwieramy pętlę while, preparujemy link oraz kod do poszczególnej ikonki (UWAGA - poprawiamy ścieżkę!!):

$obrazek = array();
$kod = array();
while($row = mysql_fetch_assoc($result))
{
$code = $row['code'];
$url = $row['smile_url'];	
$obrazek[] = 'smilies/'.$url.'';
$kod[] = $code;
}

Po zamknięciu pętli podmienimy wszystkie znalezione "uśmieszkowe" (np. : )) kody na uśmieszki (grafikę):

$message = str_replace($kod, $obrazek, $message);

Oraz wszystkie znalezione znaczniki bb-code - [ b]text[/ b] / [ u]text[/ u], [ i]text[/ i] - kolejno na: pogrubienie, podkreślenie, kursywę:
 

$message = str_replace(array("\n", "[u]", "[b]", "[i]", "[/i]", "[/b]", "[/u]"), array("\n
\n", "", "", "", "", "", ""), $message);

Pozostało nam zwrócić zmienną $message i zamknąć funkcję:
 

return $message;
}

Część teoretyczna zakończona ;)
Teraz pytanie - jak to wykorzystać? Bardzo prosto. Wystarczy naszą zmienną z jakimś tekstem przepuścić przez funkcję prepare_message() i powinniśmy mieć wszystkie uśmieszki (kody) zamienione na grafikę oraz podmienione wszystkie bb-code, przykład jak to możemy najprościej przetestować:

$text = 'To jest testowy, [b]pogrubiony[/b], [i]pochylony[/i] i [u]podkreślony[/u] tekst. Do tego mamy jeszcze :-) uśmieszek :-D';
echo prepare_message($text);
?>

Oczywiście wcześniej musimy połączyć się z naszą bazą danych + dodać funkcję, którą wyżej napisaliśmy.
No ale to nie wystarczy...Musimy jeszcze dodać do naszej bazy danych kody emotek oraz ich nazwy z serwera FTP.
Tak więc dla przykładu, wrzucimy kody i uśmieszki z phpBB2 by przemo ;)

Wykonujemy to zapytanie:

INSERT INTO `smilies` (`smilies_id`, `code`, `smile_url`) VALUES
(1, ':-)', 'icon_smile.gif'),
(2, ';-)', 'icon_wink.gif'),
(3, ':->', 'icon_smile2.gif'),
(4, ':-D', 'icon_biggrin.gif'),
(5, ':-P', 'icon_razz.gif'),
(6, ':-o', 'icon_surprised.gif'),
(7, ':mrgreen:', 'icon_mrgreen.gif'),
(8, ':lol:', 'icon_lol.gif'),
(9, ':-(', 'icon_sad.gif'),
(10, ':-|', 'icon_neutral.gif'),
(11, ':-/', 'icon_curve.gif'),
(12, ':-?', 'icon_confused.gif'),
(13, ':-x', 'icon_mad.gif'),
(14, ':shock:', 'icon_eek.gif'),
(15, ':cry:', 'icon_cry.gif'),
(16, ':oops:', 'icon_redface.gif'),
(17, '8-)', 'icon_cool.gif'),
(18, ':evil:', 'icon_evil.gif'),
(19, ':roll:', 'icon_rolleyes.gif'),
(20, ':!:', 'icon_exclaim.gif'),
(21, ':?:', 'icon_question.gif'),
(22, ':idea:', 'icon_idea.gif'),
(23, ':arrow:', 'icon_arrow.gif');

I dodajemy na FTP nasze obrazki. Należy pamiętać, aby ścieżka do obrazków była zgodna z tą ścieżką, którą zdefiniowaliśmy powyżej.

DEMO:

smile-test.png.b1f9b16ee49e03a28ca667563

Cała funkcja:

<?php
function prepare_message($message)
{
	$sql = "SELECT * FROM `smilies`";
	$result = mysql_query($sql)
		or die(mysql_error());
	$obrazek = array();
	$kod = array();
	while($row = mysql_fetch_assoc($result))
	{
		$code = $row['code'];
		$url = $row['smile_url'];
			
		$obrazek[] = '<img src="smiles/'.$url.'" border="0">';
		$kod[] = $code;
	}
	$message = str_replace($kod, $obrazek, $message);
	$message = str_replace(array("\n", "[u]", "[b]", "[i]", "[/i]", "[/b]", "[/u]"), array("\n<br />\n", "<u>", "<b>", "<i>", "</i>", "</b>", "</u>"), $message);
	return $message;
}
?>

http://wklej.org/id/733094/

Share this post


Link to post
Share on other sites
Daniel Online

Demko całkiem przyzwoicie wygląda, ale nie sądzisz, że to będzie zbyt duże obciążenie dla bazy przy dajmy np. 1000 usmieszkach?

Share this post


Link to post
Share on other sites
Michael2318
Posted Original Poster
Demko całkiem przyzwoicie wygląda, ale nie sądzisz, że to będzie zbyt duże obciążenie dla bazy przy dajmy np. 1000 usmieszkach?

Nie ;) Równie dobrze ja mogę zadać Ci pytanie, czy nie sądzisz, że tabele z postami nie generują zbyt dużego obciążenia przy prawie 90 tys. postów (bo tyle tutaj ich jest) ;)

Po drugie - powodzenia przy tylu emotach.

Share this post


Link to post
Share on other sites
root

Michael2318, Widzę dzięki, nie działa pobierać proszę ?

Share this post


Link to post
Share on other sites
Michael2318
Posted Original Poster

Sorry, literówkę miałem w linku. Poprawione ;)

Share this post


Link to post
Share on other sites
root


<?php
function prepare_message($message)
{
$sql = "SELECT * FROM `smilies`";
$result = mysql_query($sql)
or die(mysql_error());
$obrazek = array();
$kod = array();
while($row = mysql_fetch_assoc($result))
{
$code = $row['code'];
$url = $row['smile_url'];

$obrazek[] = ''.$url.'';
$kod[] = $code;
}
$message = str_replace($kod, $obrazek, $message);
$message = str_replace(array("\n", "", "", "", "", "", ""), array("\n
\n", "", "", "", "", "", ""), $message);
return $message;
}
?>

Share this post


Link to post
Share on other sites
Michael2318
Posted Original Poster

No i jakim prawem ma Ci to działać, skoro Ty tylko zdefiniowałeś funkcję, ale jej nie użyłeś ??

echo prepare_message($text);

Z resztą w moim pierwszym poście jest przykład jak to można wykorzystać.

Share this post


Link to post
Share on other sites
root

tak to samo nie działa. : (

Czy mysql ?

"A więc najpierw tworzymy naszą tabelę smilies: "

Share this post


Link to post
Share on other sites
Michael2318
Posted Original Poster
tak to samo nie działa. : (

Niech zgadnę :brawo: wklepałeś mój kod, nie definiując wcześniej zmiennej $text ?

Biorąc się za PHP, wypadałoby chociaż widzieć co to jest MySQL. Masz google.

A no i nie wspominam już o tym, że próbujesz wywołać funkcję, która korzysta z MySQL, ale nawet się z bazą nie połączyłeś.

Share this post


Link to post
Share on other sites
root

Niech zgadnę :brawo: wklepałeś mój kod, nie definiując wcześniej zmiennej $text ?

Biorąc się za PHP, wypadałoby chociaż widzieć co to jest MySQL. Masz google.

A no i nie wspominam już o tym, że próbujesz wywołać funkcję, która korzysta z MySQL, ale nawet się z bazą nie połączyłeś.

Nom, przegrałem czytaj tuż idę szukam. buzki : D

Ale mam locathost [WAMPServer] nie strony internetowa. wiem mysql.

dobra dzięki Michael2318 : )

Share this post


Link to post
Share on other sites
Michael2318
Posted Original Poster

Nom, przegrałem czytaj tuż idę szukam. buzki : D

Ale mam locathost [WAMPServer] nie strony internetowa. wiem mysql.

dobra dzięki Michael2318 : )

Ty...jesteś polakiem ? Być może na przyszłość po angielsku będzie łatwiej.

@DOWN

Cokolwiek to znaczy - ok.

Share this post


Link to post
Share on other sites
root

Ty...jesteś polakiem ? Być może na przyszłość po angielsku będzie łatwiej.

samo wiem lepiej widzę film "tutorial" bardzo latwe bo czytaj jest za trudno, daj spokój nie pisać do mnie. ale trudno błędem. co powiedziałem dzięki Michael2318

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
×
×
  • Create New...