Seite 1 von 1

Probleme bei einem Backend-Plugin

Verfasst: Do 5. Sep 2013, 20:40
von ivolein
Hallo,

in bin gerade dabei ein Plugin für eine kl. Terminverwaltung im Backend zu programmieren.

Das Einfügen der Module in die obere Menüleiste hat funktioniert und die Startseite vom Plugin wird auch dargestellt.
Auf dieser Startseite greife ich auf eine Tabelle in der Contenido-Datenbank zu und dies funktioniert auch ohne Probleme mit

Code: Alles auswählen

$sql = "SELECT ....... id FROM add_termine ORDER BY `date` ASC, `time` ASC";
$db->query($sql);
Wenn ich jetzt eine von der Startseite auf eine zweite Seite in meinem Plugin per JavaScript.location gehe, dann funktioniert der Zugriff auf die Datenbank mit Hilfe des $db->xxx nicht mehr.

Code: Alles auswählen

Fatal error: Call to a member function query() on a non-object in /xxxx/xxxx/xxx/xxx/includes/deleteDate.php on line 9
Mit dieser PHP-Datei möchte ich einfach einen, auf der Startseite ausgewählten Eintrag, löschen.

Auf der Startseite habe ich nichts weiter eingebungen.
Was muss ich bei meiner Seite einbinden, damit die Variabel $db dort auch bekannt ist.

Ich hoffe, die Problembeschreiben ist ausagekräftig genug, damit mir hier jemand auf die Sprünge helfen kann.

Gruß,

Michi

Re: Probleme bei einem Backend-Plugin

Verfasst: Do 5. Sep 2013, 22:36
von Faar
Wurde denn $db schon mal irgendwo vor Gebrauch initialisiert?

Also sowas wie $db = new DB_Contenido; ?
Oder eine Methode aufgerufen die $db und DB_Contenido enthält?
Ohne das ist $db kein Objekt.

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 07:09
von ivolein
Beim ersten mal aufrufen der Startseite des Plugin wir mit $db.... ein Datenbank zugriff durchgeführt.

Dann wechsel ich auf ein neue Seite mit Hilfe von JavaScript und dort klappt der Aufruf mit Hilfe von $db... nicht mehr.

Jetzt lass ich mich von der zweiten Seite wieder mit einem PHP-location auf die Startseite umleiten und dort funktioniert das $dB auch nicht mehr.
Es funktioniert dann wieder, wenn ich die Startseite über den Menüeintrag oben aufrufe.

Mit scheint, dass ich da irgendwie noch was einbinden muss.

Kann es was mit der Session-ID zu tun haben ? Diese leite ich nicht mit weiter.

Gruß,

Michi

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 08:19
von Spider IT
Moin Michi,

da wo es nicht funktioniert, ist das in einer function?
Und hast du dort $db entweder als Parameter übergeben oder per global eingebunden?

Gruß
René

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 08:25
von ivolein
Hallo Rene,

es ist in keiner Funktion sonder direkt in der PHP-Datei.

Ich übergebe den Parameter $db nicht und übergebe ihn auch nicht global.

Kann ich "$db" einfach per Post übergeben ?

Gruß,

Michi

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 09:26
von Faar
Schreib mal am Anfang der PHP-Datei

Code: Alles auswählen

$db = new DB_Contenido;
rein, vermutlich geht es dann.

Man kann davor vielleicht noch abfragen, ob es bereits existiert und falls nicht, erst dann initialisieren.
Oder so:

Code: Alles auswählen

if (!exists($db) || !is_object($db)) {
        $db = new DB_Contenido;
    }

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 15:38
von ivolein
Das klappt leider auch nicht...

Ich bekomme dann folgende Fehlermeldung:

Code: Alles auswählen

Fatal error: Class 'DB_Contenido' not found

Re: Probleme bei einem Backend-Plugin

Verfasst: Fr 6. Sep 2013, 21:57
von Faar
Dann ist irgendwie das Plugin oder die Seite nicht richtig eingebaut.
Sieht so aus, als ob die Seite die da aufgerufen wird, nichts von Contenido weiß und Contenido nichts von der Seite.

Re: Probleme bei einem Backend-Plugin

Verfasst: Mo 9. Sep 2013, 20:37
von marcus.gnass_4fb
ivolein hat geschrieben:Dann wechsel ich auf ein neue Seite mit Hilfe von JavaScript und dort klappt der Aufruf mit Hilfe von $db... nicht mehr.
Wie lautet denn die URL aud die du mittels JS umleitest?

Re: Probleme bei einem Backend-Plugin

Verfasst: Di 10. Sep 2013, 08:08
von ivolein
War am WE weg und konnte deshalb nicht antworten.

@marcus.gnass_4fb
Ich leite von meiner Startseite mit diesem Aufruf weiter

Code: Alles auswählen

<script type="text/javascript">

        function deleteEvent(eventid)
        {
          var confirmResult = window.confirm("Möchtest Du den Eintrag mit der ID " + eventid + " löschen ?");
          if (confirmResult == true)
          {
            url  =  'plugins/Eventmanager/includes/'
            url  += 'deleteDate.php?id=' + eventid;
            url  += '&check=1';

            window.location.href = url;
            
          }
        }
