Probleme bei einem Backend-Plugin

Gesperrt
ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Probleme bei einem Backend-Plugin

Beitrag von ivolein » Do 5. Sep 2013, 20:40

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

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von Faar » Do 5. Sep 2013, 22:36

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.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Fr 6. Sep 2013, 07:09

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

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Probleme bei einem Backend-Plugin

Beitrag von Spider IT » Fr 6. Sep 2013, 08:19

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é

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Fr 6. Sep 2013, 08:25

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

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von Faar » Fr 6. Sep 2013, 09:26

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;
    }
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Fr 6. Sep 2013, 15:38

Das klappt leider auch nicht...

Ich bekomme dann folgende Fehlermeldung:

Code: Alles auswählen

Fatal error: Class 'DB_Contenido' not found

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von Faar » Fr 6. Sep 2013, 21:57

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.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

marcus.gnass_4fb
Beiträge: 87
Registriert: Do 26. Apr 2012, 23:02
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von marcus.gnass_4fb » Mo 9. Sep 2013, 20:37

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?

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Di 10. Sep 2013, 08:08

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

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von Faar » Di 10. Sep 2013, 12:23

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
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Di 10. Sep 2013, 13:36

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

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von Faar » Di 10. Sep 2013, 13:53

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');
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

ivolein
Beiträge: 30
Registriert: Do 6. Apr 2006, 15:26
Kontaktdaten:

Re: Probleme bei einem Backend-Plugin

Beitrag von ivolein » Do 12. Sep 2013, 22:21

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

Gesperrt