Plugin-Entwicklung - Rendern von Graphen


#1

Guten Tag,

Ich hoffe ich bin im richtigen Forum.
Ich entwickle zur Zeit ein Plugin und möchte gerne eine Config-Datei erstellen in der dann festgelegt werden kann, welche Graphen auf welcher Seite angezeigt werden sollen. Im Controller.php werden ja die views erzeugt und dabei muss eigentlich für jeden Graph eine Funktion vorhanden sein (bspw. echoEvolutionGraph). Nun will ich das ganze aber dynamisch aufbauen und habe dazu eine public function __call($name, $args) Methode implementiert, die dann je nach $name, was die action darstellt, unterschiedliche Graphen erzeugen soll. Allerdings scheint es mir so, dass es nicht möglich ist zwei Graphen dynamisch zu erzeugen in Piwik. Ich hoffe jemand hat das verstanden und kann mir vielleicht einen Hinweis geben. Hier mein bisheriger Code und die config:

Grüße

manuel



Controller.php


public function __call($name, $args)
    {
        $views = $this->drawGraph($name);
        if ($views) {
            foreach ($views as $view) {
                $this->renderView($view);
            }
        }
    }

 function drawGraph($name)
    {
        if ($name) {
            //get config
            $config = new Zend_Config(require 'config.php');
            /** @noinspection PhpUndefinedFieldInspection */
            $pages = $config->pages->toArray();
            //page is inclued in config.php
            if (array_key_exists($name, $pages)) {
                $page = $pages[$name];
                $pageTitle = $page['title'];
                //echo "<h2>$pageTitle</h2>";
                $graphs = $page['graphs'];
                $views = array();
                foreach ($graphs as $graph) {
                    $view = Piwik_ViewDataTable::factory($graph['type']);
                    $pluginName = $this->pluginName;
                    $view->init($pluginName, $name, 'SocialMonitoring.getLocale ');
                    $view->disableExcludeLowPopulation();
                    if ($graph['showFooter'] == 'false') $view->disableFooter();
                    $view->setColumnTranslation('value', $graph['yAxis']);
                    $view->setColumnTranslation('label', "Date");
                    //$view->setAxisYUnit(' ' . $graph['yAxis']);
                    $views[] = $view;
                }
                return $views;
            }
        }
        return null;
    }

Config

 'pages' => array(
        'start' => array(
            'title' => 'Übersicht',
            'graphs' => array(
                'fan_adds' => array(
                    'title' => 'Facebook Fans',
                    'type' => 'graphPie',
                    'metric' => 'page_fan_adds',
                    'yAxis' => 'fans',
                    'date' => 'd.M.Y',
                    'showFooter' => 'true'
                ),