Datenbank zugriff

  • Hallo ich möchte ungern von vielen verschiedenen Plugins und Erweiterungen abhängig sein. Nun ist aber meine Aufgabe eine XML Datei in Joomla einzufügen. Das ist ja alles kein Problem das script schreib ich dann mit PHP und mache dann ein Cronjob draus. Mein Anliegen ist eher das ich gerne die Joomla eigene Datenbank abfrage möchte ich möchte die auch gerne mal Lernen und etwas damit rum testen. Kann mir einer erklären wie diese jetzt nun genau funktioniert in der Welt von Google findet man viele verschiedene Ansätze aber nichts eindeutiges.

    Mein Plan ist es eine XML datei auf den Server speicher.

    Die Daten dann Filtern und in die dafür vorgesehenen Tabellen stecken.


    Die XML kommt von einer anderen Webseite auf die Andere Daten eintragen. Die XML wird jeden Tag verändert und neu geladen das sind knapp 500 Einträge. Ich möchte das ungern jeden Tag neu anpassen 8o

  • Wenn schon, dann solltest du dein Script so entwerfen, dass es innerhalb der Joomla-API läuft. Dann kannst du JDatabase-Klassen verwenden.

    https://docs.joomla.org/Access…_database_using_JDatabase

    Dort weiterführende Links.


    Ich war jetzt zu faul, alle folgenden Threads zu sichten, aber mindestens einer zeigt so grundlegend wie man XML-Dateien extrahieren kann:


    XML in html umwandeln

    XML Datei in MySQL einbauen

    XML in html umwandeln

    Zugriff auf die options eines JFormFieldList

  • 1

    Dein Script muss entweder die API/das Joomla-Framework selber initialisieren, wenn es komplett abseits von Joomla abläuft.

    Findet sich sicherlich mehrfach im Netz, mit welchen Zeilen das geht.

    Oder im Ordner /cli/ wird wohl auch so was zu sehen sein.

    Mache ich nie. Halte ich für unsicher.


    2

    Andere Variante, die ich lieber verwende:


    - Im Ordner /templates/MEINTEMPLATENAME/html/mod_custom/

    Datei anlegen: meinsonstwasscript.php


    - In die Datei deine Programm-Logik nach obligatorischer Zeile

    Code
    defined('_JEXEC') or die;


    - Eine DummySeite anlegen durch noindex,nofollow und im "Menü verstecken" bisschen schützen.


    - Eine Modul des Typs mod_custom mit Layout "meinsonstwasscript" nur auf dieser Seite zuweisen.


    - Aufruf der Seite per CronJob. Wobei ich noch eine Art Token in der URL mit übergeben würde, der dann in obiger Datei erst mal geprüft wird, bevor der Rest ausgeführt wird.


    3

    Weitere Variante, die ich nur noch gelegentlich verwende, wenn ich auf einer Seite viele "sonderbare" Scripte brauche und anderweitig ablegen möchte.


    https://www.ghsvs.de/programmi…ner-php-dateien-verwenden

    (schon länger nicht mekr korrektur gelesen. Sollte aber noch stimmen).


    4

    oder z.B. Sourcerer-Plugin verwenden und damit deine Datei "includen". Mag ich persönlich gar nicht ;-) Weil das Plugin eben auch anderweitiges PHP blind ausführt, wenn von Vögeln eingesetzt...

  • Muss ich das script in ein Joomla Template schreiben? Ist das nicht über eine php Datei möglich die ich per Link aufrufe ? Sobald ich

    Code
    $db = JFactory::getDbo();

    aufrufe bekomme ich
    Fatal error: Uncaught Error: Class 'JFactory' not found in.... index.php:20 Stack trace: #0 {main} thrown in .....


    ok gut die API hab ich eingebunden nur auf die Variabeln der Config kann ich immer noch nicht zu greifen. Wenn ich jetzt Include confi machen kommt eine Fehler meldung. Die Variable z.b. host bekomme ich auch nicht aus der config übertragen.

  • ok läuft alles jetzt endlich nun hab ich ein Problem wie bekomme ich Variabeln in die Values ?
    Ich bekomme den fehler: Error: Failed to start application: Unknown column '$datetime' in 'field list'

  • So weit so gut es vollbracht nun hab ich aber ein weiteres Problem. Ich glaube ich bin jetzt hier auch allein unterhalten :). Das Problem was ich jetzt habe ist das Joomla die Kategorie nicht als solche erkennt. Wenn ich im Backend die Kategorie dann bearbeiten will erhalte ich ein Fehler. Aber auch die Unterordnung der Kategorie wird nicht richtig angegeben. So schaut es in der PHPmyAdmin aus

    Code
    `id`, `asset_id`, `parent_id`, `lft`, `rgt`, `level`, `path`, `extension`, `title`, `alias`, `note`, `description`, `published`, `checked_out`, `checked_out_time`, `access`, `params`, `metadesc`, `metakey`, `metadata`, `created_user_id`, `created_time`, `modified_user_id`, `modified_time`, `hits`, `language`, `version`
    9, 0, 1, 1, 1, 1, com_jevents, Datenbank Titel, 08-42-37, NULL, 1, 0, 0000-00-00 00:00:00, 1, {"category_layout":"","image":"","image_alt":"","c..., {"author":"","robots":""}, 692, 2020-06-25 08:42:37, 0, 2020-06-25 08:42:37, 0, *, 1
  • Die angegebene "extension" ist von jevents. Die Kategorie wird auch an dort angezeigt also denk ich mal das es in der "#__asset" Tabelle verknüpft ist. Wenn ich eine Kategorie direkt über das Plugin erstelle wird dieses auch nicht dort gelistet. Hast du ein Ansatz punkt wie ich das nested set einbinden kann ich habe jetzt das von der Joomla seite übernommen aber das will nicht wirklich laufen.



    Sehr schön es hat geklappt damit ich alle Felder ausfülle. Die Felder extension brauchte ich nicht in der #_asset verknüpfen da das Plugin das schon mit macht. Jetzt brauch ich nur noch eine Anhaltspunkt wie ich vergleichen kann ob der Eintrag schon vorhanden ist. Also sowas wie

    Schau in Tabelle xy nach den Titel und der Extension. Wenn nichts gefunden tuh was. Wenn ich mit loadRowList(); rumspiele wird mir immer der 2 eintrag ausgegeben warum auch immer

  • Jevents nutz ich nur zur Darstellung was das für den Endnutzer dann freundlicher ist als wenn er das über extra felder von Joomla und so machen muss. Jevents hat auch eine Import funktion aber leider nur CSV und dort müsste ich sowieso die Header alle neu schreiben und ich bin nicht so Flexibel als wenn ich das ganze selbst schreiben kann. Einige Angaben aus der XML brauch ich auch in anderen Tabellen die Möglichkeit gibt mir JEvents natürlich nicht. ^^


    Meine frage war jetzt aber wie kann ich in meiner Script Datei so eine Abfrage machen damit ich das auch Joomla Conform hinbekomme. Ich hätte gerne eine die Abfrage vorher geschaltet bevor ich die Kategorien der XML einschreiben lasse. Ich möchte ungern bei 100 Kategorien schauen welche doppelt sind. Und da sich jeden Tag die XML neu schreibt wäre das eine Tages aufgabe.