Just nu i M3-nätverket
Jump to content

Sortera i FSO


godfather

Recommended Posts

skulle behöva lite hjälp här. jag har ett scprit jag använder mig av för att hämta bilder som finns i en mapp, men jag kan inte få dem att sorteras i namnordning.

<% 
Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open ="Driver={MySQL ODBC 3.51 Driver};SERVER=server;DATABASE=Databas;UID=anvandarnamn;PWD=losenord"

   Set RecSet = Server.CreateObject("ADODB.Recordset")
   SQL = "SELECT * From bilder WHERE id=" & Request.Querystring("id")
   RecSet.Open SQL, Connect


' ===== Antal bilder på rad =====
Bilder  = 4

'===== Mappen som bilderna finns i =====
FolderName = RecSet("mapp")

'===== Storlek på bilden =====
width = "110"
height = "85"

Set Foldercheck = Server.CreateObject("Scripting.FileSystemObject")
Set Folder = Foldercheck.GetFolder(Server.MapPath(FolderName))%>

<table align="center" width="80%" border="0">

<%If Folder.Files.Count = 0 Then%>
 <tr> 
 <td>Mappen är tom...</td> 
 </tr> 
<%Else
x=0
For Each File In Folder.Files
If x = Bilder Then
 Response.Write "<tr>"
 x = 0
End If%>

 <td width="25%" valign="center"><a href="<%=RecSet("mapp")%>/<%=File.Name%>" src="<%=RecSet("mapp")%>/<%=File.Name%>" width="<%=width%>" height="<%=height%>" border="1"></a></td>


<%X=X+1
Next
If x Mod Bilder <> 0 Then
 For i = 1 To Bilder - x Mod Bilder%>
 <td width="16%"> </td>
 <%Next
 Response.Write "</tr>"
End If
End If%>
</table>

 

[inlägget ändrat 2008-09-09 21:32:57 av godfather]

 

KOD-taggar tillagda av moderator

 

[inlägget ändrat 2008-09-09 22:06:47 av Cluster]

Link to comment
Share on other sites

Jag hade mest troligen skapat ett recordset utifrån filerna i mappen.

Sen kan du sortera recordsetet baserat på filnamnen.

 

Link to comment
Share on other sites

Håll till godo:

<table align="center" border="0">
<% 
' ===== Tillåtna filändelser för bilder =====
strOkExt = "gif|jpg|jpeg|png"

' ===== Antal bilder på rad =====
imgPerRow = 4

' ===== Storlek på bilderna i tabellen =====
width = "110"
height = "85"

' ===== Ta emot id =====
intBildId = Trim(Request.Querystring("id")&" ")

IF NOT isNumeric(intBildId) THEN
  Response.Write "<tr><td>Felaktigt id: " & intBildId & "</td></tr>"
ELSE
  ' ===== Öppna DB-koppling =====
  strConnection = "Driver={MySQL ODBC 3.51 Driver};SERVER=server;DATABASE=Databas;UID=anvandarnamn;PWD=losenord"
