Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

12 Stron V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> [klasa] Zaawansowany parser bbcode (php5), advanced bbcode parser
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 - 17:53