MyBB.de Forum
[Plugin] Trotz "global" Variable leer? - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html)
+--- Thema: [Plugin] Trotz "global" Variable leer? (/thread-11171.html)



[Plugin] Trotz "global" Variable leer? - Zwoetzen - 05.10.2008

Hi alle zusammen

[MyBB 1.4.2]
Ich arbeite gerade mit jemanden zusammen an einem Plugin, dass gewisse MyCodes für die schnelle Verlinkung zu einigen Seiten für ein Spiel (TrackMania) bereit stellen soll. Da die URLs dieser Seiten sich ändern können, wollten wir diese in einem globalen Array zusammenfassen, so dass das Ändern nur an einer Stelle geschehen muss.

Das Problem:
Trotz dem "global" in den Funktionen parse_tm_codes() und show_dynamic_tm_help() wird das Array $tm_url nicht erkannt. Die (testweise eingefügten) Ausgaben sind leer. (Siehe unten)

Die Frage logischerweise:
Was machen wir falsch? ^^

Codeausschnitt:
PHP-Code:
/* Es wurden noch weitere Hooks festgelegt, die hier aber nicht relevant sind */
$plugins->add_hook("misc_help_helpdoc_end""show_dynamic_tm_help");
$plugins->add_hook("parse_message""parse_tm_codes");

/* Nach den Hooks wurde direkt das Array deklariert */
$tm_url = array( // 1 for ID
    
'sm'        => 'http://sharemania.eu/track.php?id={1}',
    
'sm_img'    => 'http://sharemania.eu/img/thumbs/{1}.jpg',
    
'tmcp'        => 'http://www.trackmania-carpark.com/car.php?id={1}',
    
'tmmod'        => 'http://www.tmmod.info/index.php?f=viewMod&id={1}',
    
'tmmod_img'    => 'http://www.tmmod.info/mods/{1}/mini/{2}.jpg'// 2 for Image No.
    
'tmx'        => 'http://{2}.tm-exchange.com/main.aspx?action=trackshow&id={1}'// 2 for Game
    
'tmx_img'    => 'http://{2}.tm-exchange.com/get.aspx?action=trackscreen&id={1}&dummy=x.jpg'// 2 for Game
);

/* Hier würden jetzt die anderen Funktionen kommen, die wichtig für das Plugin sind */


function parse_tm_codes($message
{
    global 
$db$lang$mybb$parser$tm_url;
    
/* Trotz dem global bleibt folgende Ausgabe leer */
    
print_r($tm_url);
/* Den eigentlichen Code der Funktion is nicht weiter spektakulär */
}

function 
show_dynamic_tm_help() 
{
    global 
$db$helpdoc$mybb$lang$site_url;
    global 
$tm_url;

    
print_r($tm_url);
/* selbe wie oben */




RE: [Plugin] Trotz "global" Variable leer? - Garlant - 05.10.2008

Hallo Zwoetzen,

wenn ich das richtig sehe, wird das array im Plugin selbst definiert, richtig?

Die Funktionen werden aber an anderer Stelle aufgerufen.
Versuche bitte folgendes:
Füge in der Plugindatei einen weiteren Hookaufruf ein.

PHP-Code:
$plugins->add_hook("misc_start""parse_array");

function 
parse_array()
{
    global 
$tm_url;

    
$tm_url = array( // 1 for ID
        
'sm'        => 'http://sharemania.eu/track.php?id={1}',
        
'sm_img'    => 'http://sharemania.eu/img/thumbs/{1}.jpg',
        
'tmcp'        => 'http://www.trackmania-carpark.com/car.php?id={1}',
        
'tmmod'        => 'http://www.tmmod.info/index.php?f=viewMod&id={1}',
        
'tmmod_img'    => 'http://www.tmmod.info/mods/{1}/mini/{2}.jpg'// 2 for Image No.
        
'tmx'        => 'http://{2}.tm-exchange.com/main.aspx?action=trackshow&id={1}'// 2 for Game
        
'tmx_img'    => 'http://{2}.tm-exchange.com/get.aspx?action=trackscreen&id={1}&dummy=x.jpg'// 2 for Game
    
);


Mfg Garlant


RE: [Plugin] Trotz "global" Variable leer? - Zwoetzen - 05.10.2008

Danke für die Antwort, Garlant.

Habe es leicht anders gelöst:
Anstatt "blind" jedes mal das Array anzulegen, rufe ich die angelegte Funktion "zu Fuß" in den betreffenden Funktionen auf, sodass das Array nur angelegt wird, wenn es auch wirklich gebraucht wird Wink
Aber danke für den Ansatz, der war genau richtig Smile

PHP-Code:
/* Set the URLS of the linked pages */
function set_tm_url()
{
    global 
$tm_url;
    
    
$tm_url = array( // 1 for ID
        
'sm'        => 'http://sharemania.eu/track.php?id={1}',
        
'sm_img'    => 'http://sharemania.eu/img/thumbs/{1}.jpg',
        
'tmcp'        => 'http://www.trackmania-carpark.com/car.php?id={1}',
        
'tmmod'        => 'http://www.tmmod.info/index.php?f=viewMod&id={1}',
        
'tmmod_img'    => 'http://www.tmmod.info/mods/{1}/mini/{2}.jpg'// 2 for Image No.
        
'tmx'        => 'http://{2}.tm-exchange.com/main.aspx?action=trackshow&id={1}'// 2 for Game
        
'tmx_img'    => 'http://{2}.tm-exchange.com/get.aspx?action=trackscreen&id={1}&dummy=x.jpg'// 2 for Game
    
);
}
[...]
function 
parse_tm_codes($message
{
    global 
$db$lang$mybb$parser$site_url$tm_url;

    
set_tm_url();




RE: [Plugin] Trotz "global" Variable leer? - Garlant - 05.10.2008

alternativ, kannst du es wie folgt machen (habe gerade ein enig herum gespielt)

PHP-Code:
$plugins->add_hook("misc_start""parse2_array");
$plugins->add_hook("misc_start""show_dynamic_tm_help"); 

In show_dynamic_tm_help musst du nun noch die Abfrage hinzufügen:
PHP-Code:
if($mybb->input['action'] == 'help') {
// das bisherige hier rein...


So funktioniert es dann. Wieso du dich in den hook der help nicht einhaken kannst, kann ich gerade nicht sagen. Ich kann aber noch ein wenig schauen.

Mfg Garlant