Łamanie linii w znaczniku [PHP] w MyBB

No i znowu piszę o MyBB, jak widać, coś ostatnio natchnęło mnie na rozgrzebanie kilku rzeczy w tym skrypcie. 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:

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('#(&amp;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.

5 thoughts on “Łamanie linii w znaczniku [PHP] w MyBB

  1. No i proszę – rozpracowałeś to :) Co do samego [ php ] w MyBB to wolałbym zawsze użycie [ code ] z rozpoznaniem składni i w razie czego zastosowaniem kolorowania. Nie wiem, czy takie coś byłoby możliwe bez zbędnego obciążenia, ale rozwiązałoby na pewno sprawę pluginów typu GeSHi i… łamania spacji.

  2. Witam, mam taki problem otóż dodałem to jak powyżej jest napisane lecz nie działa mi to, znaczy nadal wpisy są rozciągnięte.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.