Saitistika 4.0.Руководство разработчика.2005
.pdf
|
|
Рисунок 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 пользователя |
||
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 |
|
|