Plugins und andere Ungereimtheiten

Topics from older beta tests.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Plugins und andere Ungereimtheiten

Beitrag von fly2me »

Habe heute mal ein weinig mit den Plugins gespielt.

Dabei kommt es zu manch ungeahnten Fehlern.

Einfachstes und nachvollziehbares ist es, wenn ich eine Index Seite habe in der Admidio schon eingebettet ist (common.php u.s.w.). Dort ist dann auch ein Plugin.

Wenn ich mich nun an Admidio An- bzw Abmelde, werden die Session Vars der organization gelöscht.
Dadurch findet der Plugin sein jähes Ende mit dem Error "you have a sql error near..."

Habe mir das auch mal angeschaut und folgende, einfache und simple Lösung gefunden.

Es liegt daran, dann die Message Class beim Anzeigen der Meldung An- Abgemeldet die common.php nicht zieht.

Also als erstes sollte in die message_class.php
nach

Code: Alles auswählen

if($this->inline == false)
        {
die Zeile

Code: Alles auswählen

require(SERVER_PATH. "/adm_program/system/common.php");
Desweiteren, sollte es in der common.php

Code: Alles auswählen

include(SERVER_PATH. "/adm_config/config.php");
heissen, und nicht

Code: Alles auswählen

require_once(SERVER_PATH. "/adm_config/config.php");
Nur um sicher zu gehen, dass die wichtigsten daten auch gezogen werden, selbst wenn die config.php zuvor geladen war, jedoch die vars gelöscht wurden.

Und wenn dann dort schon jemand dran ist, ändert bitte auch die Zeile

Code: Alles auswählen

include(SERVER_PATH. "/adm_program/system/forum_functions2.php");
in

Code: Alles auswählen

require_once(SERVER_PATH. "/adm_program/system/forum_functions2.php");
um.

In dieser Konstellation klappt es bei mir tadel- und reibungslos.

Gruß Thomas
Zuletzt geändert von fly2me am 1. Feb 2007, 19:32, insgesamt 1-mal geändert.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Soll ich dann die beiden geänderten Dateien, zzgl. der Forum Functions heute Nachmittag einfach einchecken?
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hmm, ich bin mir da noch nicht so ganz sicher, was bei dir schief läuft.

Meiner Meinung nach muss in message_class.php kein common.php includiert werden.

Dies sollte schon immer vorher passiert sein. In jedem Plugin ist ein include(common.php) drin.

Auch denke ich, dass

Code: Alles auswählen

include(SERVER_PATH. "/adm_config/config.php");
nicht mehr bringt, als die jetzige implementierung.

Ich wollte mir das aber auch noch mal genauer anschauen.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Ganz einfach erklärt was da schief läuft!

Ich habe die Plugins in einem Seitenmenü. Das Menü ist immer aktiv. Ich bekomme dort jederzeit die letzten News und Termine angezeigt.

Beim Login und auch beim Logout, sowie bei allen anderen Hinweisen und Fehlermeldungen wird ja über die Message Class eine neue Seite generiert. Diese Message Seite hat kein Include der common.php, d.h. keines der Session Vars ist gesetzt, sogar die config.php und alle funktionen die die Datenbank steuern sind nicht vorhanden. Erst nach dem autorefresh oder dem klick auf den Button geht es weiter und die common.php wird mit der nächstfolgenden Seite geladen.
Es geht also genau um diese Zeitspanne beim Anzeigen der Message bis zum weiterleiten auf die nächste Seite.
Die Plugins in den Seitenmenüs greifen jedoch auf die Werte der config.php und natürlich auf vorhandene funktionen, sowie session vars zurück und finden somit ein jähes Ende, da diese nicht vorhanden sind.

Warum die Plugins die common.php im ablauf NICHT selbst ziehen ist mir ein absolutes Rätsel. Tatsache jedoch ist es, dass sie es nicht tun und die Plugins entweder mit "Not a valid SQL Source", oder wenn diese manuell im Script eingegeben wurde auf Session Vars (ORG_ID u.s.w.) zurück greift, die leer sind. Dann kommt es zu "you have a sql error near... "...

Habe dort sogar in den Plugins einfach mal $g_adm_srv und $g_adm_user mit Echo ausgegeben, natürlich nach dem require_once der common.php. Die Variablen sind leider leer.

Habe da gestern eingemale herum hantiert. Es läuft absolut tadellos, wenn ich diese beide Änderungen vornehme.

Gruß Thomas
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

In der Logout.php wird aber ganz oben die common.php includiert.

Bei uns wird da auch was angezeigt.

Ich werde da aber auch noch mal testen. Evtl. hängt es auch mit register_globals zusammen.

Kannst du die Forengeschichten noch mal einchecken, damit ich es damit auch testen kann.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Ok, lange rede kurzer Sinn...

Bitte diesen einfachen Code in die body_top.php am Ende einfügen und einfach mal mit login und logout rumspielen.

Code: Alles auswählen

<? 
include(SERVER_PATH."/adm_plugins/sidebar_announcements/sidebar_announcements.php");
echo "<br>";
include(SERVER_PATH."/adm_plugins/sidebar_dates/sidebar_dates.php");
echo "<br>";
?>
Zuletzt geändert von fly2me am 29. Jan 2007, 17:03, insgesamt 1-mal geändert.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Wenn man gesehen hat, was passiert, einfach mal meine Änderungen (oben geschrieben) durchführen und dann noch mal mit Login und Logout herumspielen.

Der Fehler tritt dann nicht mehr auf!
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ok, ich gebe mich geschlagen :(

Auf der Spielwiese erscheint derselbe Fehler, bei mir lokal nicht. Muss da wohl was anders haben. Aber ich will da trotzdem noch mal genauer nach schauen. Die common.php zieht er ja, ansonsten würde SERVER_PATH garnicht kennen und das Plugin nicht aufrufen.

Ich schau mir das in den nächsten Tagen mal genauer an.
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Dann benutz mal statt

Code: Alles auswählen

include(SERVER_PATH. "/adm_plugin...
folgenden Code

Code: Alles auswählen

include("http://www.meine-domain.de/adm_plugin...
Dann funktioniert es.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Tatsache, mit

Code: Alles auswählen

include("http://www.meine-domain.de/adm_plugin...
geht es....

Dennoch seltsam, oder?
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

fly2me hat geschrieben:Dennoch seltsam, oder?
So ganz blick ich bei den include-Aufruf-Varianten auch nicht durch.

Ich weiß nur, dass es über den SERVER_PATH immer direkt eingebunden wird und wenn du es über eine URL aufrufst als selbstständiges Script aufgerufen wird, was dann wohl auch selber noch mal die common.php nachläd.
Benutzeravatar
fasse
Administrator
Beiträge: 6227
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Ich werd mir die Plugin Geschichte aber noch mal anschauen. Find es nicht so toll, dass er jedesmal die common.php neu includiert. Würde mir schon besser gefallen, wenn er die aus dem übergeordneten Script nimmt und nur dann, wenn es nicht in Admidio ist, neu läd.
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Was dann bedeuten würde, dass über eine Einbindung der URL das Script jedesmal durchgearbeitet werden würde. Thema Performance!

Besser wäre dann hier eine Globale gültige common.php immer am Anfang und die direkte Einbindung der Plugins.
Jedoch... was wenn es eine ganz eingene Startseite ist, die gänzlich vor Admidio geschaltet ist, auf der der User die Plugins anzeigen möchte?!?!? Grübel!
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Wir hatten den gleichen Gedankengang, nur warst du schneller mit dem Post :D
fly2me
Former team member
Beiträge: 300
Registriert: 27. Nov 2006, 10:38
Wohnort: Zürich

Beitrag von fly2me »

Wir müssten das recht schnell in den griff bekommen. Habe dort ein Seitenmenü eingenbaut und Frage nach isModerator, G_forum us.w. ab. Alle diese Variablen sind zum Zeitpunkt der Message nicht mehr verfügbar und ich bekomme eine solche Anzeige.

Notice: Undefined variable: g_forum_user in C:\www.httpdocs.de\adm_config\body_top.php on line 101

Notice: Undefined variable: g_forum_sitename in C:\www.httpdocs.de\adm_config\body_top.php on line 101

Notice: Undefined variable: g_forum_neuePM_Text in C:\www.httpdocs.de\adm_config\body_top.php on line 101

Notice: Undefined variable: g_adm_db in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 57

Notice: Undefined variable: g_adm_con in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 57

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 57

Notice: Undefined variable: g_current_organization in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 61

Notice: Undefined variable: g_current_organization in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 62

Notice: Undefined variable: g_adm_con in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 66

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\www.httpdocs.de\adm_plugins\sidebar_announcements\sidebar_announcements.php on line 66
Error: 0
Gesperrt