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