2011/12/21 カテゴリ : Tech  JavaScript  Google Chart Tools  グラフ  組織図 

Google Chart Toolsを使ってサイトマップを描こう!

こんにちは!最近寒いですが、みなさんいかがお過ごしでしょうか。
クリスマスも近いということで、クリスマスツリー→ツリー→組織ツリー→組織図!エンジニアのクリスマスはツリーですね!
今回は、Org Chartを使ってサイトマップを描いてみたいと思います。

1. Google Chart Toolsって?


Googleが提供している、グラフや表を簡単に作成するAPIです。(Google Chart Tools
チャートギャラリーには、様々なグラフがギャラリー形式で並んでいます。
中には、メーターや世界地図、札束積み上げグラフ(?)など、ユニークなグラフもあります。
Code Playgroundでは、実際にコードを書いて即時実行しながら、様々なチャートで遊ぶことができます。

今回は、この中からOrg Chart(組織図)を使って、サイトマップを描いてみます。

2. サイトマップの作成


Org Chartでは、こんなかんじでサイトマップが描けます。



どんなコードかというと、こちら!

  1. <html>
  2.   <head>
  3.     <script type='text/javascript' src='https://www.google.com/jsapi'></script>
  4.     <script type='text/javascript'>
  5.       var chart;
  6.       // visualizationを読み込む
  7.       google.load('visualization', '1', {packages:['orgchart']});
  8.       google.setOnLoadCallback(drawChart);
  9.   
  10.       // チャートの設定と描画
  11.       function drawChart() {
  12.         var data = new google.visualization.DataTable();  // ---(1-1)
  13.         data.addColumn('string', 'Name');                 // ---(1-2)
  14.         data.addColumn('string', 'Parent');               // ---(1-3)
  15.         data.addColumn('string', 'ToolTip');              // ---(1-4)
  16.   
  17.         // ---(2)
  18.         data.addRows([
  19.           [{v:'top', f:'トップページ'}, '', 'tooltip'], // ---(3)
  20.             [{v:'company', f:'会社紹介'}, 'top', ''],
  21.               [{v:'company-index', f:'ご挨拶'}, 'company', ''],
  22.               [{v:'about', f:'会社概要'}, 'company', ''],
  23.             [{v:'system', f:'Webシステム構築'}, 'top', ''],
  24.             [{v:'school', f:'PHPスクール'}, 'top', ''],
  25.               [{v:'course', f:'各コースの概要と紹介'}, 'school', ''],
  26.                 [{v:'course1', f:'PHP基礎編'}, 'course', ''],
  27.                 [{v:'course2', f:'PHP中級実務編'}, 'course', ''],
  28.                 [{v:'orientation', f:'講座説明会(無料)のご案内'}, 'school', ''],
  29.               [{v:'business', f:'製品/サービス'}, 'top', ''],
  30.               [{v:'phppro', f:'PHPプロ!'}, 'business', ''],
  31.               [{v:'phpbiz', f:'PHPbiz'}, 'business', ''],
  32.         ]);
  33.   
  34.         // (4)
  35.         chart = new google.visualization.OrgChart(document.getElementById('chart_div'));
  36.         chart.draw(data, {allowHtml: true,} );
  37.       }
  38.     </script>
  39.   </head>
  40.   <body>
  41.     <div id='chart_div'></div>
  42.   </body>
  43. </html>

上記のコードが基本形です。まず、(1)についてご説明します。
(1-1)では、DataTableのインスタンスを作成します。
(1-2)〜(1-4)では、そのDataTableにカラムを3つ追加しています。
(1-4)でツールチップカラムを追加すると、そのノード(青いボックス)にマウスを合わせた時、ぺろっとツールチップが表示され、そこに表示する文字列を設定することができます。
データベースでいうと、addColumnでカラムを作るというイメージです。
  1. var data = new google.visualization.DataTable();  // インスタンス作成
  2. data.addColumn('string', 'Name');                 // はじめのカラム:ノードの名前
  3. data.addColumn('string', 'Parent');               // 次のカラム:親ノードの名前
  4. data.addColumn('string', 'ToolTip');              // 最後のカラム:ツールチップ

つまり、ノードと親ノードだけ最低でも設定すればよく、ツールチップは付加的なものということです。

次に、(2)でデータを追加していきます。
data.addRowsは、データベースでいうINSERTに近いイメージです。今回のソースでは、ノードの親子関係がわかりやすいようインデントをつけました。

(3)では、実際にデータを定義しています。
はじめの要素であるノードの名前をキーと値の配列にすることで、データのIDと表面に出る文字列を別々に定義できます。
2つめのParentカラムを空文字にすることで、親ノードがないもの(ルートノード)を定義できます。
3つめのToolTipには、マウスを合わせた際のツールチップで表示する文字列を定義します。

  1. [{v:'top', f:'トップページ'}, '', 'tooltip'],  // ルートノード:一意なキーはtop,  表示するのは「トップページ」
  2.   [{v:'company', f:'会社紹介'}, 'top', ''],    // キーcompany、「会社紹介」というノードは、親のキーが「top」

こうして、ノードにNameを振り、親ノードのNameをParentに指定していくことで、どんどんツリーをぶら下げていくことができます。
キーと表示する文字列が同じ場合は、下記のように簡単に書けます。

  1. ['top' '', 'tooltip'],  // ルートノード:キーはtopで、表示もtopとなる。
  2.   ['company', 'top', ''],    // キーはcompanyで、親のキーはtop

最後に、(4)で、ドキュメント内のchar_divというDIVに、チャートを書き込みます。
描かれたOrg ChartはHTMLのTable要素で書かれています。

  1. chart = new google.visualization.OrgChart(document.getElementById('chart_div'));
  2. chart.draw(data, {allowHtml: true,} );

これで、基本的なOrgChartを描くことができます!

3. もっと!Org Chart



これまでの説明では、Org Chartの基本的な部分について触れました。
ここからは、もっとOrgChartを豊かにするためのオプションについてご説明します。

CSSでデザインを変えたい



CSSでまとめてデザイン変更したいですね?調べておきました。

  1.   .google-visualization-orgchart-node
  2.     ノードに付いている基本的なクラス
  3.   .google-visualization-orgchart-node-medium
  4.     後述する、ノードの大きさによるクラス。
  5.     small, medium, largeがあるので、末尾を変えてください。
  6.   .google-visualization-orgchart-nodesel
  7.     ノードをクリックしたときに適用されるクラス。


ノードのスタイルを変更したい



ノード全体のスタイルならばCSSで変更できますが、このノードだけ変更したい!ということはないでしょうか。
例えば、ルートノードだけピンクにしたい…とか。
そういった場合、クラスはどれも同じなため、CSSで「このノードだけ」「こうしたい」と変更するのはなかなか難しいですね。

これで、ノードを指定してスタイルを変更できます!

  1. data.setRowProperty(2, 'style', 'background:#ffe5ff;border-color:#ff8989;');
  2. data.setRowProperty(1, 'selectedStyle', 'background:#FF0000;');

第1引数は、ノードの番号です。これは、addRowsされた順番に0から振られている番号です。
つまり、先ほどのコードでいうと、0は「トップページ」、1は「会社紹介」、2は「ご挨拶」というような指定の方法です。

第2引数は「style」か、「selectedStyle」を指定します。
style はそのノードのスタイル、selectedStyleはクリックしたときのスタイルです。

第3引数には、インラインスタイルを入れてください。

このsetRowPropertyは、addRowsからdrawの間に入れてください。
データを定義する→データにスタイルを適用する→チャートを描くという流れだからです。

drawするときのプロパティを指定したい


drawするときに、プロパティを指定することができます。

  1. chart.draw(data, {
  2.   allowHtml: true,            // ノードのHTMLを許可するか。Default=false
  3.   size: 'medium',             // セルの大きさ。Default='medium'
  4.   allowCollapse: false,       // ダブルクリックしてどうなるか。Default=false
  5.   nodeClass: 'asial',         // ノードのクラス名
  6.   selectedNodeClass: 'asial'  // クリックされたとき(Selected)のクラス名
  7. });

allowHtmlは、ノードの表示する文字列内にHTMLを含めてもよいか設定する項目です。
デフォルトはfalse(許可しない)ですが、trueにすると以下のように、HTMLを含めることができます。

  1. [{v:'top', f:'<span style="color: #FF0000;">トップページ</span>'}, '', 'tooltip'],

sizeは、ノードのサイズです。small, medium, largeから選ぶことができます。デフォルトはmediumです。
ここで選択したノードのサイズが、クラス名としてTD要素に適用されます。(.google-visualization-orgchart-node-mediumなど)

allowCollapseは、ノードをダブルクリックしたときに表示・非表示アクションをさせるかどうか設定する項目です。
デフォルトはfalse(常に表示)で、ノードは全部展開されています。
trueにすると、子ノードがあるノードをダブルクリックしたときに、子ノードを隠すようなアクションをします。
もう一度ノードをダブルクリックすると子ノードを展開します。

nodeClassは、各ノードのクラス名です。
デフォルトのクラス名でなく、独自のクラスが使いたいときに利用します。
同様に、selectedNodeClassも、クリックされたときのクラス名となります。

おわりに



この他にもOrg Chartでは、イベントの取得や様々なメソッドなどが提供されています。
Chart ToolsにはOrg Chart以外にも魅力的なチャートがたくさんありますから、ぜひ使ってみてください!

コメントフォーム

認証
captcha_key
 
 

トラックバックURI

最近の記事

アシアルPHP書籍情報