Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser
wookieb
post
Post #1





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Projekt jest już na githubie pod adresem
https://github.com/wookieb/bbcode

Proszę o dodawanie informacji o bugach właśnie tam.

UPDATE Wersja 1.2
[php bbcode, parser bbcode, advanced bbcode parser]
Chciałbym dziś zaprezentować swój mechanizm parsujący kod bbcode oraz ułatwiający nam kontrolę nad tym czy tagi są prawidłowo używane.
Klasa do pobrania:
https://github.com/wookieb/bbcode/zipball/master

Przykład działania:
http://wookieb.pl/bbcode/test.php

Readme.html w paczce oraz pod adresem http://wookieb.pl/bbcode/readme.html


Licencja
Skrypt wydany na licencji BSD. Dla własnego jak i komercyjnego użytku.

Ustawienia parsera
Ustawienia dla parsera znajdują się teraz w klasie BbCodeSettings. Ciekawsze z ustawień to

Zaufany kod
  1. $settings->trustText = false; // kod niezaufany
  2. $settings->trustText = true; // kod zaufany


Ustawienie kontroluje stopień sprawdzenia danych. Gdy kod bbcode sparsowaliśmy wcześniej to pobieramy jest wersję zaufaną i zapisujemy.
  1. $code = $bbcode->getBbcode();


Przy ponownym odczytaniu kodu, możemy oznaczyć kod jak zaufany. Spowoduje to ominięcie wielu operacji kontroli atrybutów, przez co parsowanie jest szybsze.

Kod
$bbcode = new BbCode();

$text='[b] Bla Bla [i] Hehe';
$bbcode->parse($text, false); // nie chcemy wyniku wiec ustawiamy na false
$code=$bbcode->getBbcode(); // [b] Bla Bla [i] Hehe[/i][/b]

// $code zapisujemy


// po pewnym czasie odczytujemy i parsujemy go jeszcze raz
$bbcode->getSettings()->trustText = true;
echo $bbcode->parse($code);


Dostępność tagów
Możliwe jest włączenie tylko niektórych tagów parsera

Kod
$bbcode = new BbCode();
$text = '[b]Pogrubienie[/b]
[i]Kursywa[/i]';

echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// <i>Kursywa</i>

$bbcode->getSettings()->availableTags = array('b');
echo $bbcode->parse($text);
// <b>Pogrubienie</b>
// Kursywa



Walidacja HTML (kolejności użycia)
Domyślnie parser poprawia kolejność użycia tagów.
np kod
Kod
[b] pogrubienie [i] Kursywa[/b]
[ul]
    [li]Element listy
[/b]
[/i]

Zamieni na

Kod
[b] pogrubienie [i] Kursywa[/i][/b]
[ul]
    [li]Element listy[/li]
[/ul]


Tworzenie zajawek
Parser potrafi tworzyć zajawke o odpowiedniej ilości znaków (ignorując przy tym tagi bbcode).
Wspiera różne kodowania.

Test pod adresem http://wookieb.pl/bbcode/cut_test.php


Rozszerzanie możliwości
Za pomocą tworzenia nowych tagów i dodawania ich specjalnych ustawień można rozszerzyć bbcode o dodatkowe tagi, możliwości.
Szczególnie chciałbym zwrócić uwage na możliwość "przetrzepania" kodu przez funkcje filtrów, dzięki którym możemy tworzyć zaawansowane zależności.
Informacje na temat ustawień dostępne pod linkiem http://wookieb.pl/bbcode/readme.html

ZACHĘCAM DO OCEN, WNOSZENIA WŁASNYCH UWAG A TAKŻE PROPOZYCJI ZMIAN
Mam nadzieję, że przyda się niejednej osobie, która dostrzeże możliwości użycia parsera NIE TYLKO do Bbcode (IMG:style_emoticons/default/smile.gif) i nie tylko.

Update - 2009.05.31
Dodałem tag youtube do paczki.


Inne zmiany:
- poprawiony generowany kod html dla taga IMG
- poprawiona metoda wyszukiwania nazwy taga
- poprawiona szybkość działania
- przeniesienie ustawień do BbCodeSettings
- poprawiona walidacji urli
- dodatkowe zabezpieczenia przed XSS

Ten post edytował wookieb 23.08.2011, 19:46:20
Powód edycji: [wookieb]: [wookieb]: [Spawnm]: update
Go to the top of the page
+Quote Post
12 Stron V  « < 4 5 6 7 8 > »   
Start new topic
Odpowiedzi (100 - 119)
wookieb
post
Post #101





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Problem poprawiony i nowa paczka jest na serwerze. Plik BbCode.class.php do zmiany
Go to the top of the page
+Quote Post
redelek
post
Post #102





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Witam,

Ostatnio kolega @wookieb podał mi kod do swojej klasy bbcode.
Wszystko działa prawie super (IMG:style_emoticons/default/smile.gif) Chodzi o wprowadzenie kolorowania w geshi
Zrobiłem to tak
  1. <?php
  2.  
  3. include_once('Bbcode/BbCode.class.php');
  4. $bb=new BbCode();
  5. $text='POGROBIONE
  6.  
  7. /*oczywiście tu wpisuję znacznki [php] tylko na forum się to rozwal*/
  8. if ($ddd == "aaa") {
  9. echo "bbb";
  10. }
  11. /*
a tu go zamykam*/
';
echo '<fieldset class="pre"><legend>Oryginalny tekst</legend>'.$text.'</fieldset>';
$bb->parse($text, false);
echo '<fieldset><legend>Po BBC</legend'.$bb->getHtml().'</fieldset>';


?>[/php]

Znalazłem w klasie code.php odblokowanie funkcji GESHI. Niestety pomimo usilnych starań nie koloruje mi składni (IMG:style_emoticons/default/sad.gif)
Czy może ktoś mi pomoc ?

Dzięki

Ten post edytował redelek 25.05.2010, 10:33:54
Go to the top of the page
+Quote Post
wookieb
post
Post #103





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Było
http://forum.php.pl/index.php?act=findpost...&pid=684713

Następnym razem poruszaj takie sprawy w temacie dotyczącym tego skryptu bo robi się bałagan na forum
// EDIT: Dziękuję za połączenie tematów (IMG:style_emoticons/default/smile.gif)


Ten post edytował wookieb 25.05.2010, 11:34:43
Go to the top of the page
+Quote Post
redelek
post
Post #104





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


oki tego nie widziałem

Ale jak zrobiłem zmiany z code.php
  1. <?php
  2.  
  3. /**
  4.  * Tag CODE
  5.  * @package Parser
  6.  * @subpackage Filters
  7.  * @author wookieb
  8.  * @version 1.1
  9.  */
  10. class BbCodeFilterCode
  11. {
  12. public $tags=array(
  13. 'code'=>array(
  14. 'open'=>'div class="code_wrapper"',
  15. 'close'=>'div',
  16. 'notallowed_child'=>'all',
  17. 'leave_notallowed_child'=>1,
  18. 'leave_notallowed_parent'=>1,
  19. 'parse_body'=>'parseCode'
  20. )
  21. );
  22.  
  23. /**
  24. * Parsuje tag CODE
  25. * @param array $tag
  26. * @param array $openNode
  27. * @param array $body
  28. * @param array $closeNode
  29. */
  30. /*public function parseCode($tag, &$openNode, &$body, &$closeNode)
  31. {
  32. // tutaj mozemy dodać geshi czy to tez sie podoba
  33. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  34. $closeNode['text']='</div>'.$closeNode['text'];
  35.  
  36. }
  37.  
  38. */
  39. /**
  40. * Parsuje tag CODE używając GESHI
  41. * @param array $tag
  42. * @param array $openNode
  43. * @param array $body
  44. * @param array $closeNode
  45. */
  46.  
  47. public $tag=array(
  48. 'php'=>array(
  49. 'open'=>'div class="code_wrapper"',
  50. 'close'=>'div',
  51. 'notallowed_child'=>'all',
  52. 'leave_notallowed_child'=>1,
  53. 'leave_notallowed_parent'=>1,
  54. 'parse_body'=>'parsePHP'
  55. ),
  56. 'code'=>array(
  57. 'open'=>'div class="code_wrapper"',
  58. 'close'=>'div',
  59. 'notallowed_child'=>'all',
  60. 'leave_notallowed_child'=>1,
  61. 'leave_notallowed_parent'=>1,
  62. 'parse_body'=>'parseCode'
  63. )
  64. );
  65.  
  66. public function parsePhp($tag, &$openNode, &$body, &$closeNode)
  67. {
  68. $language = 'php';
  69. $this->parseCode($tag, $openNode, $body, $closeNode, 'php');
  70. }
  71.  
  72.  
  73. public function parseCode($tag, &$openNode, &$body, &$closeNode, $language = 'default')
  74. {
  75. // laczymy tresc w całość
  76.  
  77. $content = '';
  78. foreach($body as $key => &$node)
  79. {
  80. $content.= $node['text'];
  81. $node['text'] = '';
  82.  
  83. // usuwamy zbedne elementy
  84. if($key!=0) unset($body[$key]);
  85. }
  86.  
  87. require_once 'class.geshi.php';
  88.  
  89.  
  90. $geshi = new GeSHi($content, $language);
  91. $body[0]['tagText'] = $content;
  92. $body[0]['text'] = $geshi->parseCode();
  93. $body[0]['nohtmlspecialchars'] = 1;
  94.  
  95. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  96. $closeNode['text']='</div>'.$closeNode['text'];
  97. }
  98.  
  99.  
  100. }


To wywala mi taki błąd
Catchable fatal error: Object of class BbCodeSettings could not be converted to string in D:\www\TESTY-MODULOW\geshi_testy\geshi\geshi.php on line 667

Przepraszam, ale czarna magia dla mnie. Chodzi mi o to że jak w tekscie znajdzie [code lanh='php'] [/code] to pokoloruje to.

Go to the top of the page
+Quote Post
wookieb
post
Post #105





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A no tak bo zmienił się parser
  1. public function parseCode($tag, &$openNode, &$body, &$closeNode, $settings, $language = 'default')

Oraz
  1.  
  2. public function parsePhp($tag, &$openNode, &$body, &$closeNode, $settings)
  3. {
  4. $language = 'php';
  5. $this->parseCode($tag, $openNode, $body, $closeNode, $settings, 'php');
  6. }

Powinno być ok

Jeżeli chcesz obsłużyć parametr lang to czytaj readme no i przejrzyj w funkcji zawartość zmiennej $openNode
  1. print_r($openNode);

Żebyś wiedział, skąd wyciągnać wartość atrybutu
Go to the top of the page
+Quote Post
redelek
post
Post #106





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Poprawiłem i teraz mi wyświetla
Fatal error: Call to undefined method GeSHi::parseCode() in D:\www\TESTY-MODULOW\geshi_testy\Bbcode\Filters\Code.php on line 94

a ta linijka to
  1. $body[0]['text'] = $geshi->parseCode();


Go to the top of the page
+Quote Post
wookieb
post
Post #107





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




To w takim razie sprawdź jaka funkcja przeparsuje code w geshi, bo juz nie pamietam, może miałem inna wersje. Ale generalnie wiesz o co chodzi.
Go to the top of the page
+Quote Post
redelek
post
Post #108





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Witam,

