Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Parser BBCode, Klasa, PHP 5
Louner
post
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 20.06.2005
Skąd: Bielsk Podlaski

Ostrzeżenie: (0%)
-----


Demo:
http://pliki.puklerz.pl/parser/

Źródło:
http://pliki.puklerz.pl/parser/parser.class.phps

Download:
http://pliki.puklerz.pl/parser/parser.zip

Szybka, prosta i zgrabna klasa parseru. Jestem praktycznie pewien, że nie pogubi się w tagach i wszystkie odpowiednio zinterpretuje. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Dodatkowo, sprawdza ich kolejność i jest banalna w obsłudze i modyfikacji.

Konfiguracja klasy:


Mam nadzieję, że jest na tyle intuicyjna, że nie trzeba nic tłumaczyć. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

  1. <?php
  2. private $config = array
  3.        (
  4.            'open_string' => array('[',']'),
  5.            'close_string' => array('[/',']')
  6.        );
  7.    
  8.    private $tags = array
  9.        (
  10.            'b' => '<strong>{value}</strong>',
  11.            'i' => '<span style="font-style:italic;">{value}</span>',
  12.            'u' => '<span style="text-decoration:underline;">{value}</span>',
  13.            'img' => '<img src="{value}" alt="obrazek" title="{parameter}" />',
  14.            'url' => '<a href="{value}">{parameter}</a>',
  15.            'size' => '<span style="font-size:{parameter}px">{value}</span>',
  16.            'ul' => '<ul>{value}</ul>',
  17.            'ol' => '<ol>{value}</ol>',
  18.            'li' => '<li>{value}</li>'
  19.        );
  20. ?>


Schemat tagu przy powyższej konfiguracji:

Kod
[tag=parametr]wartość[/tag]


Sposób użycia:
  1. <?php
  2. if( $wynik = $parser -> parse($jakis_tekst) )
  3. {
  4.   echo $wynik;
  5. } else
  6. // false
  7. {
  8.   echo 'tagi są w błednej kolejności!';
  9. }
  10. ?>


[edit.31.01.2008]
Dodałem tagi list, przykład:

Kod
[ul]
[li]test[/li]
[li]test2[/li]
[/ul]


[edit.22.03.2008]
Parę poprawek, m.in nie ma potrzeby stosowanie cudzysłowu przy ustalaniu parametrów.

Życzę miłego użytkowania. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Louner 15.02.2009, 20:11:20
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b3
post
Post #2





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 25.08.2003
Skąd: Lublin

Ostrzeżenie: (0%)
-----


