忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[97] [96] [95] [94] [93] [92] [91] [90] [89] [88] [87]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

去年抽選で当たったDSLiteを売って、Wiiを買ってみた。

するとWi-Fiのルーターが欲しくなり、I/0データのWN-G54/R3を購入・・・・

散財。


さて、サーバーの特定フォルダ以下をツリー表示する方法。
ColdFusionAdministratorのデーターソース設定にあるようなイメージです。

いいコンポーネントが無いかなぁ・・・と探したのですが、英語圏の検索が下手なのか、なかなか使えそうなものが見つかりませんでした。

結局、<CFDIRECTORY>(→LiveDocs) と <CFTREE>(→LiveDocs)の組み合わせでゴリゴリ書いてみたわけです。


--------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CFTREEテスト</title>
</head>

<cfset root = "D:\ColdFusion8\wwwroot\scorpio\root\351083045"><!---表示フォルダの絶対パス--->
<cfset URLroot = "./root/351083045"><!---表示フォルダのURLルートパス--->

<cfdirectory action="list" directory="#root#" name="dir" sort="directory" recurse="yes">

<cffunction name="dirquery" returntype="query">
 <cfargument name="dirname" required="yes" hint="フルパス指定">
  <cfquery dbtype="query" name="dirtemp">
   select NAME,TYPE from dir where directory = '#dirname#' order by name,type
  </cfquery>
 <cfreturn dirtemp>
</cffunction>

<body>


<cfform>
<cftree name="dlist" width="300" height="650" vspace="5" hspace="5" format="applet">
 <cftreeitem value="#root#" display="351083045GH">
 <cfset d1 = dirquery(root)>
 <cfloop query="d1">
  <cftreeitem display="#d1.NAME#" value="#root#\#d1.NAME#" parent="#root#"
   img="#IIF((d1.TYPE is 'Dir'),DE('folder'),DE('document'))#">
  <cfif d1.TYPE is 'Dir'>
  <cfset parent1="#root#\#d1.NAME#">
  <cfset d2 = dirquery(parent1)>
  <cfloop query="d2">
   <cfset path="#parent1#\#d2.NAME#">
   <cftreeitem value="#path#" display="#d2.NAME#" parent="#parent1#"
    img="#IIF((d2.TYPE is 'Dir'),DE('folder'),DE('document'))#"
    href="#IIF((d2.TYPE is 'File'),DE('#URLroot#/#URLEncodedFormat("#replace(path,root,'')#")#'),DE(''))#"
    target="mainFrame">
   <cfif d2.TYPE is 'Dir'>
   <cfset parent2=#path#>
   <cfset d3 = dirquery(parent2)>
   <cfloop query="d3">
    <cfset path="#parent2#\#d3.NAME#">
    <cftreeitem value="#path#" display="#d3.NAME#" parent="#parent2#"
     img="#IIF((d3.TYPE is 'Dir'),DE('folder'),DE('document'))#"
     href="#IIF((d3.TYPE is 'File'),DE('#URLroot#/#URLEncodedFormat("#replace(path,root,'')#")#'),DE(''))#"
     target="mainFrame">
    <cfif d3.TYPE is 'Dir'>
    <cfset parent3=path>
    <cfset d4 = dirquery(parent3)>
    <cfloop query="d4">
     <cfset path="#parent3#\#d4.NAME#">
     <cftreeitem value="#path#" display="#d4.NAME#" parent="#parent3#"
      img="#IIF((d4.TYPE is 'Dir'),DE('folder'),DE('document'))#"
      href="#IIF((d4.TYPE is 'File'), DE('#URLroot#/#URLEncodedFormat("#path#")#'),DE(''))#"
      target="mainFrame">
     <cfif d4.TYPE is 'Dir'>
     <cfset parent4=path>
     <cfset d5 = dirquery(parent4)>
     <cfloop query="d5">
      <cfset path="#parent4#\#d5.NAME#">
      <cftreeitem value="#path#" display="#d5.NAME#" parent="#parent4#"
       img="#IIF((d5.TYPE is 'Dir'),DE('folder'),DE('document'))#"
       href="#IIF((d5.TYPE is 'File'), DE('#URLroot#/#URLEncodedFormat("#path#")#'),DE(''))#"
       target="mainFrame">
      <cfif d5.TYPE is 'Dir'>
      <cfset parent5=path>
      <cfset d6 = dirquery(parent5)>
      <cfloop query="d6">
       <cfset path="#parent5#\#d6.NAME#">
       <cftreeitem value="#path#" display="#d6.NAME#" parent="#parent5#"
        img="#IIF((d6.TYPE is 'Dir'),DE('folder'),DE('document'))#"
        href="#IIF((d6.TYPE is 'File'),DE('#URLroot#/#URLEncodedFormat("#path#")#'),DE(''))#"
        target="mainFrame">
       <cfif d6.TYPE is 'Dir'>
       <cfset parent6=path>
       <cfset d7 = dirquery(parent6)>
       <cfloop query="d7">
        <cfset path="#parent6#\#d7.NAME#">
        <cftreeitem value="#path#" display="#d7.NAME#" parent="#parent6#"
         img="#IIF((d7.TYPE is 'Dir'),DE('folder'),DE('document'))#"
         href="#IIF((d7.TYPE is 'File'),DE('#URLroot#/#URLEncodedFormat("#path#")#'),DE(''))#"
         target="mainFrame">
        <cfset d8 = dirquery(path)>
        <cfif d8.recordcount gt 0>
         <cftreeitem value="7階層以上表示できません" parent="#path#\#d7.NAME#" img="element">
        </cfif>
       </cfloop><!---d7--->
       </cfif>
      </cfloop><!---d6--->
      </cfif>
     </cfloop><!---d5--->
     </cfif>
    </cfloop><!---d4--->
    </cfif>
   </cfloop><!---d3--->
   </cfif>
  </cfloop><!---d2--->
  </cfif>
 </cfloop><!---d1 --->