Już doszedłem prawie gdzie był problem. W Geshi zostało zmienione parseCode() na parse_code() i już działa to znaczy nie wyświetla błędu.
Niestety kod nie jest pokolorowany jest wyświetlony jako default
Code.php
  1. <?php
  2.  
  3. /**
  4.  * Tag CODE
  5.  * @package Parser
  6.  * @subpackage Filters
  7.  * @author wookieb
  8.  * @version 1.1
  9.  */
  10. class BbCodeFilterCode
  11. {
  12. public $tags=array(
  13. 'code'=>array(
  14. 'open'=>'div class="code_wrapper"',
  15. 'close'=>'div',
  16. 'notallowed_child'=>'all',
  17. 'leave_notallowed_child'=>1,
  18. 'leave_notallowed_parent'=>1,
  19. 'parse_body'=>'parseCode'
  20. )
  21. );
  22.  
  23. /**
  24. * Parsuje tag CODE
  25. * @param array $tag
  26. * @param array $openNode
  27. * @param array $body
  28. * @param array $closeNode
  29. */
  30. /*public function parseCode($tag, &$openNode, &$body, &$closeNode)
  31. {
  32. // tutaj mozemy dodać geshi czy to tez sie podoba
  33. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  34. $closeNode['text']='</div>'.$closeNode['text'];
  35.  
  36. }
  37.  
  38. */
  39. /**
  40. * Parsuje tag CODE używając GESHI
  41. * @param array $tag
  42. * @param array $openNode
  43. * @param array $body
  44. * @param array $closeNode
  45. */
  46.  
  47. public $tag=array(
  48. 'php'=>array(
  49. 'open'=>'div class="code_wrapper"',
  50. 'close'=>'div',
  51. 'notallowed_child'=>'all',
  52. 'leave_notallowed_child'=>1,
  53. 'leave_notallowed_parent'=>1,
  54. 'parse_body'=>'parsePHP'
  55. ),
  56. 'code'=>array(
  57. 'open'=>'div class="code_wrapper"',
  58. 'close'=>'div',
  59. 'notallowed_child'=>'all',
  60. 'leave_notallowed_child'=>1,
  61. 'leave_notallowed_parent'=>1,
  62. 'parse_body'=>'parseCode'
  63. )
  64. );
  65.  
  66. public function parsePhp($tag, &$openNode, &$body, &$closeNode, $settings)
  67. {
  68. $language = 'php';
  69. $this->parseCode($tag, $openNode, $body, $closeNode, $settings, 'php');
  70. }
  71.  
  72.  
  73.  
  74. public function parseCode($tag, &$openNode, &$body, &$closeNode, $settings, $language = 'default')
  75.  
  76. {
  77. // laczymy tresc w całość
  78. print_r($openNode);
  79. $content = '';
  80. foreach($body as $key => &$node)
  81. {
  82. $content.= $node['text'];
  83. $node['text'] = '';
  84.  
  85. // usuwamy zbedne elementy
  86. if($key!=0) unset($body[$key]);
  87. }
  88.  
  89. require_once 'geshi/geshi.php';
  90.  
  91.  
  92. $geshi = new GeSHi($content, $language);
  93. $body[0]['tagText'] = $content;
  94. $body[0]['text'] = $geshi->parse_code();
  95. $body[0]['nohtmlspecialchars'] = 1;
  96.  
  97. $openNode['text'].='<div class="code_title">Kod</div><div class="code_area">';
  98. $closeNode['text']='</div>'.$closeNode['text'];
  99.  
  100.  
  101. }
  102.  
  103.  
  104. }


i zniknieła zmienna użyta w przykładowym skrypcie php
  1. <?php
  2.  
  3. include_once('Bbcode/BbCode.class.php');
  4. $bb=new BbCode();
  5.  
  6.  
  7. $text="POGROBIONE
  8. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1--> if ( $ddd == 'aaa') {
  9.     echo 'pupa';
  10.     }<!--c2--></div><!--ec2-->";
  11. echo '<fieldset class="pre"><legend>Oryginalny tekst</legend>'.$text.'</fieldset>';
  12. $bb->parse($text, false);
  13. echo '<fieldset><legend>Po BBC</legend'.$bb->getHtml().'</fieldset>';
  14.  
  15.  
  16. ?>


