Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Программирование для Internet >> Создание динамических HTML-страниц. >> Компонент TPageProducer.

[Назад]    [Содержание ]    [Вперед]

  


Компонент TPageProducer.


Компонент TPageProducer

Компонент TPageProducer используется для манипуляции кодом HTML. Он применяет настраиваемые дескрипторы HTML, заменяя их соответствующим содержимым. Во время разработки или в процессе выполнения вы создаете HTML-шаблон, содержащий специальные дескрипторы, которые не существуют в стандартном языке HTML. Компонент TPageProducer обнаруживает их и заменяет соответствующей информацией.

Эти динамические дескрипторы выглядят как обычные дескрипторы HTML, но, не являясь стандартными, игнорируются броузером клиента. Такой дескриптор может выглядеть следующим образом:

<#CustomTag Param1=SomeValue "Param2=Some Value with Spaces">

Дескриптор заключается в угловые скобки (< и >), а его имя начинается с символа #. При этом имя должно быть допустимым идентификатором языка Pascal. Параметры с пробелами помещаются в кавычки.

В Delphi предусмотрен ряд встроенных имен дескрипторов. При этом ни одно из значений не имеет специального действия, связанного с ними, ? они определяются лишь для удобства и ясности кода. Например, вы можете не пользоваться дескриптором tgLink для определения гиперсвязи, тем не менее его использование имеет смысл ? особенно с точки зрения ясности ваших шаблонов. В табл. 30.1 перечислены предопределенные дескрипторы.

Таблица 30.1. Предопределенные дескрипторы

Имя

Значение

Значение преобразования дескриптора

Custom TgCustom Определенный пользователем или неопределенный дескриптор. Преобразуется в любое значение, определенное пользователем
Link TgLink Преобразуется в якорь. Обычно это гипертекстовая связь или значение закладки (<А>..</А>)
Image Tglmage Преобразуется в дескриптор изображения (<IMG SRC=...>)
Table TgTable Заменяется HTML-таблицей (<table> </table>)
ImageHap TgImageHap Заменяется картой изображения. Карта изображения определяет связи на основе зон внутри изображения (<МАР>.. .</МАР>)
Object TgObject Заменяется кодом, который вызывает элемент управления ActiveX
Embed TgEmbed Преобразуется в дескриптор, который относится к Netscape-совместимой DLL расширения

Использование компонента TPageProducer не требует семи пядей во лбу. Этому компоненту можно назначить код HTML либо в свойстве HTMLDoc, либо в свойстве HTMLFile. При назначении свойства Content другой переменной (обычно свойству TISAPIResponse.Content) выполняется сканирование данного кода HTML, и при обнаружении в нем любого пользовательского дескриптора вызывается событие OnHTMLTag. Обработчик события OnHTMLTag выглядит примерно так:

procedure TWebModulel.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
end;

В параметре Tag содержится тип обнаруженного дескриптора (см. табл. 30.1). Параметр TagString хранит значение самого дескриптора в полном объеме. Параметр TagParams представляет собой индексированный список всех параметров, включая имя параметра, знак равенства (=) и само значение. Параметр ReplaceText ? это строковая переменная, которую вы заполните новым значением, предназначенным для замены дескриптора. Полный дескриптор, включая угловые скобки (< и >), заменяется в HTML-коде тем значением, которое передается назад в этом параметре.

Назначить HTML шаблон компоненту TPageProducer можно одним из двух способов: либо во время выполнения создать код HTML в виде строки и передать ее свойству HTMLDoc, либо назначить существующий HTML-файл свойству HTMLFile (т.е. вы либо строите HTML-код "на лету", либо используете существующие шаблоны, подготовленные заранее).

Предположим, например, что у вас есть HTML-файл MYPAGE.HTM, содержащий такой HTML-код:

<HTML>
<HEAD>
<TITLE>Мy Cool Homepage</TITLE>
</HEAD>
<BODY>
Howdy <#Name>! Thanks for stopping by my web site!
</BODY>
</HTML>

Вы можете назначить следующий код обработчику события PageProducer.OnHTMLTag:

procedure TwebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
═════case Tag of
══════════tgCustom: if TagString = 'Name' then ReplaceText := 'Partner';
═════end;
end;

В результате работы этого обработчика события образуется HTML-код

<HTML>
<HEAD>
<TITLE>My Cool Homepage</TITLE>
</HEAD>
<BODY>
Howdy Partner! Thanks for stopping by my web site!
</BODY>
</HTML>

Предположим, вы использовали этот код с помощью события OnAction в модуле WebModule следующим образом:

procedure TwebModule1.WebHodulelWebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
═════PageProducer1.HTMLFile := 'MYPAGE.HTM';
═════Response.Content := PageProducer1.Content;
end;

Созданная страница должна быть отправлена назад клиенту по запросу. При вызове свойства PageProducer. Content выполняется замена текста для каждого найденного дескриптора путем вызова обработчика события OnHTMLTag. Более сложные страницы могут иметь несколько элементов в операторе case, заменяющих различные пользовательские дескрипторы большими порциями HTML-кода, ссылками на другие страницы, графическими изображениями, таблицами и пр.

Компоненты TCustomPageProducer можно также связывать в цепочку. При этом для построения одной страницы можно использовать два таких компонента. Например, можно создать базовый шаблон HTML для хранения стандартного кода нижнего и верхнего колонтитулов, а также пользовательских дескрипторов, определяющих некоторые общие значения для страницы и местонахождение главного тела страницы. Затем все это можно передать с помощью первого генератора страницы, заменив дескрипторы общих данных стандартной информацией. Кроме того, можно заменить дескриптор главного тела страницы пользовательским кодом, в котором содержатся другие пользовательские дескрипторы. А результат передать второму компоненту TPageProducer, который заменит эти специфические значения дескрипторов соответствующей информацией.

[Листинг с примером использования компонента TPageProducer]




[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017