Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Saitistika 4.0.Руководство разработчика.2005

.pdf
Скачиваний:
11
Добавлен:
23.08.2013
Размер:
3.22 Mб
Скачать

 

 

Рисунок 38. Диаграмма таблиц базы данных модуля «Списки рассылок»

 

 

Описание таблиц

 

 

 

 

MailLists - Листы рассылки

 

 

Поля

 

Описание

 

 

Active

 

Активность

 

 

AscMail

 

Подтверждать подписку

 

 

bottomHTML

 

Низ письма для HTML версии

 

 

bottomText

 

Низ письма для текстовой версии

 

 

folder

 

ID фолдера из табтицы folders

 

 

format

 

Формат письма

 

 

ID

 

ID листа рассылки

 

 

mEmail

 

Обратный Email

 

 

Subject

 

Тема письма для варианта другое

 

 

SubjType

 

Тип темы письма

 

 

TextInHTML

 

Брать текстовую версию письма из HTML версии

 

 

ThFileName

 

Имя файла темы для редактирования по кнопке редактировать

 

 

ThID

 

ID темы для редактирования по кнопке редактировать

 

 

TopHtml

 

Верх письма для HTML версии

 

 

TopText

 

Верх письма для текстовой версии

 

 

urlHTML

 

Динамическое содержание HTML-версии письма

 

 

urlText

 

Динамическое содержание текстовой версии письма

 

 

MailListClients - Подписчики

 

 

Поля

Описание

 

 

Active

0 – требуется подтверждение подписки, 1 – подтверждение не требуется

 

 

cID

ID пользователя из таблицы clients

 

 

mID

ID списка рассылки

 

 

removecheck

1 – требуется подтверждение отписки, 0 – подтверждение не требуется

 

 

EventParamsMaillist - Логирование листов рассылки

 

 

Поля

 

Описание

 

 

bodyHTML

 

Содержание HTML-версии письма

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

151 из 151

bodyText

 

Содержание текстовой версии письма

eDateTime

 

Время рассылки

format

 

Формат письма

From

 

Поле From письма

ID

 

ID

maillist

 

ID списка рассылки

ReplyTo

 

Поле ReplyTo письма

shDateTime

 

Не используется

shType

 

Не используется

status

 

Статус отправления письма

Subject

 

Поле Subject письма

To

 

Поле To письма

EventParamsMaillistClients - логирование подписчиков

Поля

Описание

archive

ID из EventParamsMaillist

cID

ID пользователя из таблицы clients

email

Email пользователя

Login

Login пользователя

Title

Title (имя +фамилия) пользователя

Хранимые процедуры

1.MailList_AddClient

2.MailList_AddFile

3.MailList_AddUser

4.MailList_CheckLogin

5.MailList_DelClient

6.MailList_Delete

7.MailList_DeleteMailLists

8.MailList_DeleteUsers

9.MailList_GetClientInfo

10.MailList_GetClients

11.MailList_GetInfo

12.MailList_GetInfo4Sch

13.MailList_GetListsUsers

14.MailList_ListFiles

15.MailList_ListTree

16.MailList_NewFileID

17.MailList_SetEventParams

18.MailList_Update

19.Sait_MailList_Confirm

20.Sait_MailList_EmailInfo

21.Sait_MailList_Get

22.Sait_MailList_NewClient

23.Sait_MailList_RegGetClient

24.Sait_MailList_Subscribe

25.Sait_MailList_Unsubscribe

26.Sait_MailList_UnsubscribeAll

27.Sait_MailList_UpdateClientPreferences

Классы

UML-диаграмма

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

152 из 152

 

 

CMailList

 

CMailListEditor

 

 

 

-Class_Initialize()

 

-Class_Initialize()

-Class_Terminate()

 

-Class_Terminate()

+GetInfo(in FolderID)

 

+GetInfo(in fID)

+DefineInlineSubscr(in Form)

 

-LoadUsers()

-DefineForm()

 

+get_FolderID()

+get_IsInit()

 

+get_Denied()

+get_Count()

 

+get_IsComputerAccessDenied()

+get_IsValid()

 

+get_ReadOnly()

+get_ErrorMessage()

 

+get_Heading()

+get_Email()

 

+get_IsValid()

+get_DisplayEmail()

 

+get_ErrorStr()

+get_PreferredFormat()

 

+Show()

+get_FolderID(in Index)

 

+ProcessPost()

+get_ID(in Index)

 

-SaveAttach(in mUpl, in name)

+get_Title(in Index)

 

-DeleteAttach(in number)

+get_Rights(in Index)

 

-ParseUsers()

+get_Format(in Index)

 