Mogę prosić o pomoc lub naprowadzenie ?
Go to the top of the page
+Quote Post
wookieb
post
Post #109





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A gdzie ty masz tag "code" uzyty?
Poza tym pisałem, przeczytaj readme.html jak się dodaje parametry do tagów
Go to the top of the page
+Quote Post
redelek
post
Post #110





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


to forum wycieło znaczniki code.
Kurcze no mam te tagi dopisane

  1. public $tag=array(
  2. 'php'=>array(
  3. 'open'=>'div class="code_wrapper"',
  4. 'close'=>'div',
  5. 'notallowed_child'=>'all',
  6. 'leave_notallowed_child'=>1,
  7. 'leave_notallowed_parent'=>1,
  8. 'parse_body'=>'parsePhp'
  9. ),
  10. 'code'=>array(
  11. 'open'=>'div class="code_wrapper"',
  12. 'close'=>'div',
  13. 'notallowed_child'=>'all',
  14. 'leave_notallowed_child'=>1,
  15. 'leave_notallowed_parent'=>1,
  16. 'parse_body'=>'parseCode'
  17. )
  18. );
Go to the top of the page
+Quote Post
wookieb
post
Post #111





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Przecież cały czas mówię o dodaniu atrybutu LANG do tagu CODE.
Go to the top of the page
+Quote Post
redelek
post
Post #112





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Dodałem atrybut
  1. public $tag=array(
  2. 'php'=>array(
  3. 'open'=>'div class="code_wrapper"',
  4. 'close'=>'div',
  5. 'notallowed_child'=>'all',
  6. 'leave_notallowed_child'=>1,
  7. 'leave_notallowed_parent'=>1,
  8. 'parse_body'=>'parsePhp'
  9. ),
  10. 'code'=>array(
  11. 'open'=>'div class="code_wrapper"',
  12. 'close'=>'div',
  13. 'notallowed_child'=>'all',
  14. 'leave_notallowed_child'=>1,
  15. 'leave_notallowed_parent'=>1,
  16. 'attributes'=>array('lang'=>array('attr'=>'lang')),
  17. 'parse_body'=>'parseCode'
  18. )
  19. );

i ndal nie koloruje (IMG:style_emoticons/default/sad.gif)
w kodzie mam [code lang="php"]

Ten post edytował redelek 26.05.2010, 11:27:19
Go to the top of the page
+Quote Post
wookieb
post
Post #113





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Przeczytaj jeszcze raz moje posty.
napisałem:
DODAJ ATRYBUT
+
SPRAWDŹ W KODZIE JAK TEN ATRYBUT PRZEKAZAĆ DO GESHI
Go to the top of the page
+Quote Post
redelek
post
Post #114





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


A może mi Pan pomóc,

Kurcze nie jestem taki mocy w PHP i ślęczę nad tym od dwóch dni i nic ciekawego wymodzić nie mogę.
Tak kiepski jestem wiem. Amatorsko się tym zajmuję na potrzeby zabawy i wolnego czasu.
Proszę o wyrozumiałość, potrzebne mi jest to do moich skryptów z języka bash

Ten post edytował redelek 26.05.2010, 12:33:16
Go to the top of the page
+Quote Post
GyniO
post
Post #115





Grupa: Zarejestrowani
Postów: 53
Pomógł: 3
Dołączył: 8.02.2010

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


Mam jeszcze tylko 1 pytanie, w którym miejscu mogę zrobić parsowanie emotów? tzn ": )" na (IMG:style_emoticons/default/smile.gif) ?

---------------------------------------------------------------------------------------------------------------

Ok, udało mi się podłączyć Geshi do Tego parsera, nie miałem żadnych większych problemów ;]

Ale mam pewien problem z wyświetlaniem tego, mianowicie na chrome wszystko działa:
http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/

A na Mozilli wywala błąd XML
  1. Błąd parsowania XML: niezdefiniowana jednostka
  2. Obszar: <a href="http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/" target="_blank">http://gynio.pl/artykul/8-geshi-dodatek-do-parsera-BBcode/</a>
  3. Numer linii: 77, kolumna 131:<div class="code_wrapper"><div class="code_title">Kod</div><div class="code_area"><pre class="php" style="font-family:monospace;">&nbsp;