bardziej mi jakos podchodzi kod z plagina do smarty..

  1. function smarty_modifier_bbcode2html($message) {
  2. $preg = array(
  3. '/(?<!\\\\)\[color(?::\w+)?=(.*?)\](.*?)\[\/color(?::\w+)?\]/si' => "<span style=\"color:\\1\">\\2</span>",
  4. '/(?<!\\\\)\[size(?::\w+)?=(.*?)\](.*?)\[\/size(?::\w+)?\]/si' => "<span style=\"font-size:\\1\">\\2</span>",
  5. '/(?<!\\\\)\[font(?::\w+)?=(.*?)\](.*?)\[\/font(?::\w+)?\]/si' => "<span style=\"font-family:\\1\">\\2</span>",
  6. '/(?<!\\\\)\[align(?::\w+)?=(.*?)\](.*?)\[\/align(?::\w+)?\]/si' => "<div style=\"text-align:\\1\">\\2</div>",
  7. '/(?<!\\\\)\[b(?::\w+)?\](.*?)\[\/b(?::\w+)?\]/si' => "<span style=\"font-weight:bold\">\\1</span>",
  8. '/(?<!\\\\)\[i(?::\w+)?\](.*?)\[\/i(?::\w+)?\]/si' => "<span style=\"font-style:italic\">\\1</span>",
  9. '/(?<!\\\\)\[u(?::\w+)?\](.*?)\[\/u(?::\w+)?\]/si' => "<span style=\"text-decoration:underline\">\\1</span>",
  10. '/(?<!\\\\)\[center(?::\w+)?\](.*?)\[\/center(?::\w+)?\]/si' => "<div style=\"text-align:center\">\\1</div>",
  11.  
  12. // [code] & [php]
  13. '/(?<!\\\\)\[code(?::\w+)?\](.*?)\[\/code(?::\w+)?\]/si' => "<div class=\"bb-code\">\\1</div>",
  14. '/(?<!\\\\)\[php(?::\w+)?\](.*?)\[\/php(?::\w+)?\]/si' => "<div class=\"bb-php\">\\1</div>",
  15. // [email]
  16. '/(?<!\\\\)\[email(?::\w+)?\](.*?)\[\/email(?::\w+)?\]/si' => "<a href=\"mailto:\\1\" class=\"bb-email\">\\1</a>",
  17. '/(?<!\\\\)\[email(?::\w+)?=(.*?)\](.*?)\[\/email(?::\w+)?\]/si' => "<a href=\"mailto:\\1\" class=\"bb-email\">\\2</a>",
  18. // [url]
  19. '/(?<!\\\\)\[url(?::\w+)?\]www\.(.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"http://www.\\1\" target=\"_blank\" class=\"bb-url\">\\1</a>",
  20. '/(?<!\\\\)\[url(?::\w+)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\" target=\"_blank\" class=\"bb-url\">\\1</a>",
  21. '/(?<!\\\\)\[url(?::\w+)?=(.*?)?\](.*?)\[\/url(?::\w+)?\]/si' => "<a href=\"\\1\" target=\"_blank\" class=\"bb-url\">\\2</a>",
  22. // [img]
  23. '/(?<!\\\\)\[img(?::\w+)?\](.*?)\[\/img(?::\w+)?\]/si' => "<img src=\"\\1\" alt=\"\\1\" class=\"bb-image\" />",
  24. '/(?<!\\\\)\[img(?::\w+)?=(.*?)x(.*?)\](.*?)\[\/img(?::\w+)?\]/si' => "<img width=\"\\1\" height=\"\\2\" src=\"\\3\" alt=\"\\3\" class=\"bb-image\" />",
  25. // [quote]
  26. '/(?<!\\\\)\[quote(?::\w+)?\](.*?)\[\/quote(?::\w+)?\]/si' => "<div>Quote:<div class=\"bb-quote\">\\1</div></div>",
  27. '/(?<!\\\\)\[quote(?::\w+)?=(?:&quot;|"|\')?(.*?)["\']?(?:&quot;|"|\')?\](.*?)\[\/quote\]/si' => "<div>Quote \\1:<div class=\"bb-quote\">\\2</div></div>",
  28. // [list]
  29. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\*(?::\w+)?\](.*?)(?=(?:\s*<br\s*\/?>\s*)?\[\*|(?:\s*<br\s*\/?>\s*)?\[\/?list)/si' => "\n<li class=\"bb-listitem\">\\1</li>",
  30. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list(:(?!u|o)\w+)?\](?:<br\s*\/?>)?/si' => "\n</ul>",
  31. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:u(:\w+)?\](?:<br\s*\/?>)?/si' => "\n</ul>",
  32. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[\/list:o(:\w+)?\](?:<br\s*\/?>)?/si' => "\n</ol>",
  33. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(:(?!u|o)\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ul class=\"bb-list-unordered\">",
  34. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:u(:\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ul class=\"bb-list-unordered\">",
  35. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list:o(:\w+)?\]\s*(?:<br\s*\/?>)?/si' => "\n<ol class=\"bb-list-ordered\">",
  36. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=1\]\s*(?:<br\s*\/?>)?/si' => "\n<ol class=\"bb-list-ordered,bb-list-ordered-d\">",
  37. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=i\]\s*(?:<br\s*\/?>)?/s' => "\n<ol class=\"bb-list-ordered,bb-list-ordered-lr\">",
  38. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=I\]\s*(?:<br\s*\/?>)?/s' => "\n<ol class=\"bb-list-ordered,bb-list-ordered-ur\">",
  39. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=a\]\s*(?:<br\s*\/?>)?/s' => "\n<ol class=\"bb-list-ordered,bb-list-ordered-la\">",
  40. '/(?<!\\\\)(?:\s*<br\s*\/?>\s*)?\[list(?::o)?(:\w+)?=A\]\s*(?:<br\s*\/?>)?/s' => "\n<ol class=\"bb-list-ordered,bb-list-ordered-ua\">",
  41. // escaped tags like \[b], \[color], \[url], ...
  42. '/\\\\(\[\/?\w+(?::\w+)*\])/' => "\\1"
  43.  
  44. );
  45. $message = preg_replace(array_keys($preg), array_values($preg), $message);
  46. return $message;
  47. }


  1. ul.bb-list-unordered { }
  2. ol.bb-list-ordered { }
  3. ol.bb-list-ordered-d { list-style-type:decimal; }
  4. ol.bb-list-ordered-lr { list-style-type:lower-roman; }
  5. ol.bb-list-ordered-ur { list-style-type:upper-roman; }
  6. ol.bb-list-ordered-la { list-style-type:lower-alpha; }
  7. ol.bb-list-ordered-ua { list-style-type:upper-alpha; }
  8. ol.bb-listitem { }
  9.  
  10. .bb-code,
  11. .bb-php {
  12. border: 1px solid black;
  13. padding: 10px;
  14. font-family: Courier;
  15. white-space: nowrap;
  16. }
  17.  
  18. .bb-quote {
  19. border: 1px solid black;
  20. padding: 10px;
  21. }
  22.  
  23. .bb-email { }
  24. .bb-url { }
  25.  
  26. .bb-image {
  27. border-width: 0;
  28. border-style: none;
  29. }


Ten post edytował b3 19.08.2009, 15:14:16
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 1.10.2025 - 07:21