Webboard

Pełna wersja: Parsowanie BBcode
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Wersja skryptu MyBB:
1.6.8

Adres forum:
-

Na czym polega problem:
Funkcja odpowiadająca za parsowanie treści w BBcode.

Piszę autorski portal pod MyBB, jak dotąd wszelkiej maści rzeczy, które napisałem działają tak jak ich pierwotne zadanie. Szukam funkcji, która umożliwi mi implementację w wtyczkę BBcode.

Zarówno parse_message jak i mycode_parse_code przerywają połączenie z serwerem - oto kawałek kodu, chcę aby wpisy były wyświetlane wg. BBcode, a nie w surowym stanie.

Kod PHP:
        $options = array(
            
'allow_html' => 0,
            
'allow_mycode' => 1,
            
'allow_smilies' => 1,
            
'me_username' => 1,
            
'nl2br' => 1
        
);

        
$message $parser->parse_message($data['message'], $options); // $data jest ładowane z bazy danych.
        
$content .= $message// Tutaj jest szkic, ale chcę wyświetlić same kodowanie dla przykładu. 

Macie jakieś sugestie? Jeżeli będzie potrzeba więcej kodu, mogę udostępnić.
Nie bardzo rozumiem... Jak przerywają połączenie z serwerem?
Nie najlepiej byłoby w tym wypadku includować global.php, potem plik parsera i korzystać z obiektu parser? Kopiowanie całości nie ma sensu.
Błąd 500 się ujawnia, uprawnienia muszą być - w końcu mam to na LH.
Sorki, nadal nie wiadomo o co chodzi...
To może inaczej, chcę zamienić surowy rekord $data['message'] na BBcode, wyświetlić na w(p)ortalu - własna wtyczka. W jaki sposób mam go wywołać?

Kod PHP:
$parser->parse_message($data['message'], [...]); 

W ten sposób jest wykonywany plik portal.php, ale jeżeli chcę użyć to w swojej wtyczce to "Strona nie może zostać załadowana". Tak wiem, ja też nie wiem o co chodzi z tym, dlatego staram się to mniej więcej wytłumaczyć. Pierwszy raz się z czymś takim spotkałem.
A jest ta klasa w ogóle dostępna?
Minimalny kod:

Kod PHP:
(...)
require_once 
MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;

$message $parser->parse_message($data['message'], $parser_options); 


Oczywiście zakładam, że gdzieś sobie zrobisz tablicę $parser_options tak jak pokazałeś to w poprzednim poście.
Próbowałem. No chyba, że coś knocę. Rzuć okiem na kod, który odpowiada za wortal - jeżeli zakoduję linijki odpowiadające do parsowania to strona wyświetla się normalnie - treść wiadomości na portalu jest w surowym stanie. Dla dowodu zarzucam screenem.

[Obrazek: 46844555435696398694.png]
[Obrazek: 91871659639003295044.png]
Hm.. może spróbuj usuwać fragmenty (w szczególności to gdzie masz $content) i sprawdzać, czy będzie działać.
Kod PHP:
<?php

define
("IN_MYBB"1);

require_once 
"./global.php";
require_once 
"inc/class_parser.php";

$parser = new postParser;
 
function 
show_wortal()
{
        global 
$db$mybb$lang$footer$headerinclude$header$parser$templates$content$theme;
        
add_breadcrumb("Wortal");
 
        
$q $db->query("SELECT t.tid, t.fid, t.subject, t.dateline, t.replies, p.pid, p.message, p.tid
                FROM "
.TABLE_PREFIX."posts p
                LEFT JOIN "
.TABLE_PREFIX."threads t ON (t.tid=p.tid)
                WHERE t.fid=2 AND t.visible='1' AND t.closed NOT LIKE 'moved|%' AND t.firstpost=p.pid
                ORDER BY t.dateline DESC
                LIMIT 0,5"
);
 
        while(
$data $db->fetch_array($q))
        {
 
                if(
my_strlen($data['subject']) > 85)
                {
                        
$data['subject'] = my_substr($data['subject'], 085) . "...";
                }
 
                
$thread['subject'] = htmlspecialchars($data['subject']);
 
                
$options = array(
            
'allow_html' => 0,
            
'allow_mycode' => 1,
            
'allow_smilies' => 1,
            
'me_username' => 1,
            
'nl2br' => 1
        
);
 
                
$thread['message'] = $parser->parse_message($data['message'], $options);
 
                
$thread['threadlink'] = get_thread_link($data['tid']);
                
$thread['lastpostlink'] = get_thread_link($data['tid'], 0"lastpost");
 
                
$thread['date'] = my_date($mybb->settings['dateformat'], $data['dateline']);
                
$thread['time'] = my_date($mybb->settings['timeformat'], $data['dateline']);
 
                
$content .= '<br>
                <table border="0" cellspacing="0" cellpadding="2" class="tborder">
                <tr>
                <td class="trow1">
                <img src="/images/wortal/txt.gif"/>
                <a href="'
.$thread['threadlink'].'"><strong>'.$thread['subject'].'</strong></a>
                <div style="float: right;">
                <img src="/images/wortal/clock.gif"/>
                <span class="smalltext">'
.$thread['date'].' '.$thread['time'].'</span>
                </div>
                </td>
                </tr>
                <td class="trow1">
                '
.$thread['message'].'
                </td>
                <tr>
                <td class="trow1" align="right">
                <span class="smalltext"><a href="'
.$thread['lastpostlink'].'">Komentarze</a> ('.$data['replies'].')</span>
                </td>
                </tr>
                </table>'
;
        }
 
        
output_page($content);
        exit;
}

show_wortal();

?>

Mi taki kod działa i ładnie parsuje.

Moja propozycja, zmień:

Kod PHP:
require_once MYBB_ROOT."inc/class_parser.php"
na
Kod PHP:
require_once "inc/class_parser.php"
Za 500 zawsze kryje sie jakis blad.

A jak jest blad, to mozna go zlogowac.

Wiec zajrzyj do logow (np. apache error log albo php errors log).
I co Enerv, rozwiązałeś problem?