Avatar billede jnissen Nybegynder
30. december 2003 - 19:03 Der er 29 kommentarer og
1 løsning

Hvordan får man også vist undermapper?

Hejsa

Jeg bruger denne kode til at finde billeder i en mappe, men jeg kunne godt tænke mig at den også viser de mapper som ligger i mappen, og at man kan åbne dem, ved at klikke på dem.

Kode....
<%
var fso = Server.CreateObject('Scripting.FileSystemObject');
var frm = new Enumerator(fso.GetFolder(Server.MapPath("/kif/" + Request("PIC"))).Files);
while(!frm.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="#" onclick="java script:se(\''+frm.item().Name+'\');return false">'+frm.item().Name+'</a></td><td style="width=175px" class="clsLst">'+frm.item().Type+'</td></tr>');
frm.moveNext();
}
%>
Avatar billede websam Nybegynder
30. december 2003 - 19:11 #1
Jeg bruger følgende til at liste mapper og under mapper samt filer :

Dim myFso
Set myFso = Server.CreateObject("Scripting.FileSystemObject")

Dim myFolder
Set myFolder = myFso.GetFolder(Server.MapPath("/"))

Dim SubFolders
Set SubFolders = myFolder.SubFolders

For Each folder in subFolders
    Response.Write "FolderName: " & folder.Name & "<br>"
    Response.Write "Attributes: " & folder.Attributes & "<br>"
    Response.Write "Type: " & folder.Type & "<br>"
    Response.Write "Size: " & folder.Size & "<br>"
    Response.Write "ShortName: " & folder.ShortName & "<br>"
Next

Dim files
Set files = myFolder.Files

For Each file in files
    Response.Write "FileName: " & file.Name & "<br>"
    Response.Write "Attributes: " & file.Attributes & "<br>"
    Response.Write "Type: " & file.Type & "<br>"
    Response.Write "Size: " & file.Size & "<br>"
    Response.Write "ShortName: " & file.ShortName & "<br>"
Next

Set files = Nothing
Set subFolders = Nothing
Set myFolder = Nothing
Set myFso = Nothing

Der skal lige rettes lidt til så den passer til det du skal bruge

/websam
Avatar billede jnissen Nybegynder
30. december 2003 - 19:19 #2
Du er inde på noget af det rigtige, men jeg mangler at kunne åbne undermapperne og vælge filen. Er det noget du kan hjælpe med?
Avatar billede websam Nybegynder
30. december 2003 - 19:22 #3
Hvad hvis du inde i denne :

For Each folder in subFolders
    Response.Write "FolderName: " & folder.Name & "<br>"
    Response.Write "Attributes: " & folder.Attributes & "<br>"
    Response.Write "Type: " & folder.Type & "<br>"
    Response.Write "Size: " & folder.Size & "<br>"
    Response.Write "ShortName: " & folder.ShortName & "<br>"
Next

Laver en list af filer i hver undermappe kan det så ikke lade sig gøre ?
Avatar billede jnissen Nybegynder
30. december 2003 - 19:32 #4
Jooo....det kunne man måske gøre, men jeg vil nu helts have det på den anden måe :-)
Avatar billede jnissen Nybegynder
30. december 2003 - 19:32 #5
måe = måde
Avatar billede deeflate Nybegynder
30. december 2003 - 20:23 #6
Kan du så ikke bare i samme omgang skrive et link ud for hver mappe, og når man følger linket kører scriptet igen, bare med den valgte undermappe som hovedfolder...?
Avatar billede deeflate Nybegynder
30. december 2003 - 21:14 #7
Hvis du også ønsker at man skal kunne gå ind i undermappers undermapper, så skal det lige laves lidt om, men ellers skulle dette her kunne gøre det:

<%

If request.Querystring("dir") <> "" Then
  dir = "/" & request.Querystring("dir")
else
  dir = "/"
End if


Dim myFso
Set myFso = Server.CreateObject("Scripting.FileSystemObject")

Dim myFolder
Set myFolder = myFso.GetFolder(Server.MapPath(dir))

Dim SubFolders
Set SubFolders = myFolder.SubFolders

