PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Plug-In-System global_complete Hook


Andree
14.08.2005, 13:18
Ich habe folgendes Problem:

Füge ich folgenden Code ganz am Ende der global.php ein:

$idvorhanden = $db->query_first("
SELECT id_test
FROM " . TABLE_PREFIX . "test
WHERE id_test = " . $vbulletin->userinfo['userid'] . "
");
if ($idvorhanden == '')
{}
else
{

eval('$footer .= "' . fetch_template('test_script') . '";');

}

funktioniert das zu 100 %. und mein template wird richtig angezeigt.
Baue ich diesen Code nun in das PlugIn System ein und nutze den Einstiegspunkt (Hook) global_complete bekomme ich folgende Fehlerausgabe:
Fatal error: Call to a member function on a non-object in /srv/www/htdocs/web4/html/forum/includes/functions.php(4191) : eval()'d code on line 2

Hmm. Zuerst dachte ich ja das der Hook global_complete dafür steht, dass er am Ende der global.php Ausführung gesetzt wurde. (somit meine Schlussfolgerung, irgendwo am Ende der global.php).
Ist aber nicht der Fall.

Nun meine Frage.
Welchen Einstiegspunkt kann ich denn nun nutzen?
[I]Ich brauche einen Hook, der erst nach kompletter Ausführung der global.php steht und für alle Seiten gültig ist.

Und noch eine andere Frage. Wenn es keinen solchen Einstiegspunkt gibt, besteht die Möglichkeit, dass ein solcher bis zur finalen 3.5 Version noch integriert wird?
Sicherlich könnte ich mir am Ende der global.php ja selbst einen setzen, allerdings wäre das Plug-In-System in diesem Fall (für diese Modifikation) absolut überflüssig. Ziel soll es ja sein, seinen eigenen Code zu integrieren, ohne das man Änderungen an den orginalen Dateien vornehmen muss.

Ich meine mich zu erinnern, dass eine Frage um einen Hook am Ende der global.php auch auf vBulletin.com gestellt wurde. Dies wurde aber (so glaube ich) verworfen.
Leider ist mein englisch nicht so gut das ich mein Anliegen dort vortragen könnte.

Jemand eine Idee?

PcFreak

PS: Natürlich habe ich auch andere Hooks (Allgemeine) ausprobiert. Leider alles ohne Erfolg. Wie gesagt nur ein direktes Einfügen des Codes ganz am Ende der global.php funktioniert.

Stussi
14.08.2005, 13:22
Was es nicht gibt, das macht man sich einfach selber :D ;) (http://www.vbulletin.org/forum/showthread.php?t=82703)

Andree
14.08.2005, 13:36
Ja, ne. Is klar ;)

Das ist aber doch nicht Sinn der Sache, oder?

Klar kann ich mir selbst einen Hook basteln.
Aber wenn ich dann anfange an den orginalen Dateien rumzupfuschen :) , brauche ich kein Plug-In-System.
Das ändern bzw. Modifizieren oder erweitern eines orginalen vBulletin Scrptes möchte ich vermeiden.
Das individuelle Hook basteln ist zwar (sofern sie noch nicht in den RC Versionen implementiert sind) eine nette Sache, allerdings sehe ich das mehr als Krücke an.

Anders wäre es natürlich, könnte man Hooks selbst über das Plugin System integrieren. (Das geht ja wohl nicht).

PcFreak

Mystics
15.08.2005, 00:12
Da der Hook in einer function() ist, gibt es dort das Objekt $db nicht.

Also, entweder schreibst du an den Anfang des Codes:
global $db;

Oder du verwendest stattdessen:
$vbulletin->db

Insgesamt also:$idvorhanden = $vbulletin->db->query_first("
SELECT id_test
FROM " . TABLE_PREFIX . "test
WHERE id_test = " . $vbulletin->userinfo['userid'] . "
");
if ($idvorhanden['id_test'] == '')
{
}
else
{
eval('$footer .= "' . fetch_template('test_script') . '";');
}

Andree
15.08.2005, 04:04
Hallo Mystics
Leider funktioniert der Aufruf des templates auch damit nicht.

Er funktioniert tatsächlich nur, wenn ich einen Custom Hook erstelle.
Dieser muss frühstens im Abschnitt:


476 // parse headinclude, header & footer
477 $admincpdir =& $vbulletin->config['Misc']['admincpdir'];
478 $modcpdir =& $vbulletin->config['Misc']['modcpdir'];
479 eval('$headinclude = "' . fetch_template('headinclude') . '";');
480 eval('$header = "' . fetch_template('header') . '";');
481 eval('$footer = "' . fetch_template('footer') . '";');

482 ($hook = vBulletinHook::fetch_hook('test_hook')) ? eval($hook) : false;


oder (besser noch am Ende) der global.php stehen.

Füge ich dann in diesem neu geschaffenen Hook, meinen obigen Code ein, funktioniert der template Aufruf.
Aufgerufen wird, wenn die if Bedingung erfüllt ist, ein template mit einem javascript, welches ein PopUp Fenster öffnet.

Eine andere Lösung finde ich leider nicht.
Schön wäre es natürlich, wenn es in der finalen 3.5 Version einen weiteren Einstiegspunkt dort oder entsprechend später im global.php Script geben würde.

Gruß
PcFreak

Mystics
15.08.2005, 13:07
Schön wäre es natürlich, wenn es in der finalen 3.5 Version einen weiteren Einstiegspunkt dort oder entsprechend später im global.php Script geben würde.Am Besten hier melden:
http://www.vbulletin.com/forum/showthread.php?t=142051

(wenn es dort nicht schon gemeldet wurde)

Andree
15.08.2005, 16:08
Ich habe es da mal gemeldet ;)

Mal sehen, was daraus wird.

PcFreak

h75
16.08.2005, 02:37
It's above the header and footer, but you will find parse_templates in the next release. aha.. :) parse_templates klingt interessant.. http://www.vbulletin.com/forum/showpost.php?p=942187&postcount=286

Andree
16.08.2005, 06:50
Dann warten wir mal alle auf das nächste release. :)

Diesen Hook brauche ich um mein SMS Hack (Instant Messenger) für die 3.5 Version kompatibel zu machen.

Inzwischen (mit der Krücke eines eigenen Hooks) habe ich ihn fertig und inzwischen finde ich dieses PlugIn System absolut genial.
Nicht nur, dass man sehr übersichtlich Produktroutinen schreiben kann, selbst eigene Phrasengruppen sind kein Problem mehr.

Diese System ist wirklich überzeugend.

PcFreak