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

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

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

 

Active

Поле не используется, необходимо для соответствия таблицы объектной модели

 

 

Notes

Пометки материала.

 

 

 

 

Поле содержит список мнемонических обозначений, разделенных точками. Названия и

 

 

 

мнемонические обозначения пометок хранятся в таблице ArticleNotes

 

 

 

 

Пример ‘.interesting.bad.recommended.’

 

 

Owner

ID автора материала. Авторы материалов хранятся в таблице People

 

 

Status

Состояние материала. (Редактируется автором, опубликована и т.д.) См. таблицу ArticleStatus

 

Ord

Поле не используется, необходимо для соответствия таблицы объектной модели

 

 

ExpiredBefore

Начальная дата доступности материала

 

 

ExpiredAfter

Конечная дата доступности материала

 

 

Picture

Идентификатор маленькой сопровождающей картинки материала

 

 

BigPicture

Идентификатор большой сопровождающей картинки материала

 

 

Keywords

Ключевые слова

 

 

Comment1

Комментарий 1

 

 

Comment2

Комментарий 2

 

 

Comment3

Комментарий 3

 

 

IsHidden

Признак того, что материал является скрытым

 

 

IsTemplate

Признак того, что материал является шаблоном

 

 

Searched

Признак того, что материал отображается при поиске

 

 

ScriptCode

Исполнимая инструкция (ASP), которая выполняется при выводе материала на сайте

 

LikeArticles

Признак того, что нужно автоматически отображать материалы, имеющие общие ключевые

 

 

 

слова с этим материалом

 

 

Integration

Строка для интеграции с внешней системой

 

 

HasRating

Признак того, что у материала есть форма оценки

 

 

Editor

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

 

 

RPercent

Используется при подсчете процента завершенности материала

 

 

SeqNo

Используется при сортировке материалов в разделах

 

 

Pages – хранятся тексты страниц материала

 

 

Поля

 

Описание

 

 

ID

 

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

 

 

Article

 

ID материала, которой принадлежит страница

 

 

Title

 

Название страницы

 

 

Content

 

Текст страницы

 

 

Complete

 

Признак «завершенности» страницы, используется при подсчете процента готовности материала

 

PageVersions – версии страниц материалов

 

 

Поля

 

Описание

 

 

ID

 

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

 

 

Page

 

ID страницы, для которой хранится версия.

 

 

...

 

 

 

 

 

CreateDate

 

Дата создания версии.

 

 

CreateUserID

 

Автор версии (не используется).

 

 

Comment

 

Имя автора версии и комментарий версии

 

 

Version

 

Порядковый номер версии страницы

 

 

FolderArticles – связь материалов с разделами

 

 

Поля

 

Описание

 

 

Folder

 

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

 

 

Article

 

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

 

 

NeibLinks – связь с близкими материалами на этом сервере

 

 

Поля

 

Описание

 

 

ID

 

Уникальный идентификатор

 

 

Article

 

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

 

 

Folder

 

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

 

 

MatId

 

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

 

 

OrderN

 

Порядковый номер для отображения ссылки

 

 

ArticlesNotes – список возможных дополнительных пометок для материалов

 

 

Поля

 

Описание

 

 

ID

 

Уникальный идентификатор

 

 

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

 

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

121 из 121

mnemonic

Мнемоническое имя

name

Отображаемое название

ArticleStatus – список возможных статусов (стадий) материалов

Поля

Описание

ID

Уникальный идентификатор

Color

Название «Цвета»

Description

Описание

ArticleFiles – связь материалов с файлами (документами)

Поля

Описание

ArticleID

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

FileID

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

OrderN

Порядковый номер для отображения ссылки

DocTitle

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

ArticlePictures – связь материалов с изображениями

Поля

Описание

Article

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

Picture

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

RelArticles – связь с другими материалами. В настоящее время не используется. Оставлена для совместимости.

Поля

Описание

ID

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

Related

Идентификатор связанного материала

OrderN

Порядковый номер для отображения ссылки

ArticlesForms – связь материала с формами

