Visual Basic + ASP. Использование шаблонов (исходники)

Источник: olevarty
Олег Баша

Платформа: Windows NT, 2000, XP
Веб-сервер: IIS 4,5
Технологии: ASP, COM
Языки: Visual Basic Script, Visual Basic 6.0
Приложения: Microsoft Visual Basic 6.0

Сегодня крайне сложно найти в Интернете более-менее приличный сайт, сверстанный на "чистом" html. Даже, если количество страниц не превышает одного, двух десятков, мысль о постепенном расширении сайта или, скажем, о его редизайне тут же причинит кошмарную головную боль веб-мастеру, если он попытается представить себе кодирование каждой отдельной страницы вручную. А построение объемных сайтов вообще не мыслимо без использования шаблонов.

В данной статье я не претендую на что-либо новое, а всего лишь попытаюсь рассказать об одном из самых простых способов того, как сделать сайт легко расширяемым, чтобы обновление и добавление новых материалов было процессом совершенно необременительным для веб-мастера.

С использованием Active Server Pages и простенькой DLL мы создадим систему генерации страниц сайта "на лету" на основании некоего существующего шаблона, подставляя в зависимости от полученного параметра в него тот или иной контент.

Итак, поехали.
Для начала, возьмите одну сверстанную страницу Вашего сайта, она и будет нашим шаблоном. Переименуйте её, назвав template.htm. Далее, уберите из нее весь контент, если таковой на ней имеется. Потом приведите страницу к виду, как показано в листинге 1.

Листинг 1. HTML-шаблон.

<html>
<head>
<title>{$Title$}</title>
</head>
<body>

{$Content$}

</body>
</html>

Далее, создайте файл main.asp с кодом, приведенном в листинге 2.

Листинг 2. Страница ASP.

<% @ Language="VBScript" %>
<%
Dim obj
Dim RetVal
  set obj = Server.CreateObject("WebSite.CMain")
  RetVal = obj.GetPage(Session, Request)
set obj = Nothing
Response.Write(RetVal)%>

Теперь самое главное. Открываем Visual Basic. Создаем новую ActiveX DLL. Меняем имя с Project1 на WebSite. Добавляем новый класс и называем его Cmain. См. Листинг 3.

Листинг 3. Класс WebSite.Cmain.

Public Function GetPage(Session, Request) As String
Dim sPageBack$
Dim Content$

Content =
   getTemplateFile(Request.QueryString("File") & ".txt")
sPageBack =
   getTemplateFile("template.htm")
sPageBack =
   Replace(sPageBack, "{$Title$}", _
       "Пример использования шаблонов")
sPageBack =
   Replace(sPageBack, "{$Content$}", _
       Content)
GetPage = sPageBack
End Function

Private Function getTemplateFile(sFileName As String)
                As String
Dim fso As Object, f As Object
Dim sFile$
   If Right(TEMPLATE_PATH, 1) <> "" Then
       TEMPLATE_PATH = TEMPLATE_PATH & ""
   End If
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile(TEMPLATE_PATH & sFileName, 1)
       sFile = f.ReadAll()
   Set f = Nothing
   Set fso = Nothing
getTemplateFile = sFile
End Function

Private Sub Class_Initialize()
   TEMPLATE_PATH = App.Path
End Sub

Далее, для простоты помесите всё в одну папку, откомпилируйте и зарегистрируйте на Вашем сервере COM-object. Создайте 2 файла: 1.txt и 2.txt и поместите в них какой-нибудь контент. Теперь попробуйте в браузере открыть страницы http://yourdomain/main.asp?file=1 и http://yourdomain/main.asp?file=2. Должно работать как часы.

Обратите внимание, что мы не делаем никакой проверки корректности имени файла, запрашиваемого через адресную строку. Это, в частности, приведет к тому, что при попытке открыть http://yourdomain/main.asp возникнет ошибка. Так же, необходимо проверять все параметры еще и из соображений безопасности. В данном примере код сильно упрощен только для того, чтобы продемонстрировать основные идеи. Использовать его по другому назначению без усовершенствования не рекомендую.

Так же, хотелось бы обратить Ваше внимание вот на что:

  • Во первых - как вы должны были заметить, мы с легкостью можем передать в наш класс объекты Session и Response. В принципе, можно передать и любой другой объект. Это открывает весьма большие возможности.
  • Во вторых - dll работает значительно быстрее, т. к. ее код откомпилирован, в отличие от обычной asp-страницы.
  • В третьих - Вся логика приложения (или сайта) становится прозрачной и легко читаемой благодаря ООП.
  • В четвертых - далее можно легко перейти к автоматической генерации страниц сайта. Например, написать несложное приложение, конвертирующее и размещающее Ваши новые материалы на сайте. Это опять-таки можно сделать на ASP и Visual Basic и получить тем самым приличную систему управления контентом.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=1987