Saitistika 4.0.Руководство разработчика.2005
.pdf
Рисунок 24. UML-диаграмма классов подсистемы «WorkFlow»
Список классов
CPathValidator CWorkflow CWorkflowLink CWorkflowNode
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
111 из 111 |
|
|
Подсистема быстрого редактирования
Логика работы
Практически у любого объекта системы имеется заранее предопределенный набор часто осуществляемых операций. Для быстрого перехода на страницы этих операций используются иконки быстрого редактирования. Иконки прикрепляются к объектам и выводятся на фронтофисе и бэкофисе.
Бэкофис
Для бэкофиса определены следующие типы иконок:
1.Свойства (перебрасывает на страницу редактирования свойств объекта, аналогична переходу по ссылке-имени объекта)
2.Доступ (перебрасывает на страницу назначения прав на объект)
3.Редактирование (перебрасывает на редактирования объекта)
4.Статистика (перебрасывает на страницу статистики по объекту)
5.Просмотр на фронтофисе (перебрасывает на страницу фронтофиса, непосредственно отображающую объект)
Все иконки, кроме просмотр на фронтофисе, перебрасывают на страницы бэкофиса. У иконки быстрого редактирования на бэкофисе может быть два состояния – активна и неактивна. Неактивные иконки выводятся в случае недопустимости операций над объектом (например, нет прав на выполнение операции), в противном случае выводятся активные. Если операция над всеми объектами определенного типа недопустима в принципе, иконка на быстрый переход к этой операции не выводится вообще. Вывод иконок осуществляется при помощи специалных функций и/или XSL-шаблонов. Схема вывода следующая: в результирующий XML нужно записать тэг <imageprops> с соответствующими параметрами, который потом будет нужным образом обработан format.xsl. Запись в XML из ASP-кода осуществляется через функцию RI.write в качестве параметра которой передается DirectEdit, возвращаемое процедурой getObjectPropEx (для этой процедуры можно указать ссылку и какие именно иконки возвращать в параметре DirectEdit) или ее упрощенной версией getObjectProp. Существуют также варианты записи тэга <imageprops> через RI. ImageProps или промежуточный XSL-шаблон, но их использовать не рекомендуется.
Для вывода иконок быстрого редактирования для произвольного типа объектов в случае, когда вывод страницы происходит через XSL-шаблон, предусмотрен специальный XSL-тег <objectprops>. Этот тег обрабатывается в ASP-коде класса Cinterface_BOSait сразу перед выводом страницы через шаблон format.xsl. При обработке тега вызывается функция
GetObjectPropEx из файла /include/object-properties.asp. Тег <objectprops> может иметь следующие атрибуты:
1.types – выводимые типы значков DirectEdit. Типы следует перечислять через запятую без пробелов. Если этот атрибут присутствует, то заданные типы преобразуются в массив и передаются в функцию GetObjectPropEx в качестве параметра aEditTypes. Если этот атрибут отсутствует, то в качестве параметра aEditTypes передается null.
2.link – этот параметр полностью аналогичен параметру LinkType фукнции GetObjectPropEx и определяет, куда будет вести ссылка от названия объекта. Если этот атрибут отсутствует, то в качестве параметра LinkType передается null.
3.oID – идентификатор объекта, соответствует параметру oID функции GetObjectPropEx. Этот атрибут должен обязательно присутствовать.
4.oType – двубуквенное обозначение типа объекта, соответствует параметру oType функции GetObjectPropEx. Этот атрибут должен обязательно присутствовать.
5.pattern – шаблон вывода информации об объекте, которую возвращает функция GetObjectPropEx. Если этот атрибут отстутствует, то будут выведены только иконки быстрого редактирования (значение параметра DirectEdit функции GetObjectPropEx после вызова). Шаблон вывода информации может содержать следующие ключевые обозначения:
5.1.%name% – название типа объекта, заменяется на значение параметра oName функции GetObjectPropEx.
5.2.%title% – название объекта без ссылки, заменяется на значение параметра oTitle функции GetObjectPropEx.
5.3.%link% – название объекта со ссылкой, заменяется на значение параметра oLink функции GetObjectPropEx.
5.4.%directedit% – иконки быстрого редактирования, заменяется на значение параметра DirectEdit функции
GetObjectPropEx.
5.5.%% – заменяется на %.
Фронтофис
Для фронтофиса определены следующие типы иконок:
1.Свойства (перебрасывает на страницу редактирования свойств объекта)
2.Структура (перебрасывает на раздел структуры, где находится объект)
3.Редактирование (перебрасывает на редактирования объекта)
4.Статистика (перебрасывает на страницу статистики по объекту)
5.Добавление раздела (перебрасывает на страницу добавления раздела структуры)
6.Добавление документа (перебрасывает на страницу добавления объекта)
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
112 из 112 |
|
|
Все иконки перебрасывают на соответствующие страницы бэкофиса. Если операция над объектом недопустима или на нее нет прав, то иконка на фронтофисе для этого конкретного объекта не выводится вообще. Вывод иконок осуществляется при помощи специалных функций и/или XSL-шаблонов. Функции и шаблоны определяются для каждого конкретного типа объектов. В каждом базовом классе (CFolderInfo , CArticle , CMaterials , CSubFolders) имеются средства для вывода иконок
DirectEdit:
1.CFolderInfo.Icons( ) – вывод иконок раздела
2.CArticle.Icons(I) – вывод иконок заданной страницы материала
3.CMaterials.MatIcons(I) – вывод иконок заданного материала из списка материалов
4.CSubFolders.Icons(I) – вывод иконок заданного раздела из списка разделов
Функции вывода иконок работают в соответствии с правами пользователя, поэтому в коде их не надо учитывать. Для вывода иконок директэдита в срецифических функциональностях следует использовать собственные функции.
Функции object-functions.asp
XSL-шаблоны
Имя файла |
Описание |
directedit.xsl |
Хранит шаблоны вывода иконок к разделам и материалам на фронтофисе. |
|
Подключается xsl директивой <xsl:include href=”directedit.xsl” /> |
|
<xsl:call-template name=”ficon” /> - вызывает template для вывода иконок раздела |
|
<xsl:call-template name=”аicon” /> - вызывает template для вывода иконок материала |
|
<xsl:template name="propicon"> - вмпомогательный шаблон для вывода иконки свойств |
|
<xsl:template name="editicon"> - вспомогательны шаблон для вывода иконки редактирования |
Format.xsl |
В нем хранится темплэйт для вывода иконок директэдита на бэкофисе. Данный шаблон |
|
является очень большим и учитывает все возможные варианты вывода иконок для всех |
|
типов объектов Сайтистики. |
|
<xsl:template match="imageprops"> |
|
... |
|
</xsl:template> |
Примеры использования
Вывод названия раздела с иконками на фронтофисе
<h1><%=FolderInfo.Icons()%><%=FolderInfo.Title()%></h1>
Вывод иконок для специфического объекта на фронтофисе
Function GetIcons ( Rights , folderID )
if IE5plus and RTest(Rights , crRB , 0 ) and ( not RTest(Rights , 0 , crRF+crWF ) ) then GetIcons = vbCrLf & "<a href="""& SystemInfo.BOUrl
&"aspscripts/tests/test-edit.asp?folderid="& FolderID&""">"
&"<img border=""0"" src=""/images/icon-templates.gif"" width=""16"" height=""16"" alt=""Редактировать""></a>"
&vbCrLf & "<a href="""& SystemInfo.BOUrl
&"aspscripts/directories/properties-25.asp?folderid="& FolderID &"&backurl="&Server.URLEncode(Request.ServerVariables("SCRIPT _NAME")&"?"&Request.QueryString) &""">"&"<img border=""0"" src=""/images/icon-tools.gif"" width=""16"" height=""16"" alt=""Свойства""></a>"
end if
End Function
Пример демонстрирует вывод иконок свойств и редактирования для теста (тип раздела 25). Значения иконок и линок формируются вручную.
Вывод иконок редактирования на бэкофисе через ASP
GetObjectPropEx Array(“props”, “stat”), “stat”, ID, “AU”, Name, Title, Link, DirectEdit. RI.Write DirectEdit
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
113 из 113 |
|
|
Пример показывает, как сначала берутся свойства для объекта определенного типа , в качестве параметров передаются какие иконки нужно брать, идентификатор объекта, его тип. Далее производится вывод в результирующий XML при помощи функции объекта RI.
Вывод иконок редактирования на бэкофисе через промежуточное XSL-преобразование
Данный метод является нерекоммендуемым, но иногда встречается в старых функциональностях бэкофиса.
Для вставки в результирующий XML тэга <imageprops> следует использовать промежуточный XSL-шаблон, в котором в зависимости от каких-либо условий сформировать директэдит, например так:
<imageprops>
<xsl:attribute name="propsUrl"> <xsl:if test="($read or $write)">
/aspscripts/directories/properties-25.asp?FolderID=
<xsl:value-of select="@id"/>&backurl=<xsl:value-of select="$pageUrl"/> </xsl:if>
</xsl:attribute> <xsl:attribute name="access">
<xsl:if test="$control"> /aspscripts/access/access.asp?id=
<xsl:value-of select="@id"/>&Type=F&url= <xsl:value-of select="$pageUrl"/>
</xsl:if>
</xsl:attribute> <xsl:attribute name="url">
<xsl:if test="@valid!=0"> <xsl:if test="$foread">
<xsl:value-of select="@siteurl"/>/themes/<xsl:value-of select="@themename"/> /<xsl:value-of select="@filename"/>?folder=<xsl:value-of select="@id"/> </xsl:if>
</xsl:if>
</xsl:attribute>
</imageprops>
Пример записывает в результирующий XML иконку свойств, иконку назначения прав и иконку просмотра на фронтофисе. Впоследствии этот XML будет обработан format.xsl.
Вывод названия и иконок редактирования объекта на бэкофисе в XSL-шаблоне с использованием тега <objectprops>
В отличие от предыдущего метода данный метод рекомендуется использовать в новых функциональностях бэкофиса в случае, если вывод содержимого страницы осуществляется через XSL-шаблон.
<objectprops
oID="@id"
oType="FL"
types="edit,props,access,url"
link="access"
pattern='%name% "%link%" %directedit%' />
Пример выводит название типа объекта, название объекта в кавычках со ссылкой на страницу его прав, затем иконки быстрого редактирования: Редактировать, Свойства, Доступ и Посмотреть на фронтофисе.
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
114 из 114 |
|
|
Контентные модули
Новости
Логика работы
Функциональность «Новости» перекрывается функциональностью «Контент». Поэтому, перед началом реализации, например, раздела «Новости» на сайте, нужно правильно выбрать функционал – возможно это лучше сделать через материалы.
Использовать «Новости» имеет смысл в слудующих случаях:
1.Требуется повышенная производительность
2.Разделение новостей и материалов принесет только удобство для менеджмента (меньше объектов одного типа – ими легче управлять)
3.Структура данных сообщений укладывается в новости, и расширение не предвидится
4.Новости не нужно интегрировать с другими функциональностями
5.Нет требования ограничивать права доступа к отдельным новостям, достаточно единого назначения доступа на всю ленту (раздел новостей)
6.Не нужны DirectEdit-ы у новостей на фронтофисе
7.Пользователям проще и удобнее все тексты и свойства заполнять на одной странице, перегрузка опциями затрудняет
работу
8.Текст сообщений скорее формата TXT, чем HTML.
Если большинство требований соответствует, то разумнее реализовывать функционал через «Новостях», иначе через «Контент».
Особенности реализации
1.Новость физически создается сразу при клике на «Добавление» в бэкофисе. Если это сделали случайно, или передумали, новость потом нужно удалить через «Менеджмент новостей».
2.Дата публикации изменяется каждый раз при переведении новости в «зеленое» состояние
База данных
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
115 из 115 |
|
|
|
Описания таблиц |
Рисунок 25. Диаграмма таблиц базы данных модуля «Новости» |
|
|
|
|
|
|
News – новости |
|
|
|
Поле |
Описание |
|
|
ID |
Идентификатор новости |
|
|
Title |
Заголовок новости |
|
|
Content |
Содержание новости |
|
|
EditorComment |
Комментарии редактора |
|
|
State |
Идентификатор новостного раздела |
|
|
Autor |
Идентификатор автора |
|
|
Date |
Дата |
|
|
SrcURL |
Адрес источника новости |
|
|
SrcTitle |
Заголовок ссылки на источник |
|
|
Comment |
Комментарий |
|
|
Picture |
Идентификатор большой картинки к новости |
|
|
SmallPicture |
Идентификатор маленькой картинки к новости |
|
|
Annotate |
Аннотация |
|
|
PublishDate |
Дата публикации |
|
|
Changed |
Последнее изменение |
|
|
Notes |
Список ключевых значений |
|
|
Stage |
Состояние новости |
|
|
Searched |
Доступность при поиске |
|
|
NewsLinks – Список ссылок для новости |
|
|
|
Поле |
Описание |
|
|
ID |
Идентификатор ссылки |
|
|
News |
Идентификатор новости |
|
|
Link |
URL ссылки |
|
|
Label |
Текст ссылки |
|
|
SeqNo |
Номер ссылки в блоке |
|
|
BandNews – Связь между новостными группами и новостями |
|
|
|
Поле |
Описание |
|
|
Band |
Идентификатор группы |
|
|
News |
Идентификатор новости |
|
|
|
|
|
|
|
Copyright © 2005 Individ company |
Страница |
|
|
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
116 из 116 |
LogNewsStages – Логирование действий с новостью
Поле |
Описание |
ID |
Идентификатор записи |
News |
Идентификатор новости |
Stage |
Идентификатор действия |
StageDate |
Дата |
StageTitle |
Заголовок |
Comment |
Комментарий |
Editor |
Редактор |
EditorName |
Имя редактора |
NewsBands – Таблица групп новостей |
|
Поле |
Описание |
ID |
Идентификатор группы |
Folder |
Раздел |
MaxNews |
Максимальное число новостей |
MaxDays |
Максимальное число дней |
YearTC |
Год публикации |
MonthTC |
Месяц публикации |
DayTC |
День публикации |
NewsTC |
Время публикации |
ArchPeriod |
Период архивации |
ArcPeriodDays |
Период архивации в днях |
Хранимые процедуры
Простые. Описание не требуется.
Функции:
News-Functions.asp
Примеры использования
Пример вывода ленты новостей на фронтофисе
<!--#include file="common-decoration.asp" --> <!--#include file="news-functions.asp" --> <%
dim aNewsFolderList , aNewsLenta Sub NewsIndexPrint( FolderID ) Dim i,j
aNewsFolderList=GetFolderList(FolderID,2) if IsArray(aNewsFolderList) then
for i=0 to ubound(aNewsFolderList,2) oPD.TitleBox(TXS(aNewsFolderList(0,i))) oPD.StartBox aNewsLenta=GetNewsLenta(aNewsFolderList(1,i)) if IsArray(aNewsLenta) then
For j=0 to uBound(aNewsLenta,2) %>
<IMG border=0 height=16 src="/images/icon-document.gif" width=16> <a href="news-view.asp?newsId=<%=aNewsLenta(0,j)%>
&folder=<%=aNewsFolderList(1,i)%>
&dat=<%=GetNewsBeginPeriod(aNewsLenta(3,j),aNewsLenta(4,j),aNewsLenta(5,j))%>">
<%=aNewsLenta(1,j)%></a>,
<font size="2">[<%=left(aNewsLenta(3,j),10)%>]</font> <div class="description">
<%=aNewsLenta(2,j)%>
</div><br>
<%next end if%> <p>
<IMG border=0 height=11 src="/images/bullet-logo-r.gif" width=12>
<A href="news-list.asp?folder=<%=aNewsFolderList(1,i)%>">Все новости</a><br>
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
117 из 117 |
|
|
<IMG border=0 height=11 src="/images/bullet-logo-r.gif" width=12>
<A href="news-archive.asp?folder=<%=aNewsFolderList(1,i)%>">Архив</a> </p>
<%oPD.EndBox%>
<br>
<% next end if %>
<IMG border=0 height=11 src="/images/bullet-logo-r.gif" width=12>
<A href="news-archive.asp?folder=<%=folderId%>">Архив всех новостей</a> <%End Sub%>
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
118 из 118 |
|
|
Контент
Модуль «Контент» предназначен для работы с информационным наполением сайтов. Т.е. для добавления, изменения свойств, публикации текстовых материалов в разделы сайтов, работающих под управлением одной копии системы.
Логика работы
Основные процедуры
1.Материалы, размещенные на сайте, вносятся в таблицы БД с помощью Визуального редактора.
2.Один материал может содержать несколько страниц. Новую страницу для материала можно создать в любой момент, пустую или на основе шаблона.
3.Существует механизм поддержки версий для страницы.
4.Материал может быть опубликован в нескольких разделах, и, соответственно, на нескольких сайтах, работающих под управлением одной копии системы.
5.В процессе публикации материал проходит через несколько стадий:
5.1.«Красная» - материал не опубликован, находится в процессе написания
5.2.«Желтая» - материал отдан на проверку
5.3.«Синяя» - материал отдан на доработку
5.4.«Зеленая» - создание материала завершено, материал опубликован (Материал отображается на фронтофисе только если он находится в «зеленой» стадии)
6.Для того, чтобы пользователь мог корректно работать с материалами, он должен быть включен в группу «Авторы»
7.Любой материал может быть связан с дополнительными объектами:
7.1.Большая и маленькая сопровождающие картинки.
7.2.Прикрепленные документы (файлы)
7.3.Список тем в форуме. При отображении материала на фронтофисе этот список будет отображаться в виде ссылок.
7.4.Список близких материалов. При отображении материала на фронтофисе этот список будет отображаться в виде ссылок.
7.5.Список ссылок на материалы других сайтов.
7.6.Тема в форуме для обсуждения материала. Имеется возможность выбрать форум и ввести название темы. Если форум выбран, а название не введено, создается тема с таким же названием, как и название материала. При
отображении материала на фронтофисе пользователь имеет возможность написать свое сообщениев этот форум и увидеть другие сообщения.
7.7.Одна или несколько форм.
8.Можно настроить начальную и конечную даты доступности для материала. Эти даты будут проверяться при отображении материала на фронтофисе.
9.Материал может иметь ряд настраиваемых свойств и дополнительных полей.
10.Имеется возможность сформировать рейтинг для материала. Если для материала установлено соответствующее свойство, на фронтофисе отображается текущий рейтинг и, в случае, если текущий пользователь еще не оценивал, материал, форма для оценки материала
Связи
1.Разделы, в которых опубликован материал – таблица FolderArticles.
2.Формы - через таблицу ArticleForms. Многие ко многим
3.Тема форума - через поля forum_id, forum_topic_id и forum_topic_name в таблице ArticleForums. Одна тема к нескольким форумам.
4.Форма для оценки материала - поле HasRating, форма принадлежит материалу
Файлы (документы)
Маски, по которым хранятся файлы:
1.Изображения страниц хранятся по маске: /common/data/pub/images/articles/[ID материала]/[ID картинки].ext
2.Изображения из свойств материала хранятся по маске: /common/data/pub/pictures/[ID картинки].ext
3.Файлы-аттачи хранятся по маске: /common/data/pub/files/articles/[ID материала]/Filename.ext
Версионность
Версионность поддерживается на уровне содержаний страниц (таблица PageVersions). Версии могут сохраняться пользователем принудительно, а также автоматически (есть соответствующая настройка в БО). Если материал редактируется несколькими пользователями, то, при включенной опции автоматического создания версий, новые версии сохраняются при каждом сохранении материала.
Copyright © 2005 Individ company |
Страница |
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
119 из 119 |
|
|
База данных
Диаграмма таблиц
|
Описания таблиц |
Рисунок 26. Диаграмма таблиц модуля «Контент» |
|
|
|
|
|
|
Articles – хранятся материалы и их свойства |
|
|
|
Поля |
Описание |
|
|
ID |
Идентификатор |
|
|
Type |
Тип объекта «материал» |
|
|
Name |
Название материала |
|
|
Description |
Краткая сопроводительная надпись |
|
|
Created |
Дата создания материала |
|
|
Changed |
Дата последнего изменения материала |
|
|
Deleted |
Поле не используется, необходимо для соответствия таблицы объектной модели |
|
|
System |
Поле не используется, необходимо для соответствия таблицы объектной модели |
|
|
|
|
|
|
|
Copyright © 2005 Individ company |
Страница |
|
|
Контакты: www.saitistika.ru | support@saitistika.ru | (0852) 321464 |
120 из 120 |