Поля

Описание

Article

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

Form

Идентификатор формы

ArticlesForums – связь материала с форумами

Поля

Описание

article_id

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

forum_id

Идентификатор форума

forum_topic_id

Идентификатор темы в форуме

forum_topic_name

Название темы в форуме

Основные хранимые процедуры

Sait_Articles_GetMaterial

Классы

UML-диаграмма

Copyright © 2005 Individ company

Страница

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

122 из 122

 

 

Рисунок 27. UML-диаграмма классов модуля «Контент»

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

CArticle

CMaterial

Copyright © 2005 Individ company

Страница

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

123 из 123

 

 

CMaterials

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

Пример 1.

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

Dim i

Dim aMaterialList If FolderID<>0 then

Dim oAL: set oAL = New CMaterials ' класс со списком материалов oAL.GetInfo FolderID, UserInfo.UserID ' заполнение обьекта класса

for i=0 to oAL.count

%><%=oAL.Title(i)%> [<%=left( oAL.PubDate(i),10)%>] <%=SystemInfo.SiteUrl&oAL.Url(i)&VbCrLf%><%=oAL.ShortComment(i)&VbCrLf&VbCrLf%> <%

next end if

Пример 2.

Отображение материала на фронтофисе.

Dim oMaterial : Set oMaterial = New CMaterial If Not oMaterial.GetInfo(matId) Then

UserSession.NewEvent "NF", UserInfo.UserID, "DM", 0, "", 0, "", true, true Response.Redirect "/errors/404.htm"

End If oMaterial.pNo = pNo

oMaterial.Query = QSS("query")

If RTest(oMaterial.Rights, 0, crRF + crWF + crCF) Then UserSession.FailPageLoad "article authorization"

Response.Redirect _SystemInfo.URLAuthPage&"&err=accessdeny&backpage="&_ Server.URLEncode(MakeSelfRefUrl("&matid="&matid))

End If oMaterial.Show

Copyright © 2005 Individ company

Страница

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

124 из 124

 

 

Буклет

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

Посетителям сайта часто бывает нужно собрать материалы сервера на одной странице в оптимизированной для печати форме. Буклет как раз дает пользователям такую возможность.

Функциональность состоит из 4-х страниц (шагов). Пользователь последовательно переходит по страницам, нажимая на соответствующие кнопки, таким образом функциональность похожа на обыкновенный визард.

Шаг 1 : Выбор разделов Шаг 2 : Выбор материалов

Шаг 3 : Сортировка выбранных страниц Шаг 4 : Генерация буклета

Шаг 1: Выбор разделов

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

Пользователь отмечает разделы, которые его интересуют. Для облегчения нажатия большого числа чекбоксов сделан специальный javascript. При нажатии на неотмеченный чекбокс раздела автоматически включаются чекбоксы подразделов. При нажатии на отмеченный чекбокс значения его самого и вложенных сбрасываются. (Такая возможность появляется если выбран групповой режим выделения в настройках)

Шаг 2: Выбор материалов

В результате поста с предыдущей страницы формируется строка, содержащая идентификаторы разделов, которые были отмечены. Эта строка запоминается в объекте Session с уникальным (случайным) ключом, и далее этот ключ используется при переходах между различными страницами буклета.

Сама страница содержит древовидный список выбранных ранее разделов и вложенных в них материалов.

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

<input type="checkbox" name="prn" value="{@id}"> - для разделов <input type="checkbox" name="prn" value="0{@id}"> - для материалов

В аттрибуте action формы постинга передается ключ, по которому в объекте Session сохранены выбранные на первом шаге разделы.

Шаг 3: Сортировка выбранных страниц

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

Из базы загружается список материалов, содержащихся в выбранных на первом шаге разделов.

(Загружаются именно все материалы из выбранных разделов, поскольку для загрузки только отмеченных материалов пришлось бы предварительно парсисть строку и отдельно прогружать материалы, либо писать специально предназначенную процедуру)

