3 Replies Latest reply on May 26, 2006 12:57 PM by elDonrico

    <CFTREE> display directories folders

    JayStang Level 1
      Is there a way to display all the folders in a directory rather then the files (it can display the files as well if it must, but i need all the folders) using a <cftree>. I wasn't sure if you could use a <cfdirectory> and somehow query the folders. Any help would be great.

        • 1. Re: &lt;CFTREE&gt; display directories folders
          elDonrico Level 1
          not sure the exact syntax, but the cfdirectory has a type action which you can choose F for file or D for directory....

          i think it is:
          SORT="Name ASC"

          but not sure
          • 2. Re: &lt;CFTREE&gt; display directories folders
            JayStang Level 1
            can you expanded any more on this?... TYPE D didn't work for me and i've done some quite extensive research and i haven't seen anything about action have a "type d" or "type f" attribute.
            • 3. Re: &lt;CFTREE&gt; display directories folders
              elDonrico Level 1
              you know, your right, i failed to read all of it...

              type is a list column... use like datelastmodified and size in the display example below.

              Filename: SimpleFileExplorer.cfm
              Author: Nate Weiss (NMW)
              Purpose: Provides an interface for exploring files and subfolders
              within the ows root

              <!--- The user can explore this folder and any nested subfolders --->
              <!--- Assume that the parent of the folder that contains this ColdFusion --->
              <!--- page (that is, the "ows" folder) should be considered explorable --->
              <CFSET BaseFolder = ExpandPath("../")>

              <!--- The SubfolderPath variable indicates the currently selected folder --->
              <!--- (relative to the BaseFolder). Defaults to an empty string, meaning --->
              <!--- that the BaseFolder will be current when the page first appears --->
              <CFPARAM NAME="SubfolderPath" TYPE="string" DEFAULT="">

              <!--- Utility function to return the parent of a folder, simply by --->
              <!--- treating the supplied path as a CFML list, with / and \ characters --->
              <!--- as the delimiters. --->
              <CFFUNCTION NAME="GetFolderParent">
              <CFARGUMENT NAME="Folder">

              <!--- We'll start off assuming that the folder has no parent --->
              <CFSET var Parent = Folder>

              <!--- If there is at least one element in the list --->
              <CFIF ListLen(Folder, "/\") GT 0>
              <!--- Remove the last element and return the rest --->
              <CFSET Parent = ListDeleteAt(Folder, ListLen(Folder, "/\"), "/\")>

              <!--- Return the result --->
              <CFRETURN Parent>

              <!--- If the user wants to create a folder --->
              <CFIF IsDefined("FORM.CreateFolder") AND FORM.FolderToCreate NEQ "">
              <CFSET NewDirectory = BaseFolder &

              <!--- Assuming that the folder doesn't already exist --->
              <CFIF NOT DirectoryExists(NewDirectory)>

              <!--- Now consider the new folder to be the current selection --->
              <CFSET SubfolderPath = "#FORM.CurrentSubfolderPath#/#FORM.FolderToCreate#">

              <!--- If the user wants to delete a folder --->
              <CFIF IsDefined("FORM.DeleteFolder")>
              <CFSET DirToDelete = "#BaseFolder#/#FORM.CurrentSubfolderPath#">

              <!--- Attempt to delete the folder --->

              <!--- Now consider the deleted folder's parent to be current selection --->
              <CFSET SubfolderPath = GetFolderParent(FORM.CurrentSubfolderPath)>

              <!--- This variable, then, is the full path of the selected folder --->
              <CFSET FolderToDisplay = BaseFolder & SubfolderPath>

              <!--- Is the user currently at the top level? --->
              <CFSET IsAtTopLevel = ListLen(SubfolderPath, '/') EQ 0>

              <!--- Get a listing of the selected folder --->
              SORT="Name ASC"

              <HEAD><TITLE>Simple File Explorer</TITLE></HEAD>
              <H3>Simple File Explorer</H3>

              <!--- Create a simple form for navigating through folders --->
              <FORM ACTION="SimpleFileExplorer.cfm" METHOD="Post">


              <!--- Show the subfolder path, unless already at top level --->
              <CFIF SubfolderPath EQ "">
              You are at the top level.<BR>
              Current Folder: #SubfolderPath#

              <CFIF DirectoryQuery.RecordCount EQ 0>

              <!--- Provide a drop-down list of subfolder names --->
              Select folder: 
              <SELECT NAME="SubfolderPath" onchange="this.form.submit()">

              <!--- Provide an option to go up one level to the parent folder, --->
              <!--- unless already at the BaseFolder --->
              <CFIF NOT IsAtTopLevel>
              <CFSET ParentFolder = GetFolderParent(SubfolderPath)>
              <OPTION VALUE="#ParentFolder#">[parent folder]

              <!--- For each record in the query returned by <CFDIRECTORY> --->
              <CFLOOP QUERY="DirectoryQuery">
              <!--- If the record represents a subfolder, list it as an option --->
              <CFIF Type EQ "Dir">
              <OPTION VALUE="#SubfolderPath#/#Name#">#Name#

              <!--- Submit button to navigate to the selected folder --->
              <INPUT TYPE="Submit" VALUE="Go"><BR>

              Create folder:


              <!--- Use Query of Queries (In Memory Query) to get a subset of --->
              <!--- the query returned by <CFDIRECTORY>. This new query object --->
              <!--- will hold only the file records, not any subfolder records --->
              <CFQUERY DBTYPE="query" NAME="FilesQuery">
              SELECT * FROM DirectoryQuery
              WHERE TYPE = 'File'

              <!--- If there is at least one file to display... --->
              <CFIF FilesQuery.RecordCount GT 0>
              <!--- Display the files in a simple HTML table --->
              <TABLE WIDTH="500" BORDER="0" CELLPADDING="2" CELLSPACING="0">
              <TR BGCOLOR="CornflowerBlue">

              <!--- For each file... --->
              <CFLOOP QUERY="FilesQuery">
              <!--- Use alternating colors for the table rows --->
              <!--- This is explained in the "Next N" examples from Chapter 21 --->
              <CFIF FilesQuery.CurrentRow MOD 2 EQ 0>
              <CFSET RowColor = "LightGrey">
              <CFSET RowColor = "White">

              <!--- Display the file details --->
              <TR BGCOLOR="#RowColor#">
              <!--- File name --->
              <TD WIDTH="250">
              <!--- File modification date and time --->
              <TD WIDTH="200">
              #DateFormat(DateLastModified, "m/d/yyyy")#
              #TimeFormat(DateLastModified, "h:mm:ss tt")#
              <!--- File size --->
              <TD WIDTH="50" ALIGN="right">
              #Ceiling(Size / 1024)# KB