Я справедливо использовал jpGraph (генерирует графики на стороне сервера из php) и разработал несколько помощников вида действий, которые выполняют всю тяжелую работу за меня. Поэтому я вызываю помощников с несколькими базовыми параметрами (например, заголовок, ширина, высота) и массивом данных (передаваемых из контроллера), а помощник делает все остальное. Это делает хороший чистый читаемый файл .phtml, особенно когда на странице несколько графиков.
Я не видел ни одного компонента Zend_, который бы сделал для вас многое из этого.
[обновлено 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 );
}
}
Вышеприведенная версия является сокращенной версией: полная версия проверяет временную метку в файле и восстанавливается только в том случае, если данные старше одного дня.