На странице выводится список отмеченных ранее разделов и материалов. «Отсортированности» удается добиться за счет того, что в результатах поста переменные идут в той последовательности, в которой они находятся в HTML-коде. Меняя DOM-структуру HTMLа яваскриптом можно этого добиться.

Шаг 4: Генерация буклета

Так же как и на странице сортировки, через переданный ключ страница получает список идентификаторов отмеченных разделов и материалов.

Для распечатки используется функция PrintFolder, располагающаяся в файле print-versions.asp В этой функции определены версии для печати всех «распечатываемых» разделов. Также в самом файле хранится массив PrintableFiles, содержащий имена скриптов, которые можно распечатывать. Для использования PrintFolder необходимо включить на странице все использующиеся инклюды.

Copyright © 2005 Individ company

Страница

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

125 из 125

 

 

Отображение чекбоксов в дереве элементов

При отображении дерева в booklet.xsl передается список имен скриптов, которые берутся из массива PrintableFiles. При отображении раздела шаблон проверяет, есть ли filename раздела среди переданных имен.

Версия для печати

Версия для печати конкретного раздела работает через ту же функцию, что и страница генерации буклета.

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

1.Добавляем в массив PrintableFiles имя главного файла типа.

2.Добавляем в функцию PrintFolder логику вывода, соответствующую новому типу разделов.

3.Добавить новые инклюды (если они нужны) на страницу версии для печати и страницу генерации буклета

XSL-шаблоны

Имя файла

Описание

booklet.xsl

Построение дерева чекбоксов

Copyright © 2005 Individ company

Страница

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

126 из 126

 

 

Интерактивные модули

Голосования

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

Бэкофис

1.При незаполнении даты начала и завершения голосования в первое поле подставляется текущая дата, во второе текущая дата + 10 дней.

2.Чем выше приоритет голосования, тем выше вероятность отображения голосования на фронтофисе

3.Нельзя редактировать дату начала голосования, если голосование уже стартовало и есть хотя бы один вариант ответа на него. Также нельзя редактировать дату начала уже закончившихся голосований.

4.Чтобы изменить состояние голосования из закончившегося в текущее нужно поменять дату его окончания.

5.Если на голосование уже отвечали то нелья менять варианты ответа.

Фронтофис

1.Голосования появляются на фронтофисе по следующему алгоритму

1.1.Выбираются все голосования для текущего сервера фронтофиса

1.2.Исключаются голосования

1.2.1.Которые есть в Cookies у пользователя как «те, на которые он уже проголосовал»

1.2.2.Для которых в списке последних 100 IP есть значение, равное IP пользователя

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

2.При нажатии на кнопку голосования

2.1.Засчитывается вариант ответа пользователя

2.2.Пользоателю ставится кука голосования

2.3.IP пользователя записывается в список последних IP, с которых голосовали этого голосование

3.При показе результатов голосования сумма процентов по вариантам ответов для голосований с выбором одного варианта ответа равна 100%. Для голосований с несколькими вариантами ответа может быть больше 100%.

База данных

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

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

Votings – таблица хранений голосований

Copyright © 2005 Individ company

Страница

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

127 из 127

 

 

Поле

Описание

ID

Идентификатор голосования

Quest

Вопрос голосования

Priority

Приоритет голосования

DateStart

Время начала голосования

DateEnd

Время окончания голосования

Votes

Количество проголосовавших

MultiOption

Можно ли выбирать несколько ответов при голосовании. 0 – нет, 1 да.

Options

Количество вариантов ответа

Changed

Дата последней модификации

VotingOptions – варианты ответов голосований

Поле

Описание

ID

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

SeqNo

Порядковый номер ответа в голосовании

Voting

Ссылка на голосование, которому принадлежит вариант ответа

Text

Текст варианта ответа

Votes

Количество выбравших этот пункт

VotingsSites – связь между голосованиями и серверами, на которых они отображаются

Поле

Описание

ID

Идентификатор голосования

Site

Идентификатор сервера

VotesIPs – таблица хранения IP-адресов голосовавших

Поле

Описание

Stamp

Время голосования

