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

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

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

Разработка нового модуля

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

Важно!

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

Общая последовательность действий

Общая последовательность действий:

1.Спроектировать модуль

2.Создать таблицы базы данных и хранимые процедуры

3.Разработать набор классов и функций

4.Разработать интерфейс бэкофиса

5.Разработать интерфейс фронтофиса

Copyright © 2005 Individ company

Страница

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

61 из 61

 

 

Перевод фронтофиса на другие языки

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

Поскольку в разделе «Создание нового фронтофиса» уже были описаны ключевые этапы и методы по созданию и настройке исходного фронтофиса, предполагается, что к началу прочтения этой главы у вас уже есть работающий фронтофис, перевод которого Вам необходимо сделать, и мы создаем его английскую версию.

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

Создание веб-сайта в IIS

См. раздел «Создание дополнительного фронтофиса» в «Руководстве администратора»

Создание темы с шаблонами

1.Создать новую тему как дочернюю к оригинальной

2.Сгенерировать файлы новой темы

Создание фронтофиса в Saitistika

1.Создать новый сервер, изменить его настройки (см. «Руководство пользователя»). Указать тему, созданую на

предыдущем этапе

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

2.1.Являющихся «разделам по умолчанию» для своего «типа раздела»

2.2.К которым жестко привязана какая-то логика в шаблонах

Настройки нетекстовые полей свойств разделов должны совпдать с настройками оригинальных разделов с точностью до их привязки в карте нового сайта

3.В свойствах сервера назначить экземпляры служебных разделы по умолчанию для всех типов разделов

4.Создать дубликаты служебных материалов. К ним относятся:

4.1.Индексные материалы разделов

4.2.Материалы раздела «Ошибки»

5.В свойствах разделов переназначить набор индексных материалов

После выполнения этого этапа сайт будет доступен для просмотра во фронтофисе. На некоторых страницах возможна некорретная или ошибочная работа функционала, связанного с жесткой привязкой шаблонов к номерам объектов.

Модификация шаблонов

1.В случае, если в шаблонах используется жесткая привязка в номерам объектов (разделам, материалам), то в теме

изменить номера этих объектов

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

2.1.Создать специальное служебное поле «Разделитель»

2.2.В шаблонах оригинального веб-сайта сделать обработку только полей только ДО поля «Разделитель» + системных полей (они обозначены системными мнемониками в конструкторе регистрационной формы)

2.3.В шаблонах фронтофиса-дубликата сделать обраотку только полей ПОСЛЕ поля «разделитель» + системных полей. Названия системным полям нужно переопределить прямо в шаблоне или в messages.xml

Привязку к полю «Разделитель» нужно сделать по ID. В случае нескольких фронтофисов, можно создать несколько полей «Разделитель».

3.Перевести или изменить сообщения фронтофиса в файле messages.xml дубликата темы

4.Перевести (или сделать разводку по языкам с изменением шаблонов страниц ошибок в обоих темах) \common\include\error-processing.asp

5.В случае если набор или имена файлов директории /images/ были изменены, доработать шаблоны согласно этим

изменениям

Рекомендуется проверить работоспособность веб-сайта по разделу «Как быстро проверить работоспособность системы» в «Руководстве администратора». В случае, если ошибок не возникает, должен получиться фронтофис, который содержит

Copyright © 2005 Individ company

Страница

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

62 из 62

 

 

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

Наполнение контентом

1.Внести изменения в изображения, хранящиеся в директории /images/ фронтофиса. Рекомендуется не изменять имена и

размеры в пикселах этих изображений

2.Создать полный набор всех разделов фронтофиса. При этом жесткого требования соблюдения парности разделов оригинального и дублирующего раздела - нет, структуры должны быть просто «в целом похожи».

3.Создать дубликаты материалов, распложив их в структуре. Нетекстовые свойства материалов должны совпадать с

оригиналами с точностью до их привязки к другим разделам

4.Создать дубликаты баннеров в тех же профилях, что и их оригиналы