</script>
@Faar:
Ich habe meine Dateien in der Contenido-Datenbank "files" eingetragen.
Wo muss ich die noch bekannt machen bzw. eintragen, dass Contenido sie kennt.

Gruß,

Michi

Re: Probleme bei einem Backend-Plugin

Verfasst: Di 10. Sep 2013, 12:23
von Faar
Moin,

du musst die Files in den Tabellen _files und frame_files eintragen, damit die Files zugeordnet werden können.
(frame = 4 ist der große Content-Bereich rechts unterhalb des Backendmenüs, frame = 3 ist links davon).
Falls du Backend Navigation hast (also einen Menüpunkt), dann auch in der _nav_sub (Pfad zum Menü-XML und Plugin).
Und das Plugin als solches natürlich auch in die _area.
Danach das hier im install.php:

Code: Alles auswählen

// con_sequence update
updateSequence();
Und dann das wichtigste:
Du darfst die URL nicht direkt aufrufen, sonst umgehst du Contenido.
Bau das hier mal in die Datei ein:

Code: Alles auswählen

defined('CON_FRAMEWORK') or die('Illegal call');
Dann sollte vermutlich illegal call kommen.
Du musst den Instanzenweg gehen, wie bei Behörden, also nicht so:
url = 'plugins/Eventmanager/includes/'
sondern so:
url = "main.php?area="+area+"&frame="+frame+"&contenido="+session
main.php ist das Hauptprogramm, das dann schon die richtige Plugin-Datei findet, wenn dieses richtig in die Datenbank eingetragen ist.
area= ist dann Dein Plugin-Area, das du in die Tabelle eingetragen hast.
frame= ist der "Frame" (also die Nummer des Frames), den Contenido findet wenn du die Files richtig eingetragen hast.
Die Session sollte mitgenommen werden, sonst kann es passieren, dass man plötzlich ausgeloggt ist und/oder eine neue Nummer hat.

Zum Schluss kannst du noch einen eigenen Parameter übergeben, am besten gleich nach main.php:

Code: Alles auswählen

main.php?xyz=123&area= ...
Damit könnstest du auch folgendes bauen:

Code: Alles auswählen

if($_GET['xyz'] == '123') include('plugins/Eventmanager/includes/file123.php');
Dann wird nämlich deine Datei von Contenido aufgerufen und folglich hast du alles zur Verfügung, was Contenido so bereit stellt.

VG
Frank

Re: Probleme bei einem Backend-Plugin

Verfasst: Di 10. Sep 2013, 13:36
von ivolein
Hallo,

ich habe eine Backen-Navigation - und die funktioniert auch.

Ich habe das Plugin anhand der Beschreibung von Contenido-wiki.org erstellt.
http://www.contenido-wiki.org/wiki/index.php/Plugins

Ein "updateSquence()" hab ich nicht gemacht .
Reicht dieser Aufruf in einer einfachen php-Datei ? Einen Installer hab ich nicht, da ich die ganzen Datenbankeinträge zu Fuß gemacht habe.

Gruß,

Michi

Re: Probleme bei einem Backend-Plugin

Verfasst: Di 10. Sep 2013, 13:53
von Faar
Eine einfach PHP-Datei genügt insofern nicht, da sie natürlich irgendwie in Contenido eingebunden sein muss (oder andersherum).
Hier die Dateien, die alle in der install.php eingeklinkt werden, bevor updateSequence() gestartet wird.
In einer dieser Dateien befindet sich diese Funktion oder Methode einer Klasse.
Oft hängt das eine vom anderen noch ab... wie in einem Spaghetti-Teller. :roll:

Code: Alles auswählen

include_once ($contenido_path . 'classes/class.security.php');
include_once($contenido_path . 'includes/startup.php');
cInclude('includes', 'functions.general.php');
cInclude('includes', 'functions.i18n.php');
cInclude('includes', 'functions.api.php');
cInclude('includes', 'functions.general.php');
cInclude('includes', 'functions.database.php');
cInclude('includes', 'functions.str.php');
cInclude('classes', 'class.xml.php');
cInclude('classes', 'class.navigation.php');
cInclude('classes', 'class.template.php');
cInclude('classes', 'class.backend.php');
cInclude('classes', 'class.notification.php');
cInclude('classes', 'class.area.php');
cInclude('classes', 'class.action.php');
cInclude('classes', 'class.layout.php');
cInclude('classes', 'class.treeitem.php');
cInclude('classes', 'class.user.php');
cInclude('classes', 'class.group.php');
cInclude('classes', 'class.cat.php');
cInclude('classes', 'class.client.php');
cInclude('classes', 'class.inuse.php');
cInclude('classes', 'class.table.php');
cInclude('includes', 'cfg_language_de.inc.php');

Re: Probleme bei einem Backend-Plugin

Verfasst: Do 12. Sep 2013, 22:21
von ivolein
Hallo Faar,

vielen Dank für die ganzen Erklärungen.

Mit Deiner Hilfe hat es jetzt funktioniert.
Ich rufe jetzt die Dateien über den "Behördenweg" auf und somit funkioniert mein Plugin.

Gruß,

Michi