我已经使用了 jpGraph(从 php 在服务器端生成图表),并开发了一些视图操作助手来为我完成所有艰苦的工作。所以我用一些基本参数(例如标题、宽度、高度)和一组数据(从控制器传入)调用助手,助手完成其余的工作。它是一个干净可读的 .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( 'black@0.9' );
$p1->SetCSIMTargets( array_fill( 0, count( $csimLabels ), '#' ), $csimLabels );
$graph->Add($p1);
$graph->xaxis->SetTickLabels( $label );
$graph->Stroke( SITE_VAR_PATH . $this->fileName );
}
}
以上是精简版:完整版会检查文件上的时间戳,并且仅在数据超过一天的情况下才会重新生成。