<%= header_section %>
<%= body_section %>
グラフサンプル
<%= footer_section %>
**2. コントローラ (main.rb) 中で、同テンプレートの適用およびグラフ作成用アクションを定義します。**
require "alone"
require "al_graph"
class GraphSampleController < AlController
def action_index()
AlTemplate.run( 'index.rhtml' )
end
def action_graph_sample()
ydata1 = [ 5, 3, 6, 3, 2, 5, 6 ]
graph = AlGraph.new
graph.add_data_line(ydata1)
graph.draw
end
end
**3. 実行結果**
{{:prog_cgi:graph_line2.png?nolink|}}
==== 解説 ====
この例では、ブラウザからのアクセスは2段階でおこなわれます。\\
まず1回目のアクセスで、index.rhtmlテンプレートが適用され、画面全体が描画されます。
2回目は、ブラウザがimgタグに記されたURLをアクセスすることで発生し、action_graph_sample()が実行されます。
action_graph_sample()では、Aloneがグラフデータを生成し、ブラウザへ返します。\\
ここで使われるデータ形式は、SVG型式となります。
この方法を使うことで、いくつかのメリットがあります。\\
1つめはSVG型式であることで、表示を拡大しても画像が荒れることがありません。\\
2つめは殆どのブラウザでグラフのみをSVG型式のファイルとして保存することが容易であることです。保存したグラフ画像は、Microsoft Word, PowerPoint 等に貼り付けて使うことができます。
imgタグを使う場合のみ、ブラウザの右クリックで保存する時に使われるデフォルトのファイル名が指定できます(サポートしていないブラウザもあります)
Alone.add_http_header("Content-Disposition: attachment; filename=graph1.svg")
古いブラウザの場合、imgタグがSVG型式をサポートしていないかもしれません。その場合は、ファイル名はつけられませんが objectタグを使って代用できます。
===== html埋め込みを使う方法 =====
HTML5では、htmlの中にsvgを直接埋め込むことができます。
** 1. テンプレートファイルを用意します。**
<%= header_section %>
<%= body_section %>
埋め込みグラフサンプル
<%= @graph_svg %>
<%= footer_section %>
**2. コントローラ (main.rb) 中で、SVG生成とテンプレートの適用を行います。**
require "alone"
require "al_graph"
class GraphSampleController < AlController
def action_index()
ydata1 = [ 5, 3, 6, 3, 2, 5, 6 ]
graph = AlGraph.new
graph.set_mode( :NO_CONTENT_TYPE ) # この2行は最新版では必要ないかもしれませんが
graph.set_mode( :NO_XML_DECLARATION ) # 互換性のために加えています。
graph.add_data_line(ydata1)
@graph_svg = graph.draw_buffer
AlTemplate.run("index.rhtml")
end
end
**3. 実行結果**
{{:prog_cgi:graph_line2.png?nolink|}}
==== 解説 ====
この例では、ブラウザは一回のアクセスで終了します。\\
action_index()内で、@graph_svg 変数へグラフデータを代入します。index.rhtmlテンプレートでは、そのSVGデータを含めて出力します。
この方法は、一度のアクセスで転送が終わるため、プログラムが単純になるというメリットがあります。