5.Расставить права все объекты

В случае если создавались полные дубликаты всех разделов, материалов и других объектов, то в результате должна получиться точная копия веб-сайта с другим контентом.

Copyright © 2005 Individ company

Страница

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

63 из 63

 

 

Подсистемы

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

Ключевые сущности

Рисунок 11. UML-диаграмма ключевых сущностей подсистемы «Управление структурой»

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

Сервер представляет собой дерево разделов и материалов. Каждый раздел характеризуется типом. Сам сервер является разделом нулевого типа. Подразделы содержатся только в разделах нулевого типа. Разделы нулевого типа дополнительно характеризуются подтипом или его отсутствием. Если подтип отсутствует, то это стандартный раздел сервера нулевого типа. Если подтип присутствует, то у раздела меняется имя главного файла и название типа для пользователя. Такой раздел называется «custom-раздел».

Физически типы разделов хранятся так:

Все системные, жесткие типы зашиты в таблице FolderTypes. Все custom типы находятся в таблице FoldersTypes. В таблице Folders таким образом за тип раздела отвечают два поля – Type (ссылка на FolderTypes) и SubType (ссылка на FoldersTypes). Тип раздела (таблица Folders) определяется так:

1.Если поле Type <> 0, то тип определяется полем Type

2.Если поле Type = 0, то:

2.1.Если поле SubType Is Null, то тип определяется полем Type

2.2.Если поле SubType Is Not Null, то тип определяется полем SubType

Права на создание/редактирование и т.д. custom-разделов имеют те же, кто имеет соответствующие права для разделов нулевого типа.

Copyright © 2005 Individ company

Страница

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

64 из 64

 

 

Архив

В системе существует специальный раздел типа «Каталог сервера» предназначенный для хранения архива материалов (аналог «Корзины» Windows). При удалении материалы физически не удаляются из базы а перемещаются в этот раздел. Архив является служебным разделом, поэтому он не должен быть виден в навигации, поиске и т.д. Больше всего архив похож на корневой раздел сервера, при этом он не должен принадлежать ни одному серверу. Таким образом, поле Server у архива должно быть 0, поле Super – NULL, поле Ord настроено так, чтобы раздел находился на одном уровне с корневыми разделами серверов. У раздела должна стоять пометка «спрятать». Информация о том, какой из разделов является архивом хранится в поле ArchiveFolderID таблицы SystemSettings.

Для создания архива (если его по каким-то причинам нет) нужно завести запись в таблице Folders, записать ID этого нового раздела в поле ArchiveFolderID таблицы SystemSettings и добавить запись о правах на новый раздел в таблицу

UsersObjRights.

При создании нового сервера автоматически создается несколько служебных разделов по умолчанию. Сколько и какие разделы будут созданы определяется записями со значением NULL в поле Value. Такие записи являются шаблонами. Чтобы создать новый служебный раздел, нужно добавить запись в таблицу SystemFolders. Назначать страницы служебных разделов (т.е. изменять значения Value) можно из бэкофиса системы, со страницы свойств сервера.

Встроенные типы разделов создаются и редактируются напрямую в базе данных. Их нельзя изменить или удалить из интерфейса управления.

Типы ресурсов

В таблицах FolderTypes и FoldersTypes есть поле ResourceType – тип ресурса. Если это поле равно 0, то тип ресурса это обычный раздел структуры. Если поле не равно нулю, то это идентификатор записи из таблицы DirectoriesResourceTypes (запись с ID = 0 также присутствует в таблице для поддержания ссылочной целостности).

Как добавить новый системный тип раздела

При создании нового раздела в бэкофисе системы вызывается хранимая процедура NewFolder, которая и создает раздел. Поэтому, при добавлении новых системных (встроенных) типов разделов необходимо доработать эту процедуру, то есть добавить туда возможность создания разделов нового типа. Для этого нужно добавить в процедуру NewFolder обработчик для нового типа раздела.

...

ELSE IF @Type = <номер системного типа раздела> BEGIN