-DBCheckLogin(in sUser, inout sEmail)

+get_AscMail(in Index)

 

-WriteScheduleDlgScript()

+get_Subscribed(in Index)

 

 

+get_NeedConfirmation(in Index)

 

 

+get_OldSubscribed(in Index)

 

 

+get_OldNeedConfirmation(in Index)

 

 

-get_Active(in Index)

 

 

-get_RemoveCheck(in Index)

 

 

+get_InvalidConfirmation()

 

 

+get_HasChanges()

 

 

+get_HasUserChanges()

 

 

+get_HasEmailChanges()

 

 

-get_IsPost()

 

 

-get_MustShowTable()

 

 

+ShowTip()

 

 

+Show()

 

 

+ShowForm()

 

 

+ShowTable()

 

 

+ShowMessages()

 

 

-GetMessage(inout Valid, inout IsSubmit, inout IsConfirm)

 

 

-MakeState(in bSubscr, in bNeedConf)

 

 

-StartLogging(in BySubmit, in Message)

 

 

-LogSubscrEvent(in Index)

 

 

-EndLogging()

 

 

-LogEvents()

 

 

+PreProcessPost()

 

 

+RegGetClient(in Email, in Login, in Password)

 

 

+AutoFillForInvalidPost()

 

 

+RegSetEmail(in Email)

 

 

+RegReGetInfo(in Email)

 

 

+ProcessPost()

 

 

+ProcessPostFor(in Form)

 

 

-NewClient(in Email, in oldID)

 

 

-GetPostArray(in name)

 

 

-IsNewSubscribed(in aNewSubscr, in Index)

 

 

-ValidateEmail()

 

 

-ASubscribe(in uID, in cID, in cPrefFormat, in aNewSubscrPost)

 

 

-get_IsNewSubscrAsc(in uID, in Index)

 

 

-get_IsNewUnSubscrAsc(in uID, in Index)

 

 

-SubscribeClient(in uID, in cID, in i)

 

 

-UnsubscribeClient(in uID, in cID, in i)

 

 

+ProcessControlOps(in FolderID)

 

 

Рисунок 39. UML-диаграмма классов модуля «Списки рассылок»

Список классов

CMailList CMailListEditor

Пример использования

Вывод формы подписки или статуса подписки на фронтофисе

Dim MailList : Set MailList = New CMailList

MailList.ProcessControlOps FolderInfo.ID

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

153 из 153

 

 

MailList.PreProcessPost

If Not MailList.GetInfo(FolderInfo.ID) Then _

RaiseErrorDesc 404, "Список рассылок " & FolderInfo.ID & " не найден"

MailList.ProcessPost

MailList.ShowTip

MailList.ShowMessages

MailList.Show

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

154 из 154

 

 

Баннерная система

Логика работы

1.Один баннер может входить в несколько профилей.

2.При выводе профиля на страницу фронтофиса файл xsl-шаблона профиля берется из темы текущего раздела.

3.При выводе профиля на страницу фронтофиса выбирается один из баннеров профиля в соотвтествии со следующими критериями:

3.1.Баннер доступен текущему пользователю по правам (для отображения баннера требуется право «отображение (ФО)», для построения ссылки от баннера право «запись (ФО)»)

3.2.Максимальное количество показов баннера равно 0 или больше текущего числа его показов

3.3.Дата начала показа баннера не заполнена (в таблице – NULL) или меньше текущей даты

3.4.Дата окончания показа баннера не заполнена (в таблице – NULL) или больше текущей даты

3.5.В свойствах баннера установлено, что он показывается в текущем разделе и/или материале (если есть). В базе данных это реализуется через поле ShowType таблицы BannersBanners и таблицы связей BannersInFolders и BannersInArticles.

3.6.Баннер является активным (поле SwitchedOn в таблице BannersBanners имеет ненулевое значение)

3.7.Из всех баннеров, доступных по вышеописанным критераям, баннер выбирается случайным образом. При этом учитывается приоритет баннера, а также насколько близка дата окончания показа баннера (если она заполнена) и насколько близко количество показов баннера к его максимальному количеству показов (если максимальное количество показов ненулевое). Алгоритм выбора баннера для показа представлен в п.4.

4.Из всех доступных из п.3 баннеров для отображения выбирается один по следующему алгоритму:

4.1.Вычисляем характеристику оставшегося числа показов баннера (DisplayRem): Если максимальное количество показов баннера = 0, то DisplayRem = 0, иначе DisplayRem = ([макс. кол-во показов баннера] – [текущее кол-во показов баннера]) / [макс. кол-во показов баннера]. Таким образом, характеристика оставшегося количества показов баннера изменяется от 0 до 1 и уменьшается с ростом количества показов баннера. Баннеры, у которых не указано максимальное кол-во показов, имеют наименьший приоритет по этой характеристике.