For Each folder in subFolders
    Response.Write "FolderName: " & folder.Name & "<br>"
    Response.Write "<a href='?dir=" & folder.Name & "'>" & folder.Name & "</a><br><br>"
    'Response.Write "Attributes: " & folder.Attributes & "<br>"
    'Response.Write "Type: " & folder.Type & "<br>"
    'Response.Write "Size: " & folder.Size & "<br>"
    'Response.Write "ShortName: " & folder.ShortName & "<br>"
Next

Dim files
Set files = myFolder.Files

For Each file in files
    Response.Write "FileName: " & file.Name & "<br>"
    Response.Write "Attributes: " & file.Attributes & "<br>"
    Response.Write "Type: " & file.Type & "<br>"
    Response.Write "Size: " & file.Size & "<br>"
    Response.Write "ShortName: " & file.ShortName & "<br><br>"
Next

Set files = Nothing
Set subFolders = Nothing
Set myFolder = Nothing
Set myFso = Nothing

%>



Så kan du jo lige lave et link tilbage til hovedmappen, når man er i en undermappe.
Avatar billede jnissen Nybegynder
30. december 2003 - 22:08 #8
Jeg har desværre ikke så pokkers meget forstand på dette. Er det muligt jeg kunne få et eksempel, sat sammen med min egen kode, så det virker?
Avatar billede deeflate Nybegynder
31. december 2003 - 10:49 #9
Her får du udskrevet et link for hver folder, og når man trykker på linket, vises folderens indhold.

<%
var dir;
var strDir = Request.Querystring('dir');

dir=(strDir=="" || strDir=="undefined")?"/":strDir + "/";
if(dir=="undefined/"){dir = "/";}


Response.Write(dir + "<br><br>");

var fso = Server.CreateObject('Scripting.FileSystemObject');

var folders = new Enumerator(fso.GetFolder(Server.MapPath(dir)).SubFolders);

while(!folders.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="?dir=' +folders.item().Name+ '" onclick="java script:se(\''+folders.item().Name+'\');return

false">'+folders.item().Name+'</a></td><td style="width=175px" class="clsLst">'+folders.item().Type+'</td></tr>');
folders.moveNext();
}

var frm = new Enumerator(fso.GetFolder(Server.MapPath(dir)).Files);
while(!frm.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="#" onclick="java script:se(\''+frm.item().Name+'\');return

false">'+frm.item().Name+'</a></td><td style="width=175px" class="clsLst">'+frm.item().Type+'</td></tr>');
frm.moveNext();
}

%>
Avatar billede deeflate Nybegynder
31. december 2003 - 10:51 #10
Og denne gang i det rette scriptsprog ;)
Avatar billede jnissen Nybegynder
31. december 2003 - 11:04 #11
Ja nu begynder det at se rigtigt ud :-)
Der sker dog ikke noget når jeg klikker på en undermappe.

Jeg har ændret en lille smule i koden, så den finder den rigtige mappe, men er der flere steder end disse to?:

dir=(strDir=="" || strDir=="undefined")?"/kif/billeder":strDir + "/";
if(dir=="undefined/"){dir = "/kif/billeder";}
Avatar billede deeflate Nybegynder
31. december 2003 - 11:16 #12
Prøv i stedet at gøre sådan her:

var dir;
//Her sættter du din startfolder. Skal slutte med /
var startDir = "/kif/billeder/";
var strDir = Request.Querystring('dir');

dir=(strDir=="" || strDir=="undefined")?startDir:startDir+strDir+"/";
if(dir==startDir+"undefined/"){dir = startDir;}

Det er lidt mere overskueligt
Avatar billede jnissen Nybegynder
31. december 2003 - 11:33 #13
Nu virker det på en måde, men stadig ikke helt. Jeg bruger dette i en editor, og når jeg åbner siden igennem den, viser den ikke undermapperne.
Men hvis jeg åbner siden for sig selv, så viser en fint undermapperne.

Kan det have noget at gøre med at der bliver brugt querystring?
Avatar billede deeflate Nybegynder
31. december 2003 - 11:39 #14
Det ved jeg faktisk ikke. Jeg arbejder altid i notepad, så jeg har ikke så meget styr på diverse editorer ;)