EXECUTE @Can = CheckRightServer @UserID, '<название права>', @Site IF @Can = 1

BEGIN

INSERT INTO Folders

(Super, Title, Description, Path, Server, Type, Theme) VALUES

(@Super, @Title, @Desc, @Path, @Site, @Type, @Theme) IF @@ROWCOUNT > 0

SET @Folder = @@IDENTITY

ELSE

SET @Folder = NULL

-- Дальше идет код, добавляющий запись в таблицу(ы), хранящую данные этого типа раздела. INSERT INTO <название таблицы>

(Folder), ...

VALUES

(@Folder), ...

END

END

...

Точно так же, как и при создании раздела, процедура удаления DeleteFolder должна содержать код, нужный для корректного удаления раздела нового системного типа.

База данных

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

Copyright © 2005 Individ company

Страница

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

65 из 65

 

 

 

Рисунок 12. Диаграмма таблиц базы данных подсистемы «Управление структурой»

 

 

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

 

 

 

Sites – сайты системы

 

 

 

Поля

 

Описание

 

 

ID

 

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

 

 

VirtPath

 

URL сайта.

 

 

RootFolder

 

ID основного раздела сайта (из таблицы Folders).

 

 

PhysPath

 

Путь на диске до корневой папки сайта.

 

 

Changed

 

Дата и время создания сайта в бэкофисе.

 

 

ArticleNewDays

 

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

 

 

FolderNewDays

 

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

 

 

MakeNew

 

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

 

 

MakePopular

 

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

 

 

HTML Title

 

HTML-заголовок для документов в визуальном редакторе.

 

 

Folders - разделы системы

 

 

 

Поля

 

Описание

 

 

ID

 

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

 

 

Path

 

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

 

 

Type

 

Тип раздела.

 

 

Server

 

Сервер, которому принадлежит раздел.

 

 

Super

 

Идентификатор родительского раздела.

 

 

Counter

 

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

 

 

TotalCounter

 

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

 

 

TemplateChanged

 

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

 

 

ArtTemplChanged

 

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

 

 

SeqNo

 

Устарело.

 

 

MaxMats

 

Максимальное количество материалов в списке.

 

 

MaxDays

 

Максимальный срок (в днях) в течение которого материалы, опубликованные в разделе,

 

 

 

считаются новыми.

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

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

66 из 66

 

Notes

Пометки раздела (.chosen.hide.archive.). Названия пометок хранятся в таблице FolderNotes.

 

Picture

Большая картинка раздела.

 

 

Theme

Идентификатор темы, назначенной разделу.

 

 

IsThemeInherited

Признак того, что нужно изменять тему при изменении ее у одного из родителей раздела.

 

SubType

Подтип раздела (для разделов типа 0)

 

 

Ord

Расположение раздела в иерархии разделов.

 

 

SystemFolders – служебные разделы по умолчанию

 

 

Поля

Описание

 

 

ID

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

 

 

Server

ID сервера, для которого указан раздел.

 

 

Sysname

Специальная строка-идентификатор типа служебного раздела. Испульзуется при доступе к

 

 

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

 

 

Value

ID служебного раздела.

 

 

Label

Название типа служебного раздела, видимое пользователю бэкофиса.

 

 

FolderTypes – встроенные (системные) типы разделов

 

 

Поля

Описание

 

 

ID

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

 

 

Label

Название типа раздела.

 

 

Rght

Название права, нужного для управления разделом соответствующего типа.

 

 

SeqNo

Номер типа раздела п.п.

 

 

Description

Описание раздела.

 

 

FileName

Имя главного файла раздела.

 

 

ResourceType

Тип ресурса

 

 

FoldersTypes – типы разделов, определяемые пользователем

 

 

Поля

Описание

 

 

Label

Название типа раздела.

 

 

FileName

Имя главного файла раздела.

 

 

Description

Описание раздела.

 

 

IsEditable

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

 

 

SeqNo

Номер типа раздела п.п.

 

 

ID

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

 

 

ResourceType

