Webboard

Pełna wersja: Stworzenie wtyczki która zmienia ikonę tematu
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
wersja skryptu MyBB: 1.8.4
adres forum: localhost
na czym polega problem:

Witam, mam pytanie jak zrobić plugin który jeśli temat nie ma ikony zamienia " " na "", wiem że jest możliwość modyfikacji pliku forumdisplay.php i usunięcia " " z $icon = " ", ale nie chciałbym tego robić po każdej aktualizacji MyBB.

Z góry dziękuje za pomoc i pozdrawiam
Podpinasz się pod odpowiedni hook: http://docs.mybb.com/1.8/development/plugins/hooks/

Sprawdzasz warunkiem czy istnieje w temacie ikona.

Potem to się przyda: http://pl.wikibooks.org/wiki/PHP/Podstaw...egularnych
Zrobiłem to tak, ale nie działa

robiłem na podstawie tego: http://community.mybb.com/archive/index....421-1.html

Kod:
function replaceiconplugin_info()
{
    global $lang;

    return array(
        'name'            => 'Zmiana pustej ikony tematu',
        'description'    => 'Zmiana pustej ikony tematu zamiast "&nbsp" na ""!',
        'version'        => '1.0',
        'compatibility'    => '18*'
    );
}

$plugins->add_hook("forumdisplay_thread", "replaceiconplugin_run");

function replaceiconplugin_run()
{
    global $thread, $icon;
    
    if($icon = " ")
    {
        str_replace( '&nbsp', '', $icon);
    }
}
Kod:
if($icon = " ")

Przejrzyj dokładnie kod i zastanów się, jak działa ten warunek i kiedy jest spełniany ;)
Druga sprawa, wynik str_replace trzeba przypisać do $icon, inaczej jest to wykonywane "w powietrzu" i niczego nie zmienia.
zmieniłem troche, ale nadal nie działa

Kod:
$plugins->add_hook("forumdisplay_thread", "replaceiconplugin_run");

function replaceiconplugin_run()
{
    global $thread, $icon;
    
    if($thread['icon'] == 0)
    {
        $icon = str_replace( '&nbsp', '', $icon);
    }
}
Teraz od wygląda ok, ale pytanie brzmi: czy to ma sens?
Jesteś pewien, że w $icon siedzi właśnie  ?

W celach testowych wyświetl sobie tą zmienną w funkcji, będziesz wiedział, jak sprawa wygląda.
Możliwe, że jak nie ma ikony (czyli wartość = 0) to silnik nic tam nie wrzuca.
odpowiadający za to fragment kodu
Kod:
        // If this thread has a prefix, insert a space between prefix and subject
        $thread['threadprefix'] = $threadprefix = '';
        if($thread['prefix'] != 0)
        {
            $threadprefix = build_prefixes($thread['prefix']);
            if(!empty($threadprefix))
            {
                $thread['threadprefix'] = $threadprefix['displaystyle'].' ';
            }
        }

        $thread['subject'] = $parser->parse_badwords($thread['subject']);
        $thread['subject'] = htmlspecialchars_uni($thread['subject']);

        if($thread['icon'] > 0 && $icon_cache[$thread['icon']])
        {
            $icon = $icon_cache[$thread['icon']];
            $icon['path'] = str_replace("{theme}", $theme['imgdir'], $icon['path']);
            $icon['path'] = htmlspecialchars_uni($icon['path']);
            $icon['name'] = htmlspecialchars_uni($icon['name']);
            eval("\$icon = \"".$templates->get("forumdisplay_thread_icon")."\";");
        }



        else
        {
            $icon = " ";
        }

4 ostatnie linijki kodu, tylko nie wiem jak nie edytując forumdisplay.php zmienić $icon = " "; na $icon = "";
Używasz zbyt wczesnego hooka - zmieniasz icon, ale potem skrypt i tak go ustawia pod siebie.
Spróbuj użyć forumdisplay_thread_end
Dzięki wielkie za pomoc, działa :)