Ergebnis 1 bis 5 von 5

Thema: Datenbankzugriff in gesonderter PHP-Datei um ein Bild aus SQL-Daten zu generien

  1. #1
    Contao-Nutzer
    Registriert seit
    08.05.2012.
    Beiträge
    5

    Standard Datenbankzugriff in gesonderter PHP-Datei um ein Bild aus SQL-Daten zu generien

    Hallo zusammen,

    ich habe ein Template in dem ich bereits die Contao Datenbankklasse nutze um eigene SQL-Queries durchzuführen und die Ergebnisse als Tabelle anzuzeigen.
    Nun sollen diese Ergebnisse jedoch wahlweise auch als Liniendiagramm zu Verfügung gestellt werden. Dazu habe ich bereits eine Chart-Library eingebunden, die mir auch passende Bilder erzeugt.
    Der Aufruf im Template erfolgt dann wie folgt:
    Code:
    <img src="chart.php?start=2011-01&stop2012-01">
    Die Datei "chart.php" enthält die Funktionen zum Erzeugen des Bildes. In dieser Datei müssen also die Daten aus der Datenbank verfügbar sein. Um das zu erreichen gibt es wohl nur 2 Möglichkeiten:
    a) Die Daten per GET übertragen. Fällt aber wohl raus bei größeren Datenmengen...
    b) Innerhalb der chart.php selbst SQL-Queries absetzen und die Daten aus der DB holen.

    Lange Rede kurzer Sinn:
    Wie kann ich die Datenbankklasse von Contao in einer gesonderten PHP-Datei nutzen?
    Oder gibt es eine andere Möglichkeit die gewünschte Funktionalität umzusetzen?

    Natürlich kann ich auch die localconfing.php auslesen und mir die SQL-Connections usw selbst zusammenbauen, aber das möchte ich wenn möglich vermeiden.

    Ich danke euch schonmal für die Hilfe!

    P.S.: Eine clientseitige Chartgenerierug per JS o.Ä. kommt nicht in Frage.

  2. #2
    Contao-Nutzer
    Registriert seit
    08.05.2012.
    Beiträge
    5

    Standard

    Ist die Antwort zu trivial oder tatsächlich nicht ganz so einfach, sodass niemand antwortet?

  3. #3
    Contao-Fan Avatar von webster
    Registriert seit
    14.09.2010.
    Ort
    Kiel
    Beiträge
    460

    Standard

    Irgendwie so in der Art müsste es gehen:

    PHP-Code:
    require('pfad/zu/system/initialize.php');

    // hier nun Deine Klassendefinition und dann:
    $this->import('Database','DB');
    $this->DB->prepare('DEIN SELECT STATEMENT')->execute(DEIN PARAMETER);

    // usw... 
    Natürlich nur innerhalb eines objektorientierten Kontextes...

    <offtopic>: Da clientseitige Chartgenerierung nicht in Frage kommt: was für ein System verwendest Du zur Grapherzeugung? Ich habe bisher immer mit Highcharts gearbeitet, was mir sehr gut gefällt, vor allem wegen der Interaktionsmöglichkeiten.</offtopic>
    Geändert von webster (11.08.2012 um 20:11 Uhr)
    Was ist das? - Blaues Licht - Und was macht es? - Es leuchtet blau...

  4. #4
    Contao-Nutzer
    Registriert seit
    07.09.2010.
    Beiträge
    40

    Standard Schnelldurchlauf :-)

    Du legst dir in deinem templates Ordner eine neue Klasse an, z.b. test.php. Und du brauchst noch ein Template, zb. ausgabe.tpl oder ausgabe.html5
    PHP-Code:
    <?php

     
    class Irgendetwas extends Frontend
    {

        public function 
    __construct()
        {
            
    // Load user object before calling the parent constructor
            
    $this->import('FrontendUser''User'); //das kannst du auch weg lassen, wenn du nicht auf member zugreifen musst
                    
            
    parent::__construct();
        }

        public function 
    run()
       {
          
    //hier kommen die funktionen rein, die du aufrufen möchtest
          
    $this->showResults();
       }

       protected function 
    showResults()
      {
          
    $results $this->Database->prepare("SELECT * FROM......")->execute()->fetchAssoc();      //oder fetchAllAssoc()
          

          //jetzt schiebst du die Variable $results in dein Template (die Aussage ist so zwar nicht richtig aber zum besseren Verständnis)
           
    require ('ausgabe.html5')  //Pfandangaben musst du selber anpassen     
      
    }
    }
    /**
     * Instantiate controller
     */
    $objIrgendetwas = new Irgendetwas();
    $objIrgendetwas->run();

    ?>
    In deinem Template, kannst du jetzt $results aufrufen, da es in dieser From ein Array ist einfach <?php print_r($result); ?>, den Rest musst du selber rausfinden ;-).

    Die php-Datei bindest du einfach bei den Artikeln mit {{file::templates/test.php}} ein.

    Viel Spaß

  5. #5
    Contao-Nutzer
    Registriert seit
    08.05.2012.
    Beiträge
    5

    Standard

    Klasse, danke euch!
    Habe jetzt einfach die initialize.php eingebunden, mir eine Klasse erstellt und kann nun auch die DB-Klasse für meine Abfragen nutzen.

    @eddifuh:
    Mir ging es nicht darum SQL-Results aus einer externen PHP-Datei in ein Template zu bekommen, denn die SQL-Queries kann ich ja dann auch gleich direkt im Template durchführen.
    Ich musste lediglich einen Weg finden in einer externen PHP-Datei die DB-Klasse zu nutzen. Denn die PHP-Datei darf nirgendwo eingebunden werden, da ich dort auch den Content-Type per Header setzen muss (header("Content-type: image/png"). D.h. dort wird wirklich nur das Bild generiert.
    Danke Dir aber trotzdem. Konnte dein Klassengerüst auch gut für meine Zwecke nutzen

    @leo.unglaub:
    Ich rechne mit maximal 20 gleichzeitigen Aufrufen der Chart-Generierung. Denke das sollte noch klappen, oder?
    Von der Methode die du alternativ vorgeschlagen hast habe ich leider absolut keine Ahnung. Kannst du das vielleicht noch etwas genauer ausführen?

    <ot>
    @webster:
    Ich bin leider auf freie Bibliotheken beschränkt, weshalb meine Wahl auf pChart 1.27 fiel (http://pchart.sourceforge.net/).
    pChart 2.0 ist auch ganz nett, kostet aber für kommerzielle Projekte (http://www.pchart.net/).
    </ot>

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •