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

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

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

Рисунок 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