- 論壇徽章:
- 0
|
本帖最后由 aef25u 于 2013-11-09 03:07 編輯
dancer 網(wǎng)站原碼:
08MyChart2.rar
(5.4 MB, 下載次數(shù): 6)
2013-11-09 02:38 上傳
點(diǎn)擊文件名下載附件
一、本站說明
這是perl的Dancer中使用open flash chart V2的簡單示例。
所需工具:
1、open flash chart2 版本:open-flash-chart-2-Lug-Wyrm-Charmer
2、jofc2版本:jofc2-1.0-0
3、除dancer相關(guān)模塊,仍需安裝以下perl模塊:
moose
Chart::OFC2
4、本示例dancer使用template_toolkit模版工具
運(yùn)行環(huán)境:
Windows XP、strawberry perl、Dancer 1.3011、Firefox
MyDancer.pm app.pl 及tt文檔編碼: utf-8
注:使用utf-8編碼,open flash chart V2可以展示中文,網(wǎng)上說V1版本X軸不能展示中文。
本網(wǎng)站主要介紹:
1、在dancer中配置open flash chart2 的簡單說明。
2、不使用Chart::OFC2,直接由html靜態(tài)文檔生成flash示例
3、使用Chart::OFC2與TT實(shí)現(xiàn)網(wǎng)頁MVC模式的架構(gòu)
4、open flash chart2不能脫離Web應(yīng)用服務(wù)器,本站適合普通用戶作為學(xué)習(xí)open flash chart2的demo
內(nèi)附(位于08MyChart2\bin下):
start.bat 方便本機(jī)運(yùn)行WEB服務(wù)器 http://localhost:3000/
1、雙擊start.bat
2、在瀏覽器下輸入 http://localhost:3000/home
二、配置
配置open flash chart
1、網(wǎng)上下載open-flash-chart-2-Lug-Wyrm-Charmer。
2、配置open-flash-chart.swf、swfobject.js:將open-flash-chart-2-Lug-Wyrm-Charmer解壓 并改名為ofc2,放于08MyChart2/public目錄下,注意在tt文件中配置此兩份文件的路徑, 如下圖(詳見08MyChart2\views\chart.tt):
ofc_cof1.png (81.89 KB, 下載次數(shù): 29)
下載附件
2013-11-09 02:31 上傳
配置jofc2-1.0-0
1、網(wǎng)上下載jofc2-1.0-0
2、配置jofc2-1.0-0.jar、xstream-1.3.1.jar:在jofc2-1.0-0下載包中可找到這2份文件, 放于08MyChart2\lib目錄下,如下圖:
ofc_cof2.png (25.2 KB, 下載次數(shù): 29)
下載附件
2013-11-09 02:32 上傳
三、dancer 中使用open flash chart生成圖表的流程
1、使用Chart::OFC2生成繪圖所需的json格式數(shù)據(jù),即http://localhost:3000/bar_data
2、傳遞json數(shù)據(jù)生成圖表,http://localhost:3000/bar?ofc=bar_data
2.1生成圖表的url:http://localhost:3000/bar,而?ofc=bar_data表示接收http://localhost:3000/bar_data生成的json數(shù)據(jù),并傳遞給tt模版
2.2通過data_json參數(shù)傳遞數(shù)據(jù)至tt模版,即data_json=>$data為:data_json=>bar_data。
注:要弄懂此流程,最好先上網(wǎng)搜索swfobject.js和open-flash-chart.swf的作用。
當(dāng)讀者明白此流程后,此網(wǎng)站將是你學(xué)習(xí)open flash chart2繪制各種圖片的demo,特別是給沒有Web應(yīng)用服務(wù)器的用戶帶來很大的便利。
(原因:前文已提到過open flash chart2不能脫離Web應(yīng)用服務(wù)器。)
dancer.pl代碼結(jié)構(gòu)
- #!C:\strawberry\perl\bin\perl.exe
- use Dancer;
- use MyDancer;
- set layout=>'main.tt';
- #生成繪圖所需的json格式數(shù)據(jù)
- get '/bar_data' => sub {
- use Chart::OFC2;
- my $chart = Chart::OFC2->new(
- ...
- );
- return $chart->render_chart_data();
- };
- #輸出圖片到網(wǎng)頁,以bar圖為例:
- #瀏覽器輸入url格式:http://localhost:3000/bar?ofc=bar_data
- #get '/:type'此時(shí)路徑為:http://localhost:3000/bar
- #?ofc=bar_data,表示傳遞http://localhost:3000/bar_data生成的json數(shù)據(jù)
- #通過data_json參數(shù)傳遞數(shù)據(jù)至tt模版,即data_json=>$data為:data_json=>bar_data。
- get '/:type' => sub {
- my $type = params->{type};
- my $title='繪制' . $type . '圖';
- my $data =$type . '_data';
- template 'chart'=>{example=>"$title",data_json=>$data};
- };
- dance;
復(fù)制代碼 對應(yīng)TT模版:
位于views文件夾:chart.tt
- <h2>< % example % ></h2>
- <div id="my_chart"></div>
- <script type="text/javascript" src="/ofc2/js/swfobject.js"></script>
- <script type="text/javascript" src="/ofc2/js/json/json2.js"></script>
- <script type="text/javascript">
- swfobject.embedSWF("/ofc2/open-flash-chart.swf", "my_chart",
- "450", "250", "9.0.0", "expressInstall.swf",
- {"get-data":"< % data_json % >"});
-
- </script>
復(fù)制代碼 四、一個(gè)真實(shí)的例子繪制bar 圖:
dancer.pl代碼:
- use Dancer;
- use MyDancer;
- set layout=>'main.tt';
- #生成繪圖所需的json格式數(shù)據(jù)
- get '/bar_data' => sub {
- use Chart::OFC2;
- use Chart::OFC2::Axis;
- use Chart::OFC2::Bar;
- my $chart = Chart::OFC2->new(
- 'title' => 'Bar chart 示例',
- x_axis => {
- labels => {
- labels => [ '1月', '2月', '3月', '4月', '5月' ],
- }
- },
- );
-
- my $bar = Chart::OFC2::Bar->new();
- $bar->values([ 1..5 ]);
- $chart->add_element($bar);
-
- return $chart->render_chart_data();
-
- };
- get '/bar' => sub {
- my $title='繪制bar圖';
- template 'bar'=>{example=>"$title",data_json=>'bar_data'};
- };
- dance;
復(fù)制代碼 對應(yīng)tt模版代碼:
位于views文件夾:chart.tt,模版可見上文第三點(diǎn)。
更靈活的dancer:
將以上TT模版另存為chart.tt,我們修改get '/bar' => sub {...}處代碼,可以讓我們統(tǒng)一用chart.tt輸出各種圖片,dancer.pl代碼修改為。
- get '/:type' => sub {
- my $type = params->{type};
- my $title='繪制' . $type . '圖';
- my $data =$type . '_data';
- template 'chart'=>{example=>"$title",data_json=>"$data"};
- };
復(fù)制代碼
bar.jpg (32.04 KB, 下載次數(shù): 27)
下載附件
2013-11-09 02:35 上傳
附:本站dancer代碼
在08MyChart2\bin目錄下的app_simple.pl文件,是open flash chart 輸出圖表最簡單的例子, 相對于app.pl沒有干擾信息,較容易理解,比較適合不太了解dancer的讀者。
app.pl代碼:- #!C:\strawberry\perl\bin\perl.exe
- use Dancer;
- use MyDancer;
- set layout=>'main.tt';
- #首頁,關(guān)于open flash chart2的配置說明
- #use MyDancer;
- #直接由html靜態(tài)文檔生成flash示例
- get '/statepage' => sub {
- template 'statepage';
- };
- #本站dancer代碼輸出模版
- get '/dancer_code' => sub {
- template 'd_code';
- };
- #生成bar圖所需的json格式數(shù)據(jù)
- get '/bar_data' => sub {
- use Chart::OFC2;
- use Chart::OFC2::Bar;
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => 'Bar chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- x_axis => {
- labels => {
- labels => [ '1月', '2月', '3月', '4月', '5月' ],
- }
- },
- y_axis => {max=>6,steps=>1},
- );
-
- my $bar = Chart::OFC2::Bar->new();
- $bar->values([ 1..5 ]);
- $bar->colour('0x660099');
- $chart->add_element($bar);
-
- print $chart->render_chart_data();
-
- };
- #生成3Dbar圖所需的json格式數(shù)據(jù)
- get '/3D_bar_data' => sub {
- use Chart::OFC2;
- use Chart::OFC2::Bar;
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => '3Dbar chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- x_axis => {
- labels => {
- labels => [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月' ],
- },
- },
- y_axis => {max=>14,steps=>1},
- );
-
- #方式一:修改type_name屬性可以生成bar、bar_3d、bar_filled、bar_glass類型的柱狀圖
- my $bar = Chart::OFC2::Bar->new(
- type_name=>'bar_3d',
- );
-
- #方式二:寫個(gè)Bar_3D.pm放于本站目錄08MyChart2/lib下。
- #use Bar_3D;
- #my $bar = Bar_3D->new();
-
- $bar->values([ 1..12 ]);
- $bar->colour('0x660099');
- $chart->add_element($bar);
-
- print $chart->render_chart_data();
-
- };
- #001生成HBar圖所需的json格式數(shù)據(jù)
- get '/HBar_data' => sub {
- use Chart::OFC2;
- use Chart::OFC2::HBar;
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => 'HBar chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- 'y_axis' => Chart::OFC2::YAxis->new(
- 'labels' => [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun' ],
- 'offset' => 1,
- ),
- 'tooltip' => {
- 'mouse' => 2,
- },
- );
-
- my $hbar = Chart::OFC2::HBar->new(
- 'values' => [ { 'left' => 1.5, 'right' => 3, }, 1, 2, 3, 4, 5, ],
- 'colour' => '0x660099',
- );
- $chart->add_element($hbar);
- print $chart->render_chart_data();
- };
- #003生成Line圖所需的json格式數(shù)據(jù)
- get '/Line_data' => sub {
- use Chart::OFC2;
- use Chart::OFC2::Line;
-
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => 'Line chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- 'x_axis' => Chart::OFC2::XAxis->new(
- 'labels' => [ 'Jan', 'Feb', 'Mar', 'Apr', 'May' ],
- ),
- y_axis => {max=>6,steps=>1},
- );
-
- my $line = Chart::OFC2::Line->new();
- $line->values([ 1..5 ]);
- $chart->add_element($line);
- print $chart->render_chart_data();
- };
- #004生成pie圖所需的json格式數(shù)據(jù)
- get '/Pie_data' => sub {
- use Data::Dumper;
- use Chart::OFC2;
- use Chart::OFC2::Pie;
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => 'Pie chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- );
- my $pie = Chart::OFC2::Pie->new(
- tip => '#val# of #total#<br>#percent# of 100%',
- );
- $pie->values([ (1 .. 5) ]);
- $pie->values->labels([qw( IE Firefox Opera Wii Other)]);
- $pie->values->colours([ '#d01f3c', '#356aa0', '#C79810', '#73880A', '#D15600' ]);
- $chart->add_element($pie);
- print $chart->render_chart_data();
- };
- #生成復(fù)合圖形Line和Bar
- get '/Line_Bar_data' => sub {
-
- use List::Util;
- use Chart::OFC2;
- use Chart::OFC2::Bar;
- use Chart::OFC2::Line;
-
- my $chart = Chart::OFC2->new(
- 'title' => Chart::OFC2::Title->new(
- 'text' => 'Line and Bar chart 示例',
- 'style' => '{font-size:20px; font-family:Verdana; text-align:center;}',
- ),
- x_axis => {
- labels => {
- labels => [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月' ],
- }
- },
- y_axis => {max=>14,steps=>1},
- );
-
- my @a=(1..12);
- @a=List::Util::shuffle @a;
- my $bar = Chart::OFC2::Bar->new(
- type_name=>'bar_glass',
- );
- $bar->values(\@a);
- $bar->colour('0x660099');
- my $line = Chart::OFC2::Line->new();
- $line->values(\@a);
- $chart->add_element($bar);
- $chart->add_element($line);
- print $chart->render_chart_data();
- };
-
- #get '/bar' => sub {
- # my $title='繪制bar圖';
- # template 'chart'=>{example=>"$title",data_json=>'bar_data'};
- #};
- #輸出圖片到網(wǎng)頁,以bar圖為例:
- #瀏覽器輸入url格式:http://localhost:3000/bar?ofc=bar_data
- #get '/:type'此時(shí)路徑為:http://localhost:3000/bar
- #?ofc=bar_data,表示傳遞http://localhost:3000/bar_data生成的json數(shù)據(jù)
- #通過data_json參數(shù)傳遞數(shù)據(jù)至tt模版,即data_json=>$data為:data_json=>bar_data。
- get '/:type' => sub {
- my $type = params->{type};
- my $title='繪制' . $type . '圖';
- my $data =$type . '_data';
- if (($type eq 'bar') or ($type eq '3D_bar')){
- template "$type"=>{example=>"$title",data_json=>"$data"};
- }else{
- template 'chart'=>{example=>"$title",data_json=>"$data"};}
- };
- dance;
復(fù)制代碼 附:其他圖表
3Dbar.jpg (46.24 KB, 下載次數(shù): 27)
下載附件
2013-11-09 02:36 上傳
HHar.jpg (36.77 KB, 下載次數(shù): 28)
下載附件
2013-11-09 02:37 上傳
Line.jpg (28.54 KB, 下載次數(shù): 29)
下載附件
2013-11-09 02:37 上傳
pie.jpg (19.21 KB, 下載次數(shù): 28)
下載附件
2013-11-09 02:37 上傳
landb.jpg (57.54 KB, 下載次數(shù): 22)
下載附件
2013-11-09 02:37 上傳
|
|