Voting

Идентификатор голосования

IP

IP-адрес голосовавшего

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

Простые. Описание не требуется.

Классы

UML-диаграмма

Copyright © 2005 Individ company

Страница

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

128 из 128

 

 

CVotings

-Class_Initialize() -Class_Terminate() +GetInfo() +get_IsInit() +get_Count() +get_ID(in Index) +get_Quest(in Index) +get_Priority(in Index)

+get_DateStart(in Index) +get_DateEnd(in Index) +get_Votes(in Index)

+get_MultiOption(in Index) +get_Options(in Index) +get_Changed(in Index) +get_CanVote(in Index) -get_PageCount() -get_PageFirst() -get_PageLast() -get_HasPrevPage() -get_HasCurrentPage() -get_HasNextPage() -get_PrevPageFirst() -get_PrevPageLast() -get_NextPageFirst() -get_NextPageLast() -get_PrevPageTitle() -get_PageTitle() -get_NextPageTitle() +get_Voting(in Index) +get_RandomVoting()

-GetRandomVotingIDParam(in FromAll) -GetRandomVotingID()

+Show()

+Navigation()

CVoting

-Class_Initialize() +GetInfo(in Voting) +get_IsInit() +get_Count() +get_CanVote() +get_ID(in Index) +get_Text(in Index)

+get_VotesCount(in Index) +get_VotesPercent(in Index) +ShowResultsInTable() +ShowVoting() +ShowResults() -ProcessPost()

-AddVote(in Options)

Рисунок 29. UML-диаграмма классов модуля «Голосования»

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

CVoting

CVotings

Copyright © 2005 Individ company

Страница

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

129 из 129

 

 

Форумы

Модуль предназначен для организации форумов на сайте. Форумы могут существовать как самостоятельно, так и быть связаны с материалами и товарами магазина для их обсуждения.

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

1.При создании нового форума некоторые его настройки копируются из таблиц настроек форума по умолчанию – ForumDf

и ForumsBannedIPDf.

2.Для блокировки пользователя по нику используются объектные права на форум. Отправлять сообщения в форум могут только пользователи, имеющие право на запись (ФО) на этот форум. Пользователей, имеющих право управление (ФО) на форум, заблокировать через значок блокировки по нику нельзя.

3.В поле IP таблицы ForumsBannedIP могут находиться как IP, так и маски IP. Пользователи, IP которых свопадает с одним из IP или одной из масок IP этой таблицы, не имеют права отправки сообщений в форум.

4.Сообщения в форуме представляются в виде дерева, при этом корневыми элементами дерева являются темы форума (идентификатор темы для текущего сообщения находится в поле Thread таблицы ForumsPostings), а дочерние сообщения связаны с родительским по полю Parent таблицы ForumsPostings.

5.Если у сообщения стоит флаг Notify (уведомлять об ответах на сообщение по электронной почте), то при ответе на это сообщение или его дочерние сообщения пользователя с Email, отличным от Email автора этого сообщения автору сообщения высылается письмо с уведомлением. Уведомление работает только для премодерируемых форумов.

6.В постмодерируемом форуме сообщение выводится как не одобренное менеджером интерактивов, пока его флаг IsValid не будет установлен в 1.

7.Большинство страниц бэкофиса форумов реализованы на устаревшей технологии MAE, используемой в ранних версиях Сайтистики. Тенденции развития Сайтистики таковы, что от использования данной технологии постепенно отказываются.

База данных

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

 

 

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

 

 

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

 

 

 

Forums – список форумов

 

 

 

Поле

Описание

 

 

ID

Уникальный идентификатор

 

 

Folder

Раздел, с которым связан форум

 

 

Moderation

Политика модерирования: 0 – постмодерируемый; 1 – премодерируемый

 

 

EnablePostings

Флаг, разрешающий добавлять сообщения в форум

 

 

NeedRegistration

Флаг, указывающий, что добавлять сообщение в форум могут только зарегистрированные

 

 

пользователи

 

 

Messages

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

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

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

130 из 130