Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
[Plugin] Trotz "global" Variable leer?
#1
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 */

Was ist der Unterschied zwischen der Politik und der Informatik?
In der Informatik ignoriert man führende Nullen...
Zitieren
#2
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
Ich gebe keinen Support per Messenger oder PN!
Zitieren
#3
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();

Was ist der Unterschied zwischen der Politik und der Informatik?
In der Informatik ignoriert man führende Nullen...
Zitieren
#4
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
Ich gebe keinen Support per Messenger oder PN!
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
Exclamation Plugin aktiviert, Seite Plugin-Config leer fussfolter 5 2.968 22.03.2013, 01:29
Letzter Beitrag: GreenDragon
  Themen zusammenfügen trotz SEO Plugin Artificial Boss 5 2.154 13.02.2011, 10:15
Letzter Beitrag: frostschutz
  [Done] [Eigenes Plugin] Variable verwenden Zwoetzen 2 1.661 04.02.2008, 20:09
Letzter Beitrag: Zwoetzen