4.2.Вычисляем характеристику оставшегося времени показов баннера (DateRem): Если дата окончания показов баннера не указана (NULL), то DateRem = 0, иначе DateRem = 1 / ([разница в днях между датой окончания показа баннера и текущей датой] + 1). Таким образом, характеристика оставшегося времени показа баннера изменяется от 0 до 1 и увеличивается при приближении к дате окончания показа баннера. Баннеры, у которых дата окончания показа не указана, имеют наименьший приоритет по этой характеристике.

4.3.Вычисляем характеристику показа для каждого баннера из всех допустимых баннеров: Характеристика показа = ( 0.1 + 0.45 * (DateRem + DisplayRem) ) * ([приоритет баннера] / [максимальный приоритет среди допустимых баннеров]) * Rnd(), где Rnd() возвращает случайное число от 0 до 1. Полученная характеристика находится в

диапазоне от 0 до 1 и зависит как от случайного фактора, так и линейно зависит от двух предыдущих характеристик и приоритета баннера. При этом даже баннеры с нулевыми характеристиками DateRem и DisplayRem имеют шанс быть выбранными.

4.4. Выбираем баннер с наибольшей характеристикой, вычисленной в п.4c.

5.Для подсчета статистики переходов по баннерам ссылки от баннеров ведут на специальную страницу banner-redirect.asp с необходимыми параметрами. На этой странице добавляются собятия перехода для баннера и профиля и затем производится редирект на нужную страницу.

Рисунки для баннеров загружаются и хранятся в файлах на сервере, имена которых имеют следующий вид:

1.Основное изображение - /common/data/pub/banners/<ID баннера>/Picture.<Расширение файла>

2.Дополнительное изобраджение - /common/data/pub/banners/<ID баннера>/Picture2.<Расширение файла>

В этих файлах могут находиться как рисунки в форматах bmp, jpeg, gif, png, так и flash-баннеры (swf). О конкретном содержимом файла можно узнать из view BannersBannersWithRights. Его поля ImgType и AdditionalImgType содержат тип содержимого рисунков баннера. Вожможные значения типа содержимого:

1.image/gif – рисунок в формате gif

2.image/pjpeg – рисунок в формате pjpeg

3.image/bmp – рисунок в формате bmp

4.image/png и image/x-png – рисунок в формате png

5.application/x-shockwave-flash – flash-баннер

Отображение баннеров на страницах ФО

Для отображения баннеров на страницах ФО к ним следует подключить файл banner-functions.asp строкой: <!-- #include virtual=”/common/include/banner-functions.asp” -->

Отображение баннеров производится вызовом в соответствующем месте страницы функции Banners_ShowBanner (

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

155 из 155

 

 

ProfileID_or_Name ). В качестве параметра можно передать либо целое число, являющееся идентификатором профиля, либо строку, являющуюся названием профиля. Для отображения баннеров можно воспользоваться также функцией Banners_GetBanner (Profile_ID_or_Name, Icons), которая только возвращает HTML-код баннера и опционально значки быстрого редактирования, или классом CProfileBanners напрямую (для реализации сложной логики).

Для непосредственного вывода баннеров необходимо создавать файлы тем, которые должны иметь формат xsl. Сейчас существуют следующие файлы для вывода баннеров в теме default:

1.banner-template-468x60.xslдля вывода графических баннеров размером 468x60

2.banner-template-234x90.xslдля вывода графических баннеров размером 234x90

Шаблоны для вывода баннеров следует создавать по примеру этих файлов с учетом конкретных требований. Например, следует реализовать подходящий вывод баннеров внешней баннерной сети (сейчас они выводятся как «заглушки»), а flash- баннерам передавать параметры, как это требуется таким баннерам (сейчас параметры flash-баннерам не передаются).

База данных

Диаграмма таблиц

 

 

Рисунок 40. Диаграмма таблиц базы данных модуля «Баннерная система»

 

 

Описания таблиц

 

 

 

 

Все баннеры хранятся в таблице BannersBanners

 

 

Поля

 

Описание

 

 

ID

 

Идентификатор баннера

 

 

Name

 

Название баннера

 

 

LinkName

 

Не используется

 

 

URL

 

URL ссылки

 

 

DisplayFreq

 

Относительная частота показа баннера

 

 

DisplayMax

 

Максимальное количество показов баннера (0 – неограниченное число показов)

 

 

Text

 

Текст баннера

 

 