Problem tkwi w  
  1. &nbsp;



Strona to mój "cms" z OPT.

Ten post edytował GyniO 23.06.2010, 13:58:17
Go to the top of the page
+Quote Post
Crozin
post
Post #116





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Masz, pokalało Cię za używanie twardych spacji do czegoś do czego nie zostały stworzone.

Ale żeby nie było: http://changelog.ca/log/2006/06/12/making_...ml_rss_and_atom
Go to the top of the page
+Quote Post
GyniO
post
Post #117





Grupa: Zarejestrowani
Postów: 53
Pomógł: 3
Dołączył: 8.02.2010

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


Ok działa (IMG:style_emoticons/default/smile.gif)

Parser
zamienia \t na 4x nbsp w pliku bbcode.class.php

Ten post edytował GyniO 23.06.2010, 14:55:29
Go to the top of the page
+Quote Post
athabus
post
Post #118





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Właśnie szukałem czegoś do parsowania bbcodu z możliwością dodania kilku niestandardowych znaczników i natrafiłem na Twoją fajną klasę. Na prawdę niezła robota. Z moich uwag to:
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie.
- zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części

Najbardziej podoba mi się automatyczne "domykanie" tagów - wiele rozwiązań nie ma tego zaimplementowanego a jest to przydatna funkcja.

Ogólnie dobra robota - gratuluje.
Go to the top of the page
+Quote Post
wookieb
post
Post #119





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(athabus @ 2.07.2010, 14:32:07 ) *
- nie wiem, czy dobrze widzę, ale czy niestandardowe tagi trzeba dopisać "na stałe" do klasy? Jeśli tak to fajnie byłoby dodać jakąś metodę pozwalającą na zmianę w locie - raz mogę potrzebować innego zestawu tagów a drugi raz innego. Fajnie aby takie rzeczy można było zmieniać w kodzie.

To faktycznie mój błąd, że nie zadbałem o możliwośc stworzenia dynamicznych filtrów aczkolwiek klasa jest przygotowana pod szereg przeróżnych kombinacji filtrów, możliwość włączenie wyłączenia poszczególnych tagów (BbCodeSettings)

Cytat(athabus @ 2.07.2010, 14:32:07 ) *
- zadeklarowałbym metody jak protected a nie private tak, aby w razie czego można było dziedziczyć po Twojej klasie - znów powód jak powyżej - czasami mogę potrzebować jakiś niestandardowych rozwiązań i zamiast przerabiać całą klasę mógłbym tylko dodać/zmienić pewne części

Metod prywatnych używa się kiedy chcemy aby użytkownik nie mógł ich nadpisać i bezpośrednio używać z tego m.in względu aby nie zepsuł działania pewnego elementu. Tak więc uznałem, że większość metody parsujące powinny być prywatne, aczkolwiek faktycznie ładowanie filtrów może być chronione i zależne od użytkownika. Jak będę prowadził pracę nad modyfikacjami na pewno to zrobię (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Zajec
post
Post #120





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

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


Potrzebuję wymienić parser BBCode i cieszę się że znalazłem coś porządnego (IMG:style_emoticons/default/smile.gif)

Niestety pierwsza próba odpalenia sprawiła kilka kłopotów, otóż postanowiłem wrzucić klasę do odpowiedniego podkatalogu mojego systemu. Wtedy okazało się, że robiąc "require_once 'include/tools/parsers/BbCode.php" wszystko się sypie, ze względu na relatywność ścieżek.

Poprawiłem to prostym znanym trickiem z dirname i __FILE__. Dzielę się swoim patchem, fajnie gdybyś go włączy do swojego "mainline" (IMG:style_emoticons/default/smile.gif)
http://files.zajec.net/bbcode.0001.patch.txt
Go to the top of the page
+Quote Post

12 Stron V  « < 4 5 6 7 8 > » 
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: 22.08.2025 - 22:23