Men hvis den virker fint udenfor editoren, er det så ikke også det, der tæller?
Avatar billede jnissen Nybegynder
31. december 2003 - 11:45 #15
Nej, det er ikke sådan en editor. Det er en online editor, hvor jeg kan rette indholdet på mine sider online.
Avatar billede deeflate Nybegynder
31. december 2003 - 11:54 #16
Nå, sådan en.
Jamen, så kan det vel sagtens være på grund af querystringene, men de er altså lidt svære at komme uden om, medmindre du vil have scriptet liggende i hver eneste mappe.
Det kan du selvfølgelig også og så bare linke til det, men det andet her er vel lidt nemmere...?

Det må du naturligvis selv bestemme ;)
Avatar billede jnissen Nybegynder
31. december 2003 - 12:09 #17
For mig er det endelig lige meget om det ligger i hver mappe, der er nemlig ikke så mange mapper. Men hvis det vil virke, så kan vi god køre det på den måde.
Avatar billede deeflate Nybegynder
31. december 2003 - 13:34 #18
Ok, så skal det se nogenlunde sådan her ud:

<%
var startDir = "/kif/billeder/";

Response.Write( startDir + "<br><br>");

var fso = Server.CreateObject('Scripting.FileSystemObject');

var folders = new Enumerator(fso.GetFolder(Server.MapPath(startDir)).SubFolders);

while(!folders.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="' + startDir+folders.item().Name+ '/oversigt.asp"

onclick="java script:se(\''+folders.item().Name+'\');return false">'+folders.item().Name+'</a></td><td style="width=175px"

class="clsLst">'+folders.item().Type+'</td></tr>');
folders.moveNext();
}

var frm = new Enumerator(fso.GetFolder(Server.MapPath(startDir)).Files);
while(!frm.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="#" onclick="java script:se(\''+frm.item().Name+'\');return

false">'+frm.item().Name+'</a></td><td style="width=175px" class="clsLst">'+frm.item().Type+'</td></tr>');
frm.moveNext();
}

%>


Her har jeg kaldt siden med scriptet for oversigt.asp.
Den skal så ligge i hver mappe - og husk at rette startDir, så det passer (f.eks. /kif/billeder/mappe1/).

Og så kommer oversigt.asp altså også med i oversigten, men det kan du selvfølgelig komme uden om med en enkelt if.
Avatar billede deeflate Nybegynder
31. december 2003 - 13:49 #19
Hov, ovenstående er naturligvis scriptet til den metode, hvor det ligger ude i hver enkelt mappe.