AdditionalText

 

Дополнительный текст

 

 

ImageID

 

Идентификатор рисунка из таблицы Pictures

 

 

ImageExt

 

Расширение файла рисунка

 

 

AdditionalImageID

 

Идентификатор дополнительного рисунка из таблицы Pictures или 0

 

 

AdditionalImageExt

 

Расширение файла дополнительного рисунка

 

 

StartShowDate

 

Дата начала показа или NULL, если дата не указана

 

 

EndShowDate

 

Дата окончания показа или NULL, если дата не указана

 

 

ShowType

 

Где показывается баннер:

 

 

 

 

0 – везде

 

 

 

 

1– только в разделах и материалах (связи с разделами и материалами соответственно в таблицах

 

 

 

BannersInFolders и BannersInArticles)

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

156 из 156

 

 

2 – в разделах с наследованием

 

 

ShowCount

Число отображений баннера

 

 

ClickCount

Число переходов по баннеру

 

 

SwitchedOn

Атрибут «Включен»: не 0 если включен, 0 если отключен

 

 

Все профили хранятся в таблице BannersProfiles

 

 

Поля

Описание

 

 

ID

Идентификатор профиля

 

 

TypeID

Идентификатор типа профил из таблицы FolderTypes или FoldersTypes

 

 

Name

Название профиля

 

 

ConnectCode

Не используется

 

 

OutnetPriority

Относительный приоритет баннеров внешней баннерной сети (если 0, то банеры внешней

 

 

баннерной сети не показываются)

 

 

ShowCount

Число отображений профиля

 

 

ClickCount

Число переходов по профилю

 

 

Для обеспечения связи между баннерами и профилями служитт таблица BannersInProfiles

 

 

Поля

Описание

 

 

Banner

Идентификатор баннера из таблицы BannersBanners

 

 

Profile

Идентификатор профиля из таблицы BannersProfiles

 

 

Для обеспечения связи между баннерами и разделами служит таблица BannersInFolders

 

 

Поля

Описание

 

 

Banner

Идентификатор баннера из таблицы BannersBanners

 

 

Folder

Идентификатор раздела из таблицы Folders

 

 

Для обеспечения связи между баннерами и материалами служит таблица BannersInArticles

 

 

Поля

Описание

 

 

Banner

Идентификатор баннера из таблицы BannersBanners

 

 

Article

Идентификатор материала из таблицы Articles

 

 

Views

 

 

 

VIEW BannersBannersWithRights

 

 

Поля

Описание

 

 

ID

Идентификатор баннера

 

 

Name

Название баннера

 

 

Text

Текст баннера

 

 

AdditionalText

Дополнительный текст

 

 

ImageID

Идентификатор рисунка для баннера из таблицы Pictures

 

 

AdditionalImageID

Идентификатор дополнительного рисунка для баннера из таблицы Pictures

 

 

Label

Не используется

 

 

AdditionalLabel

Не используется

 

 

URL

URL ссылки

 

 

DisplayFreq

Относительная частота показа баннера

 

 

DisplayMax

Максимальное число показов баннера (0 – неограниченное число показов)

 

 

ShowCount

Число отображений баннера

 

 

ClickCount

Число переходов по баннеру

 

 

ShowType

Где показывается баннер:

 

 

 

0 – везде

 

 

 

1– только в разделах и материалах (связи с разделами и материалами соответственно в таблицах

 

 

BannersInFolders и BannersInArticles)

 

 

 

2 – в разделах с наследованием

 

 

ImgWidth

Ширина рисунка

 

 

ImgHeight

Высота рисунка

 

 

ImgType

Тип содержимого рисунка

 

 

AdditionalImgWidth

Ширина дополнительного рисунка

 

 

AdditionalImgHeight

Высота дополнительного рисунка

 

 

AdditionalImgType

Тип содержимого дополнительного рисунка

 

 

ImageExt

Расширение файла рисунка

 

 

AdditionalImageExt

Расширение файла дополнительного рисунка

 

 

Active

Вычисляемое поле, указывающее, что баннер активен (1), т.е. может отображиться, или

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

157 из 156

 

неактивен (0), т.е. не будет отображаться

StartShowDate

Дата начала показа или NULL, если дата не указана

EndShowDate

Дата окончания показа или NULL, если дата не указана

AccountID

Идентификатор пользователя из таблицы People, для которого на баннер установлены какие-то

 

права или NULL, если таких пользователей нет

SwitchedOn

Атрибут «Включен»: 0 или не 0

Rights

Права на баннер для пользователя с идентификатором AccountID

VIEW BannersProiflesWithRights

Поля

Описание

ID

Идентификатор профиля

TypeID

Идентификатор типа профиля из таблицы FolderTypes или FoldersTypes

Name

Название профиля

Typename

Название типа профиля

Template

Файл шаблона для профиля

ThemeID

Идентификатор темы для профиля (первая найденная тема, в которой есть файл с именем

 

Template)

ConnectCode

Не используется

OutnetPriority

Относительный приоритет баннеров внешней баннерной сети

AccountID

Идентификатор пользователя из таблицы People, для которого на профиль установлены какие-

 

то права или NULL, если таких пользователей нет

Rights

Права на профиль для пользователя с идентификатором AccountID

ShowCount

Число отображений профиля

ClickCount

Число переходов по профилю

Хранимые процедуры

Имена начинаются с Banners_ и Sait_Banners_.

Классы

Список классов

CBanner CProfileBanners

XSL-шаблоны

Имя файла

Описание

br-properties.xsl

Выводит интерфейс пользователя для редактирования свойств баннера

brs-list.xsl

Выводит список профилей и баннеров

Написание шаблонов вывода баннеров

Все файлы шаблонов баннеров должны иметь приведенную ниже общую часть:

<?xml version='1.0' encoding="windows-1251"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" version="1.0" encoding="windows-1251"/>

<xsl:include href="br-templates.xsl"/>

<xsl:template match="/banner[1]">

<!-- либо match="/banner" и т.п. для реализации более сложной логики отображения, чем просто вывод первого баннера -->

. . . . . . . . .

</xsl:template>

</xsl:stylesheet>

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

158 из 157

 

 

На месте точек следует вставить текст для вывода баннера согласно разрабатываемому шаблону. При этом следует предполагать, чо на вход xsl-шаблону передается следующая структура XML:

<banner

ID = "идентификатор баннера" Priority = "приоритет баннера" Rights = "права баннера"

URL = "url баннера для вывода на странице" Name = "имя баннера"

Text1 = "текст баннера"

Text2 = "дополнительный текст баннера" >

<picture1

ID = "идентификатор изображения в БД" Width = "ширина изображения"

Height = "высота изображения"

Src = "путь к изображению на сервере" Size = "размер изображения"

ContentType = "тип содержимого изображения" />

<picture2

... (имеет тот же набор атрибутов, что и picture1) />

</banner>

Для упрощения реализации шаблонов баннеров существует шаблон br-templates.xsl, содержащий несколько именованных template-ов для стандартного вывода элементов баннера. Ниже перечислены имена и описания этих template-ов:

1.banner-text контекст: <banner>

параметры: нет

выводит @Text1 или @Text2 без экранирования в зависимости от того, значение какого атрибута задано.

2.banner-picture контекст: <banner>

параметры:

width – ширина баннера

height – высота баннера

alt – alt баннера

выводит основную или дополнительную картинку баннера в зависимости от того, какая картинка задана. Вывод осуществляется через template с именем banner-image

3.banner-image

контекст: любой параметры:

src – src изображения

width – ширина изображения

height – высота изображения

type – тип содержимого изображения

alt – alt изображения

выводит изображение с переданными параметрами как img или flash в зависимости от параметра type. Если type содержит неизвестный тип содержимого, выводится /images/empty.gif.

Flash-баннеры

К баннеру можно подгрузить любой swf-файл. Но чтобы ссылка, указанная в свойствах баннера в бэкофисе, могла использоваться во flash-е, а, кроме того, чтобы для этого баннера работал счетчик переходов по ссылке, изготовленный для подгрузки flash-баннер должен обрабатывать параметр href, через который и передается ссылка, которая должна быть построена от баннера в соответствии с его свойствами. Такая же ссылка автоматически строится от текстовых баннеров и банеров, к которым подгружены изображения в формате gif, jpg и т.п. Эта ссылка автоматически обеспечивает увеличение счетчика переходов по баннеру.

При использовании стандартного шаблона Flash-баннер на странице выводится в следующем формате (параметр href выделен жирным шрифтом):

<object classid="clsid:..." width="..." height="..." codebase="...">

<param name="movie" value="/common/data/pub/brs/id/picture.swf?href=...">

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

159 из 159

 

 

<!-- другие параметры -->

<embed src="/common/data/pub/brs/id/picture.swf?href=..." ...> </object>

Примеры использования

Вывод баннеров на странице фронтофиса

'Вывод баннера из профиля с ID = 10 Banners_ShowBanner 10

'Вывод баннера из профиля с именем "Мой профиль " Banners_ShowBanner "Мой профиль"

Copyright © 2005 Individ company

Страница

Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464

160 из 160