| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Представление в Internet содержимого каталога средствами ASP
Автор: Христофоров Юрий
jyura@mail.ru В этой статье я на примере расскажу, как используя ASP (Active Server Pages) можно построить содержимое каталога Web аналогично тому, как это выглядит на FTP сервере. Постановка задачи: На Web-сервере есть каталог, например: C:\InetPub\wwwroot\user1. Пусть данный каталог имеет несколько вложенных каталогов и набор файлов в этих каталогах. Примерная структура папок представлена на Рис. 1.
В каждом из представленных на рисунке каталогах может находиться неограниченное количество файлов, либо некоторые из каталогов могут быть пустыми. Необходимо представить содержимое папки user1 на Web-странице в дружественном для пользователя виде. Интересной особенностью скрипта является то, что применяя страницу с фреймами (кадрами), можно построить меню пользователя. Результат должен выглядеть примерно следующим образом: Находимся в папке C:\Inetpub\wwwroot\user1\folder1\subfolder2: На данном скриншоте показан пример меню. Страница menu.htm разделена на два фрейма. В левом фрейме находится файл list_files.asp, а правый фрейм используется для отображения файлов, ссылки на которые находятся в левом фрейме. В левом фрейме можно свободно перемещаться по папкам. Т.о. можно организовать меню пользователя. Решение: Ключ к решению данной задачи - это использование MicrosoftR Scripting Library. Нас будет интересовать такой объект этой библиотеки, как FileSystemObject. FileSystemObject предоставляет объектную модель доступа к файловой системе. Далее, пользуясь средствами языка написания сценариев VBScript, выполняемого на Web-сервере, можно написать одну ASP-страницу, которая будет выполнять всю работу. Итак, приступим. Листинг файла list_files.asp: <%Response.Expires=0%> 'Отключаем кэширование страницы
<HTML>
<BODY>
<!-Серверный сценарий a
<%
Dim root_folder, root_vfolder, curr_dir, curr_dir2, temp_arr
'root_folder - переменная для хранения физического пути к корневой папке USER1
root_folder = "c:\inetpub\wwwroot\user1"
'root_vfolder - переменная для хранения виртуального пути к папке USER1
'localhost - имя Вашего сервера
root_vfolder = "http://localhost/user1"
'curr_dir2 - имя текущей (активной) папки
curr_dir2 = Request.QueryString("dir") 'Имя получаем из URL
'curr_dir - полный физический путь к текущей папке. Получается конкатенацией строк,
'содержащихся в переменных root_folder и curr_dir2.
curr_dir = root_folder & curr_dir2
'temp_arr - временный массив
'Получаем массив, содержащий названия каталогов текущей папки.
temp_arr = ShowDirList(curr_dir)
'Сортируем массив строк
temp_arr = SortStr(temp_arr)
%>
<table border=0>
<%
'Вызов процедуры, осуществляющей вывод названий подкаталогов текущего каталога.
Call Main_Print(temp_arr,1)
'Получаем массив, содержащий имена файлов текущей папки.
temp_arr = ShowFilesList(curr_dir)
'Сортируем массив строк
temp_arr = SortStr(temp_arr)
'Вызов процедуры, осуществляющей вывод имен файлов текущего каталога.
Call Main_Print(temp_arr,0)
%>
</table>
<%
'Очистка содержимого массива
Erase temp_arr
Далее следует текст функций и процедур, используемых в сценарии. Функции:
Процедура: Main_Print - осуществляет вывод в HTML-формате содержимое текущего каталога. Продолжение листинга файла list_files.asp: Function ShowFilesList(folder)
Dim fs, f, f1, fc, i
'Определяем динамический массив для хранения имен файлов
ReDim farr(0)
'Создаем объект FileSystemObject
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folder)
Set fc = f.Files
i=0
'В цикле заполняем массив именами файлов текущей папки
For Each f1 In fc
farr(i) = LCase(CStr(f1.Name)) 'Преобразуем имя к нижнему регистру символов
i = i + 1
'Увеличение размера массива
ReDim Preserve farr(i)
Next
'Возвращаем результат
ShowFilesList = farr
End Function
Function ShowDirList(folder)
Dim fs, f, f1, fc, i
'Определяем динамический массив для хранения названий каталогов
ReDim dirarr(0)
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(folder)
Set fc = f.SubFolders
i=0
'В цикле заполняем массив именами каталогов текущей папки
For Each f1 In fc
dirarr(i) = LCase(CStr(f1.Name))
i = i + 1
ReDim Preserve dirarr(i)
Next
'Возвращаем результат
ShowDirList = dirarr
End Function
Function SortStr(arr)
Dim t,i,j
'Сортировка методом "пузырька"
'UBound - возвращает верхний индекс массива
For j = 0 To UBound(arr)-1
For i = j + 1 To UBound(arr)-1
'StrComp - сравнивает две строки
'Возвращает "-1", если строка1 < строка2;"0", если строка1=строка2;"1",если строка1>
' строка2.
If StrComp(CStr(arr(i)), CStr(arr(j)), vbTextCompare) < 0 Then
t = arr(j)
arr(j) = arr(i)
arr(i) = t
End If
Next
Next
'Возвращаем результат
SortStr = arr
End Function
Sub Main_Print(arr,flag)
'flag = 1 - вывод для каталогов
'flag = 0 - вывод для файлов
Dim i,k,tmp
i = 0
Select Case flag
Case 1
'Если находимся в подкаталоге, то надо предусмотреть возможность вернуться
'на уровень выше
If curr_dir2 <> "" Then
'Ищем последнее вхождение символа разделителя каталогов "\"
k = InStrRev(curr_dir2,"\")
If k <> 0 Then
'Получаем имя каталога верхнего уровня
tmp = Mid(curr_dir2,1,k-1)
Response.Write "<tr>" 'Вывод HTML
'Для украшения используем графический файл open.gif - изображение открытой папки.
Response.Write "<td><img src='open.gif'></td>"
'Формируем ссылку на верхний каталог
Response.Write "<td><a href='list_files.asp?dir="
Response.Write tmp & "'>" & " .. " & "</a></td></tr>"
End If
End If
'Основной цикл вывода названий каталогов
For i = 0 To UBound(arr)-1
Response.Write "<tr>"
Response.Write "<td><img src='close.gif'></td>"
Response.Write "<td><a href=' list_files.asp?dir="
Response.Write curr_dir2 & "\" & arr(i) & "'>" & arr(i) & _
"</a></td></tr>"
Next
'Вывод имен файлов
Case 0
'Основной цикл вывода имен файлов
For i = 0 To UBound(arr)-1
Response.Write "<tr>"
Response.Write "<td><img src='doc.gif'></td>"
'Заменяем "\" на "/" для использования в URL
'Атрибут target нужен для указания ссылки на фрейм
Response.Write "<td><a href='" & root_vfolder & Replace(curr_dir2,"\","/")
Response.Write "/" & arr(i) & _
"' target='main'>" & arr(i) & "</a></td></tr>"
Next
End Select
End Sub
%>
</BODY>
</HTML>
Далее необходимо написать страницу menu.htm, содержащую два фрейма, как было показано выше. Листинг приведен ниже: <HTML> <HEAD> </HEAD> <FRAMESET COLS="150,*"> <FRAME NAME="contents" SRC="list_files.asp"> <FRAME NAME="main" SRC="empty.htm"> </FRAMESET> </HTML> Файл empty.htm представляет собой пустой файл-заглушку для корректного отображения страницы в браузере Netscape Navigator. <!-- empty.htm --> <HTML> </HTML> Файлы list_files.asp, menu.htm, empty.htm необходимо поместить в каталог на Web-сервере с правом Script. Далее в браузере набираем, например, http://localhost/scripts/menu.htm Пример работы скрипта приведен на Рис.2.
Рубрика: ASP
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 19.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|