Det andet (med querystrings) vil også virke, så nu kan du selv vælge, hvad du foretrækker :)
Avatar billede jnissen Nybegynder
31. december 2003 - 13:51 #20
Det virker desværre også kun delvis :-(
Der er samme problem med at der ikke sker noget når jeg klikker på mappen når jeg er i editoren.

Har du nogle idéer til hvad man kan gøre?
Jeg ved godt at jeg er meget besværgelig. Jeg ligger også meget gerne de sidste 50 point oveni, hvis du er villig til at hjælpe?
Avatar billede deeflate Nybegynder
31. december 2003 - 14:02 #21
Hmm... det her er jo bare almindelige links, så der burde ikke være noget bøvl. Hvis vi lige simplificerer det lidt, så er det lettere at finde ud af hvad det er der fejler.

Prøv at skifte det her:

while(!folders.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="' + startDir+folders.item().Name+ '/oversigt.asp" onclick="java script:se(\''+folders.item().Name+'\');return false">'+folders.item().Name+'</a></td><td style="width=175px" class="clsLst">'+folders.item().Type+'</td></tr>');
folders.moveNext();
}


ud med det her:

while(!folders.atEnd()){
Response.Write('<tr><td><a href="' + startDir+folders.item().Name+ '/oversigt.asp">'+folders.item().Name+'</a></td><td>'+folders.item().Type+'</td></tr>');
folders.moveNext();
}


Hjælper det?
Avatar billede jnissen Nybegynder
31. december 2003 - 14:15 #22
Ja, det hjælper på den måde at det åbner i et nyt vindue og åbner den rigtige mappe. Men der sker ikke noget når jeg klikker på et billede.
Avatar billede deeflate Nybegynder
31. december 2003 - 14:22 #23
Det er fordi, den ikke er sat til at der skal ske noget.
Det er jo bare en "havelåge".

Hvis du vil have at den skal vise filen, skal du skifte dette her:

a href="#"

Ud med:

a href="'+frm.item().Name+'"
Avatar billede jnissen Nybegynder
31. december 2003 - 14:43 #24
Den skal ikke vise billedet, den skal sætte url'en på billedet ned i et tekstfelt, så man kan sætte det ind i editoren. Det virker fint nok på hovedmappen, men ikke i undermappen.

Vil det være nemmere hvis du fik nogle af filerne?
Avatar billede deeflate Nybegynder
31. december 2003 - 14:52 #25
Det ville det nok, ja.
Avatar billede jnissen Nybegynder
31. december 2003 - 15:06 #26
Har du en adresse jeg kan sende dem til?
Avatar billede deeflate Nybegynder
31. december 2003 - 15:10 #27
Jada. Du kan sende dem til liv@deeflate.dk
Avatar billede deeflate Nybegynder
02. januar 2004 - 11:22 #28
Det her virker:

<%
var dir;
var startDir = '/kif/' + Request('PIC') + '/';  //"/kif/billeder/";
var strSubDir = Request('subDir');
var inSubFolder;

dir=(strSubDir=="" || strSubDir=="undefined")?startDir:startDir +strSubDir + "/";
inSubFolder=(strSubDir=="" || strSubDir=="undefined")?"nej":"ja";
if(dir==startDir+"undefined/")
{
dir = startDir;
inSubFolder="nej";
strSubDir="";
}
else
{
if(strSubDir!=""){strSubDir=strSubDir + '/';}
}

Response.Write(dir + "<br><br>");

//Hvis inSubfolder er ja, så udskriv link med kald af funktionen til at gå en folder op.
if(inSubFolder=="ja")
{
Response.Write('&nbsp;<a href="#" onClick="fjernSubDir(\''+strSubDir+'\',\''+startDir+'\');"><img src="img/folderUp.gif" border="0"> gå en folder up</a>');
}

var fso = Server.CreateObject('Scripting.FileSystemObject');

var folders = new Enumerator(fso.GetFolder(Server.MapPath(dir)).SubFolders);

while(!folders.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst">&nbsp;<a href="?PIC=' + Request('PIC') + '&subDir=' +strSubDir+ folders.item().Name + '"><img src="img/folderDown.gif" border="0"> '+folders.item().Name+'/</a></td><td style="width=175px" class="clsLst">'+folders.item().Type+'</td></tr>');
folders.moveNext();
}

var frm = new Enumerator(fso.GetFolder(Server.MapPath(dir)).Files);
while(!frm.atEnd()){
Response.Write('<tr><td style="width=150px" class="clsLst"><a href="#" onclick="java script:overfoerFilnavn(\''+frm.item().Name+'\',\''+dir+'\');return false">'+frm.item().Name+'</a></td><td style="width=175px" class="clsLst">'+frm.item().Type+'</td></tr>');
frm.moveNext();
}

%>


Funktionen fjernSubDir:

function fjernSubDir(sti,dir) {
  sidste = sti.lastIndexOf('\/');
  sti = sti.substring(0,sidste);
  sidste = sti.lastIndexOf('\/');
  if(sidste<0)
  {
    sti = "";
  }
  else
  {
  sti = sti.substr(0,sidste);
  }
  //document.write(dir+sti);
  location = '?PIC=<%=Request('PIC')%>&subDir='+sti;
}


Det kan sikkert laves med pænere kode.
Bl.a. kan jeg ikke få testet på om subDir er undefined i første hug, så der er lidt lapning der.
Men det virker da, om ikke andet.
Avatar billede deeflate Nybegynder
02. januar 2004 - 11:25 #29
Så er der lige den tvist, at det hele foregår i en ModalDialog.
Der er indsat en 100% i-frame for at gøre navigationen mulig.
Se spg: http://www.eksperten.dk/spm/343224
Avatar billede jnissen Nybegynder
02. januar 2004 - 15:40 #30
deeflate -> Tusinde tak for hjælpen. Det er virkeligt dejligt at du ville bruge så meget tid på at hjælpe mig.

Tak for det, og god weekend.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester