Ergebnis 1 bis 7 von 7
Like Tree1Likes
  • 1 Post By G.Schuster

Thema: pChart in Zend Framework

  1. #1
    Erfahrener Benutzer
    Registriert seit
    19.06.2009
    Beiträge
    120
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Standard pChart in Zend Framework

    Hallo an alle,

    ich möchte in ein ZF Projekt die pChart Library einbinden.
    Hab es einfach unter application/includes abgelegt.
    Im TestController rufe ich nun eine Model-Action auf, die ein Diagramm erstellt und somit auf die pChart-Files zugreift. Funktioniert soweit!

    Zur Anzeige des Diagramms gibts nun 2 Varianten, siehe Link: pChart 2.0 online documentation

    "Rendering to a flat file" funktioniert, macht aber keinen Sinn, da die Funktion ja später verschiedene (Parameterabhängig) Diagramme ausgeben soll. Rufen mehrere User verschiedene Seiten (also mit versch. Diagrammen auf), so überschreibts die Grafiken. Somit möchte ich "Rendering to the web browser".

    "Rendering to the web browser" hab ich auch hinbekommen. Jedoch nur so, dass die Grafik anstatt der phtml-Seite ausgegeben wird. Ich möchte aber die Grafik in die phtml-Seite einbinden!
    Im pChart wiki steht: Calling the Stroke() method in your script will automatically send the ‘Content-type: image/png‘ header to the user web browser and the raw picture in the HTTP GET data field.

    Wie setze ich das in ZF um?

    Vielen Dank für eure Hilfe!!!


    Hier etwas Code:
    PHP-Code:
    //TestController
            
    public function indexAction()
            {
               
    /*
                $this->_helper->getHelper("layout")->disableLayout();
                $this->_helper->viewRenderer->setNoRender();
              */

                
    $this->_oPChartModel->getGraph();  //Action, die das Diagramm erstellt
               
                
    $this->view->pcharttest "<img src='" $this->_getParam("???") . "' />";
             } 
    PHP-Code:
    //Mein Model
    class pchartModel
    {   
        private 
    $_path;
       
        public function 
    __construct()
        {
            
    $this->_path 'pChart2.1.3'
        }
       
        private function 
    getLibrary()
        {
            require(
    $this->_path."/class/pData.class.php");
             require(
    $this->_path."/class/pDraw.class.php");
             require(
    $this->_path."/class/pImage.class.php");
             require(
    $this->_path."/class/pPie.class.php");
            
             require(
    $this->_path."/class/pBarcode39.class.php");
             require(
    $this->_path."/class/pBarcode128.class.php");
             require(
    $this->_path."/class/pBubble.class.php");
             require(
    $this->_path."/class/pCache.class.php");
             require(
    $this->_path."/class/pIndicator.class.php");
             require(
    $this->_path."/class/pRadar.class.php");
             require(
    $this->_path."/class/pScatter.class.php");
             require(
    $this->_path."/class/pSplit.class.php");
             require(
    $this->_path."/class/pSpring.class.php");
             require(
    $this->_path."/class/pStock.class.php");
             require(
    $this->_path."/class/pSurface.class.php");
        }
       
        public function 
    getGraph()
        {
            
    $this->getLibrary();
       
           
             
    /* Create the pChart object */

             
    $myPicture = new pImage(700,230,NULL,TRUE);
           
             
    /* ... weitere Angaben zum Diagramm... */
             
           
             /* Render the picture */

                //$myPicture->Render("../application/includes/".$this->_path."/cache/base.png");
             
    $myPicture->stroke();
        }


  2. #2
    Erfahrener Benutzer
    Registriert seit
    20.09.2007
    Beiträge
    417
    Thanks
    0
    Thanked 12 Times in 12 Posts

    Standard

    Code:
    <img src="/path/to/test/renderChart?param=value" />
    !?
    Im Prinzip wie jedes andere Bild auch.
    Du musst halt nur in einer Action das nötige HTML ausgeben (bzw. den View rendern) und in einer Anderen die Parameter auswerten und und das Bild generieren lassen.
    Geändert von G.Schuster (21.08.2012 um 10:30 Uhr)

  3. #3
    Erfahrener Benutzer
    Registriert seit
    19.06.2009
    Beiträge
    120
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Standard

    Danke für deine Antwort. Eben da ist das Problem ..oder hab ich nur eine Denkblockade?
    Die View-Datei (phtml) erhält doch vom Controller die Daten und dieser ruft wiederrum das Model auf. Da müsst ich diesen Weg ja umgehen und direkt die Modelmethode aufrufen, was mir nicht wirklich gefällt. Warum? Weil die Parameter (die ich der Diagrammfunktion gebe) der Controller wiederrum aus anderen Models (Datenbankabfragen) bekommt. Verstehst Du mein Problem?^^

    edit: habs jetzt mal versucht umzusetzen, jedoch kommt noch die Meldung, dass die Grafik Fehler enthält. Vielleicht fällt Dir/euch ja am Code was auf:

    Controller:
    PHP-Code:
        class TestController extends Zend_Controller_Action 
        
    {                 
            private 
    $_oPChartModel;
            
            
            public function 
    preDispatch()
            {
                
    $this->_oPChartModel = new pchartModel();
            }
            
            public function 
    tchartAction()
            {           
                
                
    // $this->_helper->getHelper("layout")->disableLayout();
                 
    $this->_helper->viewRenderer->setNoRender();
                 
                 
    $this->_oPChartModel->getGraph();  //erstellt das diagramm
                
            
    }
            
            public function 
    indexAction() 
            { 
                  ...
                 
    // in dessen view soll das diagramm eingebettet werden
            
    }

    Model:
    PHP-Code:
    class pchartModel
    {    
        private 
    $_path;
        
        public function 
    __construct()
        {
            
    $this->_path 'pChart2.1.3';
        }
        
        private function 
    getLibrary()
        {
             require(
    $this->_path."/class/pData.class.php");
             require(
    $this->_path."/class/pDraw.class.php");
             ....
        }
        
        public function 
    getGraph()
        {
            
    $this->getLibrary();
        
             
    /* Create the pChart object */
             
    $myPicture = new pImage(700,230,NULL,TRUE);
             ....
             
    header("Content-type: image/png");
             
             
    $myPicture->stroke();
           

    Index-View:
    HTML-Code:
    pChart-Test:<br />
    <img src="<?= $this->action('tchart', 'Test', null, array()); ?>" />
    Geändert von cream (21.08.2012 um 21:39 Uhr)

  4. #4
    Erfahrener Benutzer
    Registriert seit
    20.09.2007
    Beiträge
    417
    Thanks
    0
    Thanked 12 Times in 12 Posts

    Standard

    Es verbietet dir niemand, im Controller mit den Models auch zu arbeiten, die müssen nicht nur stumpf an die View durchgereicht werden.
    Du denkst einfach nur zu kompliziert.

  5. #5
    Erfahrener Benutzer
    Registriert seit
    19.06.2009
    Beiträge
    120
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Standard

    Danke dir! Hab das vorhin auch bemerkt und getestet... funktioniert leider immer noch nicht. Hab meinen Beitrag, vor deinem, editiert. Vielleicht fällt dir ja mein Fehler auf?

  6. #6
    Erfahrener Benutzer
    Registriert seit
    20.09.2007
    Beiträge
    417
    Thanks
    0
    Thanked 12 Times in 12 Posts

    Standard

    Dir ist aber der Unterschied zwischen einer URL und dem Inhalt einer Datei und wie man den img-Tag verwendet bekannt, oder?

    Code:
    pChart-Test:<br />
    <img src="<?= $this->action('tchart', 'Test', null, array()); ?>" />
    Code:
    pChart-Test:<br />
    <img src="/path/to/call/Test/tchart/?param=value" />
    Hatte ich dir aber ganz am Anfang schon gesagt.

    Wenn du es aber ums Verrecken direkt in den View schreiben willst: Inline-Grafiken in HTML

  7. The Following User Says Thank You to G.Schuster For This Useful Post:

    cream (21.08.2012)

  8. #7
    Erfahrener Benutzer
    Registriert seit
    19.06.2009
    Beiträge
    120
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Standard

    Sry den Hinweis hatte ich total falsch verstanden, wie Du gemerkt hast ;-)
    Habs jetzt mit einen URL Helper so umgebaut wie Du sagst ...und es funktioniert!! Klasse, vielen dank!
    Und natürlich kenne ich den Unterschied, aber manchmal ist man doch irgendwie ...verpeilt.

Ähnliche Themen

  1. Zend Framework ohne Zend server auf Webspace - extensions
    Von kleks10 im Forum Installation & Konfiguration
    Antworten: 4
    Letzter Beitrag: 04.01.2012, 09:10
  2. Zend Studio 7 update Zend Framework
    Von ThaSpecialist im Forum IDE's, Debugging & Profiling
    Antworten: 9
    Letzter Beitrag: 09.10.2009, 20:34
  3. Zend Certified Engineer for Zend Framework
    Von thomas_w im Forum Offtopic
    Antworten: 0
    Letzter Beitrag: 01.10.2008, 12:00
  4. Zend Multiinstallation mehrere Versionen von Zend Framework installieren
    Von rougher im Forum Installation & Konfiguration
    Antworten: 4
    Letzter Beitrag: 06.03.2008, 14:25
  5. Debugproblem mit Zend Platform und Zend Framework
    Von har1974 im Forum IDE's, Debugging & Profiling
    Antworten: 2
    Letzter Beitrag: 03.05.2007, 07:43

Lesezeichen

Berechtigungen

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