2013年1月11日金曜日

[JpGraph]CakePHP + JpGraph

データベースに以下のテーブルを追加する
Table: テーブル例
iduser_idmathenglishphysics
11493656
22454842
33728091
Model の user.php を修正
<?php

class User extends AppModel
{
 var $name = 'User';
 // var $hasOne = 'Profile';
 var $hasOne = 'Exam';
 var $hasMany = 'Diary';
}

?>
Model に exam.php を追加
<?php

class Exam extends AppModel
{
 var $name = 'Exam';
 var $belongsTo = 'User';
}

?>
Controller にある users_controller.php に以下を追加
function exam($param = null) {
 if (!$param) {
  /* デフォルトは math を表示 */
  $param = 'math';
  $this->set('graph_path', 'exam_graph/' . $param);
 }
 else {
  $this->set('graph_path', '../exam_graph/' . $param);
 }
 $this->set('param', $param);
}

function exam_graph($param = null) {
 /* JpGraph を使用する */
 App::import('Vendor', 'jpgraph/jpgraph');
 App::import('Vendor', 'jpgraph/jpgraph_bar');

 /* DB から値を取得 */
 $users = $this->User->find('all');

 $ydata = array();
 $a = array();

 /* 値を取り込む */
 foreach ($users as $user) {
  array_push($ydata, $user['Exam'][$param]);
  array_push($a, $user['User']['username']);
 }

 /* グラフ作成 */
 $graph = new Graph(350, 250, "auto");
 $graph->SetScale("textlin");

 /* X軸項目追加 */
 $graph->xaxis->SetTickLabels($a);

 /* plot作成 */
 $bplot = new BarPlot($ydata);

 /* グラフ上に描画 */
 $graph->Add($bplot);

 /* グラフ表示 */
 $graph->Stroke();
}
exam.ctp を作成
<html> <head>
<title></title>
</head>

<body>
<h1><?php echo $param; ?></h1>
<?php echo '<img src="' . $graph_path . '" />'; ?>

<hr>
</body> </html>
結果
  • cake/users/exam にアクセスすると数学の結果が表示される
  • cake/users/exam/math にアクセスすると数学の結果が表示される
  • cake/users/exam/english にアクセスすると英語の結果が表示される
  • cake/users/exam/physics にアクセスすると物理の結果が表示される

0 件のコメント:

コメントを投稿