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

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

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

1.ID – код голосования.

Примечание:

При написании скриптов бэкофиса рекомендуется использовать ASP. В настоящее время MAE признаны устаревшими, и развитию не подлежат.

Copyright © 2005 Individ company

Страница

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

31 из 30

 

 

Фронтофис

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

Общие принципы

Как работает фронтофис

Работа системы сводится к обработке запросов к страницам. Веб-сервер (IIS) получает запрос по протоколу HTTP на получение файла определенного типа. Действия сервера зависят от типа запрашиваемого файла:

Рисунок 9. Логика обработки запросов для фронтофиса

Логика обработки для разных типов данных

Тип файла

 

.asp

1.

IIS исполняет скрипт.

 

 

 

 

2.

Скрипт взаимодействует с БД (помещает/извлекает информацию, запускает хранимые

 

 

 

 

процедуры и т.д.). В результате работы скрипта может быть сформирован либо HTML-

 

 

 

 

документ (Вариант1 на диаграмме), либо XML-документ (Вариант 2 на диаграмме).

 

 

 

 

HTML-документ отдается клиентскому браузеру. XML-документ подвергается

 

 

 

 

трансформации с помощью XSL-шаблона. В результате получается HTML-документ,

 

 

 

 

 

 

 

 

 

 

Copyright © 2005 Individ company

Страница

 

 

 

 

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

32 из 32

 

 

 

который отдается клиентскому браузеру.

.gif, .jpg

1.

Если запрашиваемое изображение хранится в БД, то для его получения веб-сервер

 

 

запускает ISAPI-расширение FOImage.dll. Эта библиотека подключается к БД, достает

 

 

оттуда нужный файл и отправляет его клиенту

 

2.

Если картинка является физическим файлом, то она просто выдается средствами IIS.

все типы файлов из

1.

IIS исполняет ISAPI-расширение FileAccess.dll.

/files/ и

2.

Расширение FileAccess.dll производит запрос информации о файле из базы данных

/common/data/pub/files/

3.

Если информация о файле есть в базе данных, то FileAccess.dll использует ее для

 

 

определения доступности файла текущему пользователю Сайтистики, а также

 

 

возвращает пользователю указанный в базе данных тип содержимого. Если информации

 

 

о файле в базе данных нет, то доступность файла пользователю определяется только

 

 

файловой системой.

 

4.

Если файл физически существует и доступен по своим свойствам из базы данных, то

 

 

FileAccess.dll передает клиенту необходимые заголовки и содержимое файла, иначе

 

 

производится редирект на страницу соответствующей ошибки.

Copyright © 2005 Individ company

Страница

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

33 из 32

 

 

Структура HTML

Этот раздел описывает файлы, содержащие код, характерный для типовых страниц фронтофиса. Как правило, любая страница состоит из нескольких общих инклюдов, содержащих элементы оформления и описания классов, используемых для работы с материалами. Таким образом, появляется возможность использовать одни и те же блоки кода на разных страницах сайта.

 

 

 

 

 

/common/include/fo-init.asp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPageDecoration.asp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

init.asp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[Вывод верхней части типовой страницы

 

 

 

 

 

 

Использует методы класса CPageDecoration]

 

 

Типовая страница

 

 

 

oPage.Top

 

 

 

 

 

oPage.StartPage

 

 

фронтофиса

 

 

 

oPage.LeftNavigation

 

 

 

 

 

 

oPage.PassPageColumn

 

 

 

 

 

 

oPage.StatusBar

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[ Содержимое страницы ]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[Вывод нижней части типовой страницы

 

 

 

 

 

 

Использует методы класса CPageDecoration]

 

 

 

 

 

 

oPage.EndPage

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

oPage.Bottom

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 10. Структура типовой страницы фронтофиса.

 

 

 

 

 

 

 

Файл

Описание

/common/include/fo-init.asp

Файл инициализации фронтофиса. Любая страница начинается с его

 

 

подключения.

CPageDecoration.asp

Класс CPageDecoration. Оформление общих элементов страниц.

init.asp

Инициализация объектов, персональных настроек пользователя

В зависимости от содержания типовая страница может использовать ссылки на другие файлы, содержащие описания классов и процедуры инициализации, например:

CMaterialDecoration.asp

CChatDecoration.asp

/common/include/CChat.asp

/common/include/CForum.asp

CForumDecoration.asp

/common/include/CMetaDataForm.asp

