Saitistika 4.0.Руководство разработчика.2005
.pdfРазработка нового модуля
Новый модуль рекомендуется создавать только в случае, если требуемая бизнес-логика и данные не соответствуют ни одному из существующих модулей.
Важно!
В случае если есть модуль, в который бизнес-логика и данные в целом укладываются, но требуется произвести некоторую модификацию (это наиболее распространенный случай), то рекомендуется сравнить стоимость создания нового модуля и изменения существующего. В случае если стоимость создания нового модуля в 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 |
|
|