Łukasz Tkacz
- Mentor MyBB
- 2 137
To jeszcze raz ja dzisiaj
Są w MyBB rzeczy naprawdę przydatne, ale czasami i dosyć upierdliwe, że pozwolę sobie na takie wyrażenie. Jedną z nich jest automatyczne łamanie linii np. w cytatach. Właśnie gdy używamy znaczników bbcode/mycode „quote” lub też „code” i wewnątrz nich umieścimy obszerne linijki, zostaną one automatycznie złamane i tekst nie „rozwali” nam posta, nie będzie również tworzył scroolbara w poziomie. Niestety to samo nie dotyczy już znacznika do umieszczania i kolorowania kodu php, który został zawarty w MyBB. Swoją drogą, ciekawe po co w ogóle wyposażyli skrypt forum dyskusyjnego standardowo w coś takiego, na większości for będzie to zupełnie nieprzydatne…
Dobra, mniejsza z tym, przejdźmy do analizy problemu i rozwiązania. Po rzuceniu okiem na klasę zajmującą się parsowaniem wiadomości możemy zobaczyć, że za kolorowanie i „problem” odpowiada wbudowana w PHP funkcja highlight_string odpowiedzialna jak sama nazwa mówi właśnie za kolorowanie tego kodu. Ma ona to do siebie, że wszelkie spacje, odstępy itp. zostają zamienione na spacje twarde, niełamliwe czyli „ ”. Da się to jednak przeskoczyć poprzez dodanie funkcji, która będzie zamieniała takie pojedyncze betonowe mury na zwykłe odstępy. Edytujemy więc plik inc/class_parser.php, odnajdujemy na samym końcu fragment:
i dodajemy przed nim:
następnie odszukujemy fragment (ok. linii 826):
i dodajemy przed nim taki fragment:
I to już wszystko, zapisujemy plik i umieszczamy na serwerze. Od tej chwili kod zawarty w znacznikach php również będzie łamany, przez co unikniemy bloków z ogromnymi rozmiarami oraz przewijania w poziomie. Oczywiście ma to pewną wadę: takie złamanie linii wiąże się w niektórych wypadkach z utratą oryginalnego formatowania tzn. coś, co było w jednej linii, może nam zjechać i utworzyć niższą. Rzecz jasna nie będzie to powodowało nieprawidłowego działania, bowiem występuje gdy utworzenie spacji lub łamania linii jest możliwe i dozwolone.
Są w MyBB rzeczy naprawdę przydatne, ale czasami i dosyć upierdliwe, że pozwolę sobie na takie wyrażenie. Jedną z nich jest automatyczne łamanie linii np. w cytatach. Właśnie gdy używamy znaczników bbcode/mycode „quote” lub też „code” i wewnątrz nich umieścimy obszerne linijki, zostaną one automatycznie złamane i tekst nie „rozwali” nam posta, nie będzie również tworzył scroolbara w poziomie. Niestety to samo nie dotyczy już znacznika do umieszczania i kolorowania kodu php, który został zawarty w MyBB. Swoją drogą, ciekawe po co w ogóle wyposażyli skrypt forum dyskusyjnego standardowo w coś takiego, na większości for będzie to zupełnie nieprzydatne…
1 Edycja class_parser.php
Dobra, mniejsza z tym, przejdźmy do analizy problemu i rozwiązania. Po rzuceniu okiem na klasę zajmującą się parsowaniem wiadomości możemy zobaczyć, że za kolorowanie i „problem” odpowiada wbudowana w PHP funkcja highlight_string odpowiedzialna jak sama nazwa mówi właśnie za kolorowanie tego kodu. Ma ona to do siebie, że wszelkie spacje, odstępy itp. zostają zamienione na spacje twarde, niełamliwe czyli „ ”. Da się to jednak przeskoczyć poprzez dodanie funkcji, która będzie zamieniała takie pojedyncze betonowe mury na zwykłe odstępy. Edytujemy więc plik inc/class_parser.php, odnajdujemy na samym końcu fragment:
}
?>
i dodajemy przed nim:
private static function deleteNbsp($text)
{
return (strlen($text[0]) < 7) ? ' ' : $text[0];
}
następnie odszukujemy fragment (ok. linii 826):
// Send back the code all nice and pretty
i dodajemy przed nim taki fragment:
$code = preg_replace_callback('#(&nbsp;)+#', 'postParser::deleteNbsp', $code);
I to już wszystko, zapisujemy plik i umieszczamy na serwerze. Od tej chwili kod zawarty w znacznikach php również będzie łamany, przez co unikniemy bloków z ogromnymi rozmiarami oraz przewijania w poziomie. Oczywiście ma to pewną wadę: takie złamanie linii wiąże się w niektórych wypadkach z utratą oryginalnego formatowania tzn. coś, co było w jednej linii, może nam zjechać i utworzyć niższą. Rzecz jasna nie będzie to powodowało nieprawidłowego działania, bowiem występuje gdy utworzenie spacji lub łamania linii jest możliwe i dozwolone.