</cftree>
</cfform>
</body>
</html>
--------------------------

・・・・( ̄~ ̄;)ウーン・・・

美しくないな・・・・・と思う。

回帰的に書きたかった所ですが、<cftree>から<cftreeitem>の部分を抜き出して回帰的に書こうとすると、

「CFTREEが無い!」と怒られてコンパイルできないわけです。

仕方なくネストネスト・・・・
当然階層の上限が出てしまいます。

いい方法ないかなぁ・・・・


と思っていたら、うたらぼさんが助けてくれました。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CFTREEテスト</title>
</head>

<cfset root = "D:\ColdFusion8\wwwroot\scorpio\root\351083045"><!---表示フォルダの絶対パス--->
<cfset URLroot = "/scorpio/root/351083045"><!---表示フォルダのURLルートパス--->

<cfdirectory action="list" directory="#root#" name="dir" recurse="yes" sort="directory">

<body>

<cfform>
<cftree name="dlist" width="300" height="650" vspace="5" hspace="5" format="applet">
 <cftreeitem value="#root#" display="351083045GH">
 <cfset item = structNew()>
 <cfloop query="dir">
  <cfset item.display= dir.name>
  <cfset item.value = "#dir.directory#\#dir.name#">
  <cfset item.img = IIF((dir.TYPE is 'Dir'),DE('folder'),DE('document'))>
  <cfset item.href = IIF((dir.TYPE is 'File'),DE('#URLroot##URLEncodedFormat("#replace(item.value,root,'')#")#'),DE(''))>
  <cftreeitem display="#item.display#" value="#item.value#" parent="#dir.directory#" img="#item.img#"
   href="#item.href#" target="mainFrame">
 </cfloop>
</cftree>
</cfform>

</body>
</html> 



これでスッキリです。

うたらぼさん ありがとうございます。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
ご案内
ブログランキングご参加〔相互リンク〕のお願い

サイト名:タイムブログランキング
URL:http://www.time-ranking.com/

はじめまして、「タイムブログランキング」管理人の水本と申します。
7月中旬を目処にBLOGランキングサイトをオープンいたします。
現在プレオープン中ですが、先行登録受付を開始いたしました。
ご参加いただけるブログ様を募集中です。

ランキング参加は、該当のカテゴリをお選びいただき登録していただきますと
投票用リンクタグが発行されます。
投票用リンクタグを貴ブログに貼り付けて頂くだけでOKです。

何卒ご検討のほどよろしくお願いいたします。


※検索サイト・ランキングサイト等より訪問しております為、
重複してのご案内になりましたらお許し下さい。

タイムブログランキング URL 2007/07/11(Wed)21:46:33 編集
無題
考えてみました。
http://d.hatena.ne.jp/utalab/20070712/1184166842
うたらぼ 2007/07/12(Thu)00:42:03 編集
Re:無題
http://d.hatena.ne.jp/utalab/20070712/1184166842

(」゜ロ゜)」 おぉなるほど。

treeitemは、parentを指定するから記述する順番は気にしなくていいので、cfdirectoryの結果を全部ループしちゃえばいいわけだ!

うたらぼさん、ありがとうございます。
すっきりしたソースになりました。
【2007/07/12 11:25】
この記事へのトラックバック
この記事にトラックバックする:
ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
03 2024/04 05
S M T W T F S
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
なかのひと
忍者ブログ [PR]