Тип ресурса

 

 

DirectoriesResourceTypes – типы ресурсов (разделы, шаблоны БС и т.п.)

 

 

Поля

Описание

 

 

ID

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

 

 

Name

Название типа ресурса

 

 

Type

Код типа ресурса

 

 

FoldersAddFields – дополнительные поля для разделов

 

 

Поля

Описание

 

 

folder

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

 

 

int1

Дополнительное поле типа Int

 

 

sstring1

Дополнительное поле типа SString

 

 

lstring1

Дополнительное поле типа LString

 

 

text1

Дополнительное поле типа Text

 

 

date1

Дополнительное поле типа Datetime

 

 

pic1

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

 

 

pic2

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

 

 

pic3

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

 

 

urlredir

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

 

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

 

 

 

DeleteFolder

 

 

 

GetFolderInfo

 

 

 

GetSubFolders

 

 

 

NewFolder

 

 

 

Sait_Articles_GetMaterial

 

 

 

Sait_GetSubFolders

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

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

67 из 67

Классы

UML-диаграмма

Рисунок 13. UML-диаграмма классов подсистемы «Управление структурой»

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

CArticle CFolderInfo CMaterial

Copyright © 2005 Individ company

Страница

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

68 из 68

 

 

CMaterials

CSubFolders

XSL-шаблоны

Имя файла

Описание

directories-tree.xsl

Вывод дерева разделов в бэкофисе

directories-transfer.xsl

Вывод страницы перемещения разделов и материалов

list.xsl

Вывод страниц структуры в бэкофисе

properties-0.xsl, properties-

Вывод страниц свойств разделов типов 0 и 27

27.asl

 

theme-tree.xsl

Вывод дерева тем для свойств раздела в бэкофисе

Copyright © 2005 Individ company

Страница

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

69 из 69

 

 

Подсистема управления шаблонами

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

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

Идеология

1.Каждый раздел фронтофиса (сам сервер фронтофиса также считается за раздел) может обрабатываться своей собственной темой (свои файлы фронтофиса).

2.Одна и та же тема может быть использована для нескольких серверов.

3.Темы могут быть взаимосвязанными и невзаимосвязанными. Взаимосвязанными являются «дочерние» и «родительские» темы. Дочерние темы являются переопределенными копиями каких-то других тем своих родителей. Дочерние темы наследуют шаблоны родительской темы, причем можно часть из них удалить или переопределить, а также создать новые шаблоны и скрипты. Если дочерняя тема наследует файлы родительской темы, и внутри себя их не переопределяет, то при изменении файлов у родительской темы, файлы у дочерней автоматически обновляются.

4.Файлами темы могут быть любые файлы, корректно обрабатывающимися IIS (ASP, HTM/HTML, XSL и др.).

5.Содержимое файлов тем храниться в Базе Данных, но они генерируются на веб-сайт, и физически существуют там (в отличие от разделов в структуре сервера).

6.Шаблоны внутри темы могут иметь три статуса:

6.1.1 - шаблон определен у родительской темы (или ее родителей), и в этой теме не определялся.

6.2.2 - шаблон существует у родительской темы, но внутри этой темы был переопределен.

6.3.3 - шаблон создан специально для этой темы.

Соответственно, для корневых тем все шаблоны имеют статус «3», для некорнеавых тем большинство шаблонов имеют статус «1»

7.Чтобы файлы темы оказались в БД нужно провести их экспорт.

8.Чтобы содержимое темы из БД оказалось на диске нужно провести генерацию темы.

9.При генерации или изменнении файлов темы обновляются соответствующие поля с датами. Затем они используются при определении, какие именно файлы генерировать/импортировать в зависимости от выбранного способа генерации/импорта.

Практические советы

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

2.На практике обычно создается по одной теме на сервер.

3.Наследование тем не используется.

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

Безопасность

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

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

«common\data\PreviewThemes\», рабочие темы в «common\data\themes\».

База данных

Copyright © 2005 Individ company

Страница

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

70 из 70