SET objDBCon = Server.CreateObject("ADODB.Connection")
  objDBCon.open strConnection

  ' ===== Hämta mappnamn =====
  strSQL = "SELECT mapp FROM bilder WHERE id =" & intBildId
  SET objRS = objDBCon.execute(strSQL)
  IF objRS.EOF THEN
     strFolderName = ""
  ELSE
     strFolderName = objRS("mapp")
  END IF
  SET objRS = Nothing

  ' ===== Stäng DB-koppling =====
  objDBCon.close
  SET objDBCon = Nothing

  IF strFolderName = "" THEN
     Response.Write "<tr><td>Hittade ingen mapp för id: " & intBildId & "</td></tr>"
  ELSE

     ' ===== Kolla om mappen finns =====
     strFolderPath = Server.MapPath(strFolderName)
     SET objFSO = Server.CreateObject("Scripting.FileSystemObject")
     IF NOT (objFSO.FolderExists(strFolderPath)) THEN
        Response.Write "<tr><td>Mappen """& strFolderName &""" finns inte</td></tr>"
     ELSE
        ' ===== Kolla om det finns bilder i mappen =====
        intNoOfImages = 0
        strOkExt = lCase(strOkExt)
        SET objFolder = objFSO.GetFolder(strFolderPath)
        FOR Each File In objFolder.Files
           strFileExt = lCase(objFSO.GetExtensionName(strFolderPath&"\"&File.Name))
           IF inStr(strOkExt,strFileExt)>0 THEN
              intNoOfImages = intNoOfImages +1
              strImgNames=strImgNames&File.Name&Chr(8)
           END IF
        Next

        IF intNoOfImages = 0 THEN
           Response.Write "<tr><td>Mappen är tom...</td></tr>"
        ELSE
           ' ===== Sortera bilderna  =====
           strImgNames=Left(strImgNames, (Len(strImgNames)-1))
           arrImages=Split(strImgNames, Chr(8))
           FOR i = UBound(arrImages) - 1 TO 0 Step -1
              FOR j= 0 TO i
                 IF lCase(arrImages(j))>lCase(arrImages(j+1)) THEN
                    temp=arrImages(j+1)
                    arrImages(j+1)=arrImages(j)
                    arrImages(j)=temp
                 END IF
              Next
           Next

           ' ===== Skriv ut bilderna  =====
           x=0
           Response.Write("<tr>")
           FOR i = 0 TO UBound(arrImages)
              x=x+1
              strImgPath = strFolderName & "/" & arrImages(i)
              %>
              <td valign="center"><a href="<%=strImgPath%>"><img src="<%=strImgPath%>" width="<%=width%>" height="<%=height%>" border="1"></a></td>
              <%
             IF x = imgPerRow THEN 
                 Response.Write("</tr><tr>")
                 x=0
              END IF
           Next
        END IF

        SET objFolder = Nothing
     END IF
     SET objFSO = Nothing

  END IF
END IF
%>
</table>

Använde en array för sortering samt "städade" lite i koden.

Fråga om det är ngt du undrar över.

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Link to comment
Share on other sites

  • 1 month later...

hej igen

 

Det har fungerat perfekt som bara den, men bilderna är väldigt stora och tar lite tid att ladda. Jag fundera på att skapa små miniatyr bilder med ex. namnet m_1.jpg för den lilla och 1.jpg för den stora. hur skriver jag ut dem små bilderna men klickar fram den stora bilden?

 

tack på förhand

 

Link to comment
Share on other sites

Det är inte svårare än att du skriver ut sökvägen till de småbilderna i img -taggen istället.

<%
strImgPath = strFolderName & "/" & arrImages(i)
strImgPath_small = strFolderName & "/m_" & arrImages(i)
%>
<td valign="center"><a href="<%=strImgPath%>"><img src="<%=strImgPath_small%>" width="<%=width%>" height="<%=height%>" border="1"></a></td>

 

[inlägget ändrat 2008-11-10 09:26:03 av Jonas_Bo]

Link to comment
Share on other sites

kalas!

 

en sista fråga :D

 

hur skriver jag ut bilderna UTAN filändelse?

vill ha 1 istället för 1.jpg

jag skall använda filnamnet som ID och vill då skriva ut filändelsen själv:

 

<img src="<%=strImgPath%>.jpg">

 

Link to comment
Share on other sites

Om du vill göra det lite snyggare så kan du applicera valfri Lightbox för att visa de större bilderna, tex:

http://www.lokeshdhakar.com/projects/lightbox2/

 

Fast om du kör fast där så får du ställa en ny fråga i javascript-forumet :)

 

 

/Cluster

I do not fear computers. I fear the lack of them

> http://eforum.kicks-ass.net <-

 

 

[inlägget ändrat 2008-11-10 20:02:22 av Cluster]

Link to comment
Share on other sites

Gick inte riktigt så bra faktiskt, fick följande:

 

 

Microsoft VBScript compilation error '800a0414' 

Cannot use parentheses when calling a Sub 

/test.asp, line 181 

Replace(strImgPath,strFileExt ,"")
----------------------------------^

 

Link to comment
Share on other sites

hehe, det var jag som var lite för snabb där

<img src="<% Response.Write(Replace(strImgPath,strFileExt ,"")) %>.jpg">

Du borde väl dock själv sett att det inte var någon metod för att skriva ut inblandad?

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Link to comment
Share on other sites

Jag försökte använda strFileExt i min replace. Dock så var det ett tag sedan (9 september) jag skrev koden och jag kollade inte tillräckligt noga nu, men det kommer inte att fungera.

 

Är det .gif som du vill ersätta?

Response.Write(Replace(strImgPath,".gif" ,""))

 

/Cluster

I do not fear computers. I fear the lack of them

> http://eforum.kicks-ass.net <-

 

[inlägget ändrat 2008-11-11 17:12:01 av Cluster]

Link to comment
Share on other sites

Jag skippade det hela o körde på lightboxen som du rekommenderade, blev mkt snyggare.

jag har ett sista bekymmer och det är detta:

 

   ' ===== Hämta mappnamn =====
  strSQL = "SELECT mapp FROM bilder WHERE id =" & intBildId
  strSQL = "UPDATE bilder SET besokare=besokare+1 WHERE id =" & intBildId
  SET objRS = objDBCon.execute(strSQL)

 

den vägrar att fungera!

 

får fram detta:

 

ADODB.Recordset error '800a0e78' 
Operation is not allowed when the object is closed. 

/test.asp, line 127

 

och det är följande rad:

 

   IF objRS.EOF THEN
     strFolderName = ""
  ELSE

 

 

Link to comment
Share on other sites

Du måste ha ett giltigt recordset vilket du inte får när du kör din update-sats.

Antingen så kör du update-satsen först eller så kör du den efter hämtningen.

 

Tex:

' ===== Hämta mappnamn =====
  strSQL = "SELECT mapp FROM bilder WHERE id =" & intBildId
  SET objRS = objDBCon.execute(strSQL)
  IF objRS.EOF THEN
     strFolderName = ""
  ELSE
     strFolderName = objRS("mapp")
     strUpd = "UPDATE bilder SET besokare=besokare+1 WHERE id =" & intBildId
     objDBCon.execute(strUpd)
  END IF
  SET objRS = Nothing

 

/Cluster

------------------------------------------------------

I do not fear computers. I fear the lack of them

--------> http://eforum.kicks-ass.net <---------

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...