/common/include/CMetaDataField.asp

CFormDecoration.asp

CForm.asp

Copyright © 2005 Individ company

Страница

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

34 из 34

 

 

CTest.asp

Пример использования

Следующий пример создает страницу фронтофиса с пустой серединой и типовым оформлением верхней и нижней части.

<!--#include virtual="/common/include/fo-init.asp" --> <!--#include file="CPageDecoration.asp" --> <!--#include file="init.asp"-->

<%

oPage.Top

oPage.StartPage

oPage.LeftNavigation

oPage.PassPageColumn

oPage.StatusBar

<!—- Здесь выводится текст страницы -->

oPage.EndPage

oPage.Bottom

%>

Нарезка

Нарезка производится на основе сверстанного в статический HTML каркаса веб-сайта (2-3 самых типовых страниц).

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

Этапы работы кодера:

1.Верстка каркаса

2.Разбиение каркаса на методы CPageDecoration

3.Создание типовых страниц путем копирования спрограммированных страниц и подстановкой нужных значений

4.Доработки по верстке на 80% сведены в один файл

Этапы работы программиста:

1.Перенос CPageDecoration путем копирования

2.Доработки CPageDecoration завязанные на сайтистику

3.Перенос спрограммированной страницы путем копирования

4.Добавление на страницу логики отображения

5.При изменении верстки нужно перенести изменившиеся методы в CPageDecoration

При нарезке скетча девелопмента разработаны основные принципы построения класса:

1.В CPageDecoration вносятся те элементы оформления, которые присутствуют на 2-х или более страницах, причем класс должен содержать только оформление.

2.Разумное «обрамление контента», т.е. небольшие строки контента передаются в параметрах к функции; большие куски контента обрамляются функциями типа StartContent-EndContent

3.Разумные названия функций/методов, «xml-ность» методов (т.е. для каждого StartBody должен быть EndBody), однако для удобства можно создавать «сборные» методы, которые вызывают подряд идущие xml-ные методы

Важно

1.Не допускать расширения количества аргументов у методов/функций при программировании проекта. Это влечет за собой несоответствие скетчу. Для этого кодеру нужно:

1.1.Знать какими классами выводится тот или иной блок

1.2.Заранее учитывать возможность добавления аргументов (например для иконок директедита, которые не выводятся в скетче)

1.3.Можно добавить резевные аргументы

1.4.Можно передавать аргументы массивом

2.Учесть влияние пользовательских настроек на этапе нарезки

Базовые методы:

1.Top, Bottom – если много кода выносятся в отдельные файлы, которые инклюдятся в соответствующих методах

CPageDecoration.

2.Ключевые участки кода – StartPage, EndPage, StartLeftColumn, …

3.Построение списков – StartList, EndList, ListItem ...

4.Методы, вызывающие другие классы: ShowNavigaton, Paging, ...

Copyright © 2005 Individ company

Страница

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

35 из 35

 

 

5.Статические (голый HTML)

Copyright © 2005 Individ company

Страница

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

36 из 36

 

 

Структура CSS

Для того, чтобы HTML страница выглядела примерно одинаково в разных броузерах, приходится создавать два (иногда более) варианта стилей для «Internet Explorer» и «Все остальные». По умолчанию они называются ie.css и nn.css. Когда пользователь заходит на страницу, сервер определяет его броузер и соответственно подгружает в ASP-скрипт нужный файл со стилями.

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

Правила именования классов.

Классы группируются по их предназначению. Стандартный набор групп и их назначение перечислены в таблице:

Название

Назначение

Правила наименования классов

Пример

группы

 

 

 

Standard

Переопределение стандартных

Стандартный тег

BODY {font-family:Verdana;}

 

тегов, применяемых ко всему сайту

 

 

 

в общем случае.

 

 

Navigations

Форматирование блоков навигации

НазваниеФункциональности-

