Zweite MySQL Datenbank in Joomla einbinden?

  • Das Grundlegende ist nicht weiter schwer.
    Joomlas

    Code
    1. $db = JFactory::getDbo();


    Baut bequem eine Datenbankinstanz auf, die die Anmeldedaten der configuration.php verwendet.


    Im Verborgenen läuft folgendes ab:



    Meint für Dich:
    - Zusammenstellen des Arrays $options mit den Anmededaten für die andere DB und dann damit Aufruf von:


    Code
    1. $AndereDb = JDatabaseDriver::getInstance($options);


    Mit $AndereDb kannst dann exakt so arbeiten wie mit der joomlaüblichen Instanz $db. Natürlich auch beide (oder mehrere) nebeneinander.

  • So schlau bin ich nicht als Autodidakt.


    - Ich mache das so in einer Erweiterung (seit Joomla 2.5, da aber noch mit JDatabase::getInstance(...)), die sowohl die Joomla-DB nutzt als auch eine externe irgendwo im Internet. Wichtig ist halt 2 verschiedene Instanzen. Da werden Beiträge aus einem andern Joomla angezeigt "als wären es die eigenen" (natürlich mit Einschränkungen).


    - Genauso seit Jahren in diversen Joomla-Erweiterungen-Migrationsskripten (innerhalb des Joomla-Frameworks) von Datenbank zu anderer Datenbank. Bspw. Agoraforum zu Kunena war das letzte oder Gästebuch A zu B, Typo3-Inhalte nach Joomla. So Kram.


    JDatabaseDriver::getInstance(...) hat ja auch eine Prüfung drin, ob eine Instanz in der Liste der dort bereits erzeugten Instanzen schon existiert.


    Die Prüfung passiert anhand der Anmeldedaten $options.


    Code
    1. $signature = md5(serialize($options));
    2. if (empty(self::$instances[$signature]))
    3. {
    4. return neue Instanz;
    5. }
    6. else
    7. {
    8. return bestehende Instanz;
    9. }


    Vielleicht habe ich den TE aber auch missverstanden. Ein einzelnes Joomla sollte nat. seine eigene, autarke Datenbank haben, aber wenn ich in einem View auch irgendwelche Sonstwas-Daten aus irgendeiner andern DB zusätzlich anzeigen will oder dort speichern (über die zusätzliche Instanz und per PHP neu gebautes Query), hat das bisher bei mir problemlos geklappt, egal, ob die andere DB Joomla ist oder nicht.


    EDIT: Und die Datenbank-Objekte sind nat. verschieden benannt.

  • Hallo Danke erstmal für die Hilfen,
    leider funktioniert die Abfrage der externen Datenbank bislang nicht, ich komme immer auf meiner Fehlerseite raus.


    Hier mal mein Code:



    Nehme ich die Zeile "$extitems = $extdb->loadObjectList();" heraus wird die Seite korrekt geladen, allerdings ohne die gewünschten Daten.


    Hat jemand einen Hinweis, woran dies liegen kann?



    Mirko

  • Wenn ich folgendes verwende klappt die Datenbankabfrage, allerdings dann nur für diese Datenbank und die Joomla-Eigene wird nicht mit abgerufen.



    Daher gehe ich davon aus, dass die entsprechenden Treiber geladen werden.


    Mirko

    • Hilfreich
    Zitat

    ich komme immer auf meiner Fehlerseite raus


    Deshalb der Hinweis von SniperSister, einfach nur den Debug-Modus zu aktivieren (Joomla-Konfiguration), alles andere lassen wie es ist. Dann hast auf der Fehlerseite normalerweise weitere Fehlermeldungen.
    Wenns eine "kastrierte" Fehlerseite des Templates ist, deaktiviere sie durch umbenennen der error.php im Templateordner.