2009-09-19 64 views
0

我打算加入一些flot圖表到我的網站,我想知道都在處理這個最好的辦法有任何建議。我有查詢數據庫的現有模型和控制器類,以及一個簡單的.phtml將這些數據呈現爲表格。Zend和FLOT圖表

一種方法是添加新的flot.phtml文件,並有該類處理數據的需要而創建由海軍報圖API。然後控制器將被更新以將查詢的DB數據傳遞給'index.phtml'和'flot.pthml'視圖文件。它的快速和簡單,但我不確定我會從flot.phtml文件中的邏輯獲得很多重用。

第二種選擇是將寫一些類,這將有方法來設置的x/y軸,線種類和添加的各種數據集。這將基本上轉儲'source'腳本元素的內容,並且最終的phtml文件只會查看圖表大小和頁面上的位置。如果這個組件是一個控制器,它應該是一個行動幫手嗎?由於它會創建將包含在最終html文件中的源代碼,Zend中是否存在我應該擴展或重用的組件?

基本上,我在找的人可能要提出任何點。如果我找到工作,我會在稍後發佈它?

回答

1

我已經使用jpGraph一個公平的位(從服務器端生成圖表),並開發了一些視圖動作助手,爲我做了所有的辛苦工作。因此,我調用具有幾個基本的參數(例如標題,寬度,高度)和數據(從控制器傳遞)的陣列的助手和輔助沒有休息。它使得一個很好的乾淨可讀的.phtml文件,特別是當每頁有多個圖形時。

我還沒有看到任何Zend_組件會爲你做這些事情。

[更新11月12日:加入樣品下面的代碼]

class Zend_View_Helper_RenderAverageDollarSaleGraph 
{ 
    protected $fileName = 'averageDollarSale.jpg'; 

    //------------------------------------------------------------------------- 
    /*! \brief 
     \param 
     \return 
    */ 
    function renderAverageDollarSaleGraph($monthSales) 
    { 
     $labels = array('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'); 
     $startDate = date('Ym', mktime(0, 0, 0, date('m') - 1, 1, date('Y') - 2)); 
     $result = $label = $csimLabels = array(); 
     foreach ($monthSales as $row) 
     { 
      $date = sprintf('%d%02d', $row['paid_year'], $row['paid_month']); 
      if ($date < $startDate) continue; 
      $label[]= $labels[ $row['paid_month'] ] . "\n" . substr($row['paid_year'], -2); 
      $monthName = $row['paid_month'] == 1 ? substr($row['paid_year'], -2) : $labels[ $row['paid_month' ] ]; 
      $result[] = $row['transactions'] <= 0 ? NULL : ($row['total']/$row['transactions']); 
      $csimLabels[]= $labels[ $row['paid_month'] ] . ' $%0.2f'; 
     } 
     $graph = $this->createGraph(); 
     $graph->SetScale("intint"); 
     $graph->title->Set('Average Dollar Sale'); 
     $graph->xgrid->Show(true); 
     $graph->ygrid->Show(true); 
     $p1 = new LinePlot(array_values($result)); 
     $p1->mark->SetType(MARK_CIRCLE); 
     $p1->mark->SetColor('[email protected]'); 
     $p1->SetCSIMTargets(array_fill(0, count($csimLabels), '#'), $csimLabels); 
     $graph->Add($p1); 
     $graph->xaxis->SetTickLabels($label); 
     $graph->Stroke(SITE_VAR_PATH . $this->fileName); 
    } 
} 

上面是削減版本:完整版檢查文件上的時間戳和僅當數據超過一日齡再生。

+0

嘿史蒂夫,我想知道你可以張貼一些代碼?從你的視圖動作幫手,因爲我有興趣看到你的實施。 – emeraldjava 2009-11-05 11:17:58

+0

按要求添加了代碼。如果你需要更多,請告訴我 – Steve 2009-11-12 08:01:09