.nav1 { font-size: 11px;color:

 

сайта

Номер

#000000} /* Top nav */

Forms

Классы, связанные с элементами

НазваниеФункциональности-

.form1 { padding-top: 0px;padding-

 

форм

Номер

bottom: 0px;font-family:

 

 

 

tahoma;font-size: 11px;color:

 

 

 

#000000;}

Contents

Список классов, отвечающих за

НазваниеФункциональности-

.content2 { vertical-align:

 

переопределение элементов

Номер

top;padding-top: 1px;}

 

контента

 

 

Messages

Классы, связанные с выводом

НазваниеФункциональности-

.message1 {font-size: 11px;

 

сообщений

Номер

font-weight: bold;}

Tables

Форматирование таблиц контента

НазваниеФункциональности-

.table1 {background-color:

 

 

Номер

#D8D8D8}

Print

Классы, связанные со страницами

НазваниеФункциональности-

.print { color : Black;}

 

«Версия для печати»

Номер

 

Custom

Специфические классы, имеющие

Определяется индивидуально

.layer1 {font-family: tahoma;font-

 

отношение к нестандартным

 

size: 10px;}

 

элементам конкретного сайта

 

 

В визуальном редакторе классы оформления таблиц, необходимо прописывать(в коде) для всех редактируемых таблиц, иначе таблицы не будут соответствовать дизайну сайта. Пример:

<TABLE cellspadding=”0” cellspacing=”0” border=”0” width=”100%” class=”table1”> <TR>

<TD class=”Content5”>Заголовок столбца</TD> <TD class=”Content5”>Заголовок столбца</TD> <TD class=”Content5”>Заголовок столбца</TD> </TR>

<TR>

<TD class=”Content5”>ячейка</TD> <TD class=”Content5”>ячейка</TD> <TD class=”Content5”>ячейка</TD> </TR>

<TR>

<TD class=”Content5”>ячейка</TD> <TD class=”Content5”>ячейка</TD> <TD class=”Content5”>ячейка</TD> </TR>

CSS2

Рекомендуемая спецификация – CSS1. Применять CSS2 рекомендуется только в классах ie.css, чтобы, например, чтобы не писать лишний раз class=table-cell:

Copyright © 2005 Individ company

Страница

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

37 из 37

 

 

table.table1 * td { font-size: 13px;}

tr.content5 td { font-weight: bold; font-size: 11px; font-family: tahoma; margin-left: 3px; vertical-algn: middle;}

В этом случае предыдущий код будет выглядеть так:

<TABLE cellspadding=”0” cellspacing=”0” border=”0” width=”100%” class=”table1”> <TR class=”content5”>

<TD>Заголовок столбца</TD> <TD>Заголовок столбца</TD> <TD>Заголовок столбца</TD> </TR>

<TR> <TD>ячейка</TD> <TD>ячейка</TD> <TD>ячейка</TD> </TR>

<TR> <TD>ячейка</TD> <TD>ячейка</TD> <TD>ячейка</TD> </TR>

Поскольку в устаревших броузерах (например, Netscape Navigator 4) нет поддержки CSS2, то необходимо искать комромисс между удобством CCS2 и отображением.

Подключение таблицы стилей и разводка по браузерам

Для разводки по броузерам используются переменные, определяемые и инициализируемые в файле browserdetector.asp. Этот файл подключается автоматически к каждой страницей вызовом fo-init.asp. Все переменные имеют значение true/false.

Переменные представлены в следующей таблице:

Переменная

Значение

IE4, IE5, IE6

True, если броузер пользователя – Internet Explorer версий соответственно 4, 5, 6

NN3, NN4, NN6

True, если броузер пользователя – Netscape Navigator версий соответственно 3, 4, 6. Следует

 

отметить, что Netscape Navigator 7 определяется в этом файле как Netscape Navigator 6.

Opera6, Opera7

True, если броузер пользователя – Opera версий соответственно 6, 7

NN4minus

True, если броузер пользователя это Netscape Navigator версии не более 4

NN4plus

True, если броузер пользователя это Netscape Navigator версии 4 или более поздней

IE4plus

True, если броузер пользователя это Internet Explorer версии 4 или более поздней

IENNDefault

True, если броузер пользователя это Internet Explorer версии не менее 4 или Netscape Navigator

 

версии не менее 6

MAC

True, если платформа пользователя – Macintosh

Наиболее часто для разводки по броузерам используются взаимно противоположные на множестве поддерживаемых броузеров переменные NN4minus и IENNDefault, так как по функциональности броузеры IE4+ и NN6+ очень похожи, отличается от них лишь NN4.

Пример

Для подключения .css в зависимости от броузера также используются переменные разводки по броузерам. Обычно подключение .css внутри темы выглядит так:

If NN4minus Then %>

<link rel="stylesheet" type="text/css" href="/themes/<%=SystemInfo.SiteRootFolderThemeName%>/nn.css"> <%Else%>

<link rel="stylesheet" type="text/css" href="/themes/<%=SystemInfo.SiteRootFolderThemeName%>/ie.css"> <%End If

Copyright © 2005 Individ company

Страница

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

38 из 38

 

 

Навигация

Начиная с версии 4.0, за вывод всех основных навигаций отвечает специальный класс CNavigator. Этот класс позволяет гибко настраивать выборку данных под конкретные навигации. Например, если нужно вывести верхнее меню и левую навигацию, то, указав соответствующие параметры, в экземпляр класса Navigator выберутся данные, соответствующие только этим навигациям. Таким образом, получается выигрыш в производительности за счет 2-х составляющих:

1.Выборка данных не содержит лишней информации

2.При выборке нескольких навигаций пересекающиеся данные выбираются только один раз

Если необходимо вывести навигацию, которая работает по особой логике, то для этого необходимо:

1.Добавить соответствущую логику выборки в хранимую процедуру Sait_GetNavigation

2.Добавить спецефичные параметры в процедуру

3.Дополнить класс CNavigator новыми свойствами

4.Создать xsl-шаблон для навигации (см. примеры navigation-leftmenu.xsl или navigation-topmenu.xsl)

5.Применить (вызвать) созданный шаблон внутри темы

Для создания навигаций, не требующих дополнительных данных по отношению к тем, которые возвращает текущая версия процедуры Sait_GetNavigation (например, набор разделов, отфильтрованных по добавленному атрибуту), первые 3 действия делать не нужно.

Посмотреть объем возвращаемых процедурой данной, можно вставив, например, в content.asp инструкцию

%><%=Navigator.Debug%><%

Либо можно использовать уже готовые процедуры, для выполнения которых использовать методы типа GetRS класса CNavigator. Также существует способ добавления данных «руками». Для этого используется метод AddLink, который создает новый рекордсет, и хранит в нем добавленные ссылки.

Подробное описание класса смотрите в справочнике классов.

По умолчанию в класс CNavigator встроены следующие виды навигации:

1.Верхняя список разделов первого уровня, обозначенных пометкой «Верхняя навигация - является корневым разделом»

2.Нижняя - список разделов обозначенных соответствующей пометкой «Нижняя навигация - включен в навигацию»

3.Левая дерево подразделов текущего раздела 1-го уровня

4.Карта сайта дерево всех разделов системы

Для вывода навигаций рекомендуется использовать xsl-шаблоны, поскольку данные, полученные Navigator-ом из процедур сохраняются в экземпляре CXMLDOM. Однако существует и специальное API для работы с данными Навигатора из ASP- кода.

Верхняя навигация

В навигацию входят разделы 1-го уровня текущего сервера, имеющие пометку topnavnote. Процедура выбирает эти разделы, а также их подразделы (для построения выпадающих блоков). Эти данные в классе CNavigator хранятся с другими в одном рекордсете. Поэтому для точной выборки в XML передается мнемоника пометки для отбора нужных разделов при выводе навигации. За вывод верхней навигации отвечает шаблон navigation-topmenu.xsl

Нижняя навигация

В навигацию входят разделы любого уровня, обозначенные пометкой nav3root. Из-за простоты она выводится не через xsl- шаблон, а через API, предоставляемое классом CNavigator.

Левая навигация

Навигация выводит дерево подразделов, текущего раздела 1-го уровня. Разделы, отмеченные пометкой «Левая навигация - не показывается» не выводятся. На всех страницах, кроме электронного магазина, Проектов и Задач, навигация выводится с помощью xsl-шаблона navigation-leftmenu.xsl. На страницах перечисленных функциональностей левая навигация выводится через собственные xsl-шаблоны, используя другие процедуры для получения данных.

Навигация «карта сайта»

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

Пример использования

Вывод верхнего меню, используя xsl-шаблон navigation-topmenu.xsl текущей темы

Copyright © 2005 Individ company

Страница

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

39 из 39

 

 

<%=Navigator.Output("/themes/"&TRim(FolderInfo.ThemeName)&"/navigation-topmenu.xsl")%>

Вывод буклета через xsl-шаблон booklet.xsl

<%Navigator.Map = True

Navigator.SetParam "printable", " " & Join(PrintableFiles," ") & " "%> <%=Navigator.Output("booklet.xsl")%>

Процедура создания навигации подробно описана в подразделе «Создание шаблонов» раздела «Быстрое освоение системы»

Copyright © 2005 Individ company

Страница

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

40 из 40