Visual Basic + ASP. Використання шаблонів (исходники), Різне, Програмування, статті

Платформа: 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 виникне помилка. Так само, необхідно перевіряти всі параметри ще й з міркувань безпеки. У даному прикладі код сильно спрощено тільки для того, щоб продемонструвати основні ідеї. Використовувати його за іншим призначенням без удосконалення не рекомендую.

Так само, хотілося б звернути Вашу увагу ось на що:



Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*