
【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いです。実験用ですので、カオス(混沌)をあえて意図したりもしますので、標準やValidとは無縁だったりしますが、何卒、ご了承ください ( _ _ b
//MTのテンプレートタグからYUIのtree用JSONを自動出力テストみたいな、JavaScriptのコメントにしておきます(ここへあとでJSONを記述する予定です)。 次に、Main Indexや、Category Archive、Date-Based Archive 、Individual Entry Archive などのYUIツリーを出力する予定のページの各テンプレートのhead部分へ次のように書き、各ページのhead内でtreeJSONのスクリプトが自動展開されるように準備しておきます。
<script type="text/javascript"> <!-- <$MTInclude module="treeJSON"$> //--> </script>これで、試しにブログを再構築し、ページのソースを開いてみて、、、
<script type="text/javascript"> <!-- //MTのテンプレートタグからYUIのtree用JSONを自動出力テスト //--> </script>このように展開されていれば、ここまでは成功です。
//Tree Data(ここへTrreeメニューのデータをJSONで書きます)
// ["_open"] はメニュートグルを開きます。
var treeData=[
["<b>かも日記</b>" ,
[
["_open"],
["エントリー " ,
[
["_close"],
<MTArchiveList lastn="9">
["<$MTArchiveTitle$>" , "<$MTArchiveLink$>"],
</MTArchiveList><MTArchiveList offset="9" lastn="1">
// ["<$MTArchiveTitle$>" , "<$MTArchiveLink$>"]
</MTArchiveList>["about:","http://jsgt.org/mt/archives/01/001705.html"]
]
]
]
]
]
["エントリータイトル","エントリーのURL"],の形式でとりあえず最新の9件(lastn="9")出力しています。配列の最後は「,」があるといけないので、その行だけ別建てにします。 offset="9" lastn="1" で最後の10行目だけを取り出せるか?と思ったのですが、私の勘違いなのか、バグなのか、うまくいかないので、今日はあきらめて、["about","...."]というリンクでお茶お濁しました(^^;。
//Header Script
//Tree Data(ここへTrreeメニューのデータをJSONで書きます)
// ["_open"] はメニュートグルを開きます。
var treeData=[
["<b>かも日記</b>" ,
[
["_open"],
["エントリー " ,
[
["_close"],
["【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力" , "http://jsgt.org/mt/archives/01/001706.html"],
["【Movable Type】Treeのテスト" , "http://jsgt.org/mt/archives/01/001705.html"],
["【Webサービス】ブログに求人情報を掲載する" , "http://jsgt.org/mt/archives/01/001704.html"],
["Allabout更新 YUIコネクション+ランチャーパネル" , "http://jsgt.org/mt/archives/01/001703.html"],
["【JavaScript】自動セミコロン挿入と改行エスケープ" , "http://jsgt.org/mt/archives/01/001702.html"],
["【JavaScript】自動セミコロン挿入とドット演算子など" , "http://jsgt.org/mt/archives/01/001701.html"],
["【雑談】お月見" , "http://jsgt.org/mt/archives/01/001699.html"],
["【雑談】薄い人?" , "http://jsgt.org/mt/archives/01/001698.html"],
["【Movable Type】MT(2x)改造計画" , "http://jsgt.org/mt/archives/01/001694.html"],
// ["【MT】MTのテンプレートタグからYUIのtree用JSONを自動出力" , "http://jsgt.org/mt/archives/01/001706.html"]
["Testです","http://jsgt.org/mt/archives/01/001705.html"]
]
]
]
]
]
このJSON配列が、treeData という名前の変数に代入されたことを覚えておいてください。Treeメニューを作る時にこの名前を使います。
<link rel="stylesheet" type="text/css" href="http://jsgt.org/yui/2.3.0/yui/examples/treeview/assets/css/folders/tree.css"> <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/animation/animation-min.js"></script> <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/treeview/treeview-min.js"></script> <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/connection/connection-min.js"></script>でも、JSONとYUIだけではtreeメニューは自動生成されません。下記のコードを追加します。テスト後は、js外部ファイルにしておくと、キャッシュが効くので良いかもしれません。また、YUIの読み込みと下記コードも、エントリー毎に書くのではなくテンプレートにた方がコード量を減らせます。
//(namespaceは使わなくても動作します)
YAHOO.namespace('tato');//カスタマイズした関数など用に名前空間を用意しておきます
YAHOO.tato.tree = function(id) {
this.tree = new YAHOO.widget.TreeView(id); //treeDiv1は表示するDIVのID名です
//Tree描画 by Array
this.mkTreeByArray = function (treeData,treeNode){
if(!treeNode)treeNode = this.tree.getRoot();
for(var i in treeData){
if(!(treeData[i][0]=="_open"||treeData[i][0]=="_close")){
var tmpNode = new YAHOO.widget.TextNode("" + treeData[i][0],treeNode, false);
if(typeof treeData[i][1] == "string"){
tmpNode.target= "sampleFrame";
tmpNode.href= treeData[i][1];
}
if(typeof treeData[i][1] == "object"){
if(treeData[i][1][0]=="_open")tmpNode.expand();
this.mkTreeByArray(treeData[i][1],tmpNode);
}
}
}
this.tree.draw();
}
}
そして、最後に、このツリーを起動させるおまじないです。
YAHOO.util.Event.addListener(window, "load", YAHOO.tato.treeIni);でページ構築後に起動したYAHOO.tato.treeIni内の
test1706.mkTreeByArray(treeData)でJSONデータを渡して自動構築します。
var fswt=fd=true; //フェイド無し
//初期化
YAHOO.tato.treeIni = function(){
test1706 = new YAHOO.tato.tree("menudiv1706");
//test1706.tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN); //フェイド処理用
//test1706.tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT); //フェイド処理用
test1706.mkTreeByArray(treeData);//ここでTreeデータを渡します
}
//ページ読み込み後にカスタマイズ関数YAHOO.tato.treeIni()を起動します
YAHOO.util.Event.addListener(window, "load", YAHOO.tato.treeIni);
というわけで、出来上がり。
拝見させていただいています。
先日某ページで、こちらのソースに似たYUIのコードを講義していらっしゃるのを拝見して、使用させていただきました。
http://allabout.co.jp/internet/javascript/closeup/CU20060530A/
こちらのソースで、動的読み込み部分を複数にしますと、どちらか片方(主にしたの方)のみがロードされるようです。
回避方法を探りましたが、なかなか進みません。
実際にはDBに入っている階層情報を動的読み込み部分のリンク先で取得し、テーブルを返したりして使ってますが、上記の現象はサンプルの動的ロード部分をコピペで複数にしても起きるようです。
よろしければ御教授いただけると助かります。

| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |




