Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Implementacja GeSHi
Forum PHP.pl > Forum > PHP
piotrooo89
Mam pewien problem z implementacją GeSHi na stronie. Więc od początku.

Pobieram dane z bazy i dostaje je w postaci:

  1. $zmienna = 'jakiś tekst <pre lang="php" line="1">php php php</pre> znów jakiś nowy tekst <pre lang="sql">sql sql sql</pre>';


i teraz chcę zaimplementować GeSHi aby kolorował mi owy tekst, próbowałem w ten sposób:

  1. include ('geshi/geshi.php');
  2. $zmienna = 'tekst tekst <pre lang="php" line="1">phptekst phptekst</pre> tekst2 tekst2 <pre lang="sql">sqltekst sqltekst</pre> tekst3 tekst3';
  3.  
  4. preg_match_all("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", $zmienna, $a);
  5.  
  6. print_r($a);
  7.  
  8. $geshi = new GeSHi($a[3][0], $a[1][0]);
  9.  
  10. echo preg_replace("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", $geshi->parse_code();, $zmienna);


tylko że jak będę miał n rożnych kodów, skrypt zamieni mi n na jednakowe kody (inaczej nie da rady bo w tablicy $a podałem phptekst phptekst)

W jaki dobry sposób rozwiązać ten problem, siedzę już chwilę nad tym i jakoś nie mogę nic nadzwyczajnego wymyślić.
wookieb
A myślałeś o preg_replace_callback? Dodatkowo chyba zapomniałeś o dodanie znaku ? do gwiazdki przed </pre>
piotrooo89
no już bliżej jak dalej. teraz problem mam z tym że wyświetla mi sie tylko 1 literka a nie cały tekst.

  1. include ('geshi/geshi.php');
  2. $zmienna = 'tekst tekst <pre lang="php" line="1">phptekst phptekst</pre> tekst2 tekst2 <pre lang="sql">sqltekst sqltekst</pre> tekst3 tekst3';
  3.  
  4. function zmien($match)
  5. {
  6. $geshi = new GeSHi($match[3][0], $match[1][0]);
  7. $geshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS);
  8. $geshi->set_overall_style('font-size: 90%; color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', true);
  9. $geshi->set_line_style('font: normal normal 95% "Courier New", Courier, monospace; color: #003030;', 'font: bold normal 95% "Courier New",
  10. Courier, monospace; color: #006060;', true);
  11. return $geshi->parse_code();
  12. }
  13.  
  14. echo preg_replace_callback("/<pre(?:lang=[\"']([\w-]*)[\"']|line=[\"'](\d*)[\"']|\s)+>(.*)<\/pre>\s*/siU", 'zmien', $zmienna);
wookieb
A zobacz sobie co masz w $match to dostaniesz odpowiedź smile.gif
piotrooo89
tylko że ja w tablicy mam poprawnie

Kod
Array ( [0] =>

phptekst phptekst

[1] => php [2] => 1 [3] => phptekst phptekst ) Array ( [0] =>

sqltekst sqltekst

[1] => sql [2] => [3] => sqltekst sqltekst )


więc IMHO RegEx jest ok.

ok już wiem, nie tablice wielowymiarowe... :/
wookieb
Nie podałeś po prostu całego ciągu
  1. $geshi = new GeSHi($match[3], $match[1]);
piotrooo89
tak tak, podawałem jako tablice wielo wymiarowe, dopiero po chwili zauważyłem że coś nie tak. dzięki smile.gif

pociągnę jeszcze ten temat. nie ma to już związku z php mianowicie ze stylami co zrobić aby geshi łamał mi tekst?
obecnie mam tak, jak zrobić to bez dodawania overflow: scroll? czy istnieje taka opcja?


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.