Вы находитесь на странице: 1из 57

Руководство пользователя

CMS SAPID v.1.2.3

5 июля 2005 г.

Текущая версия:
http://sourceforge.net/project/showfiles.php?group_id=118100&package_id=132259
(доступно в PDF)

Авторы:
Максим Барышников, Red Graphic Systems (mb@redgraphic.com)
Дмитрий Шейко, Red Graphic Systems (d@redgraphic.com)

Спонсором проекта является компания Red Graphic Systems


www.redgraphic.com

Страница 1 из 57 SAPID CMS (sapid.sourgeforce.net)


Оглавление

1 Вступление..................................................................................................................3
2 Возможности ..............................................................................................................3
3 Организация SAPID ...................................................................................................7
4 Назначение .................................................................................................................7
5 Устойчивость к нагрузкам.........................................................................................7
6 Системные требования ............................................................................................8
7 Инсталляция................................................................................................................8
7.1 Возможные проблемы при инсталяции SAPID....................................................................9
7.1.1 Режим MODREWRITE.....................................................................................................9
7.1.2 Режим Multiviews...........................................................................................................10
7.1.3 Режим Disabled..............................................................................................................10
8 Интерфейс администрирования............................................................................11
8.1 Многоуровневое администрирование в SAPID..................................................................11
9 Управление сайтом..................................................................................................12
9.1 Что такое сайт и что такое CMS..........................................................................................12
9.2 Управление содержанием...................................................................................................13
9.2.1 Как управлять новостями на сайте..........................................................................14
9.3 Команды WYSIWYG-редактора...........................................................................................14
9.3.1 Функции дополнительной панели...............................................................................15
9.3.2 Интерфейс добавления изображений........................................................................16
9.3.3 Создание галерей.........................................................................................................16
9.3.4 Общие возможности визуального редактора...........................................................18
9.3.5 Использование форматирования при редактировании содержания......................18
9.3.6 Перемещение по текстовому полю...........................................................................18
10 Создание сайта.......................................................................................................18
10.1 Разработка концепции сайта.............................................................................................18
10.1.1 Структура документа..............................................................................................19
10.1.2 Структура сайта......................................................................................................19
10.2 Создание шаблонов...........................................................................................................19
10.2.1 Синтаксис указателей объектов XML Sapiens в шаблонах документов............20
10.2.2 Включения кода системного языка CMS.................................................................21
10.3 Создание структуры...........................................................................................................22
10.4 Управления пользователями............................................................................................23
10.5 Моделирование интерфейсов...........................................................................................24
10.5.1 Создание веб-сервиса ...............................................................................................24
10.5.2 Создание модуля (DDC).............................................................................................24
10.5.3 Модули (DDC) дистрибутивного пакета................................................................26
10.5.4 Универсальный DDC инфоканала.............................................................................30
10.5.5 Создание CMS-приложения ......................................................................................30
10.5.6 Список CMS–приложений дистрибутивного пакета............................................30
10.5.7 Структура хранилища данных.................................................................................34
10.5.8 Передача инструкций CMS.......................................................................................35
10.5.9 Режим трассировки ...................................................................................................37
11 Объекты XML Sapiens............................................................................................38
11.1 Контейнеры запросов (QC)................................................................................................38
11.2 Контейнеры статических данных (SDC)...........................................................................39
11.3 Контейнеры динамических данных (DDC)........................................................................40
11.4 Выражения XML Sapiens...................................................................................................41

Страница 2 из 57 SAPID CMS (sapid.sourgeforce.net)


11.5 Список выражений XML Sapiens.......................................................................................42
11.6 Указатели XML Sapiens.....................................................................................................42
11.7 Параметры вызова DDC ...................................................................................................43
11.8 Перенаправление потока DDC..........................................................................................43
12 Руководство разработчика SAPID.......................................................................43
12.1 Программная модель.........................................................................................................43
12.2 Среда окружения................................................................................................................44
12.2.1 Глобальные переменные............................................................................................44
12.2.2 Переменные окружения..............................................................................................44
12.3 Структура сайта.................................................................................................................46
12.4 Данные документа.............................................................................................................46
12.5 Размещение скриптов........................................................................................................46
12.6 Информационный канал....................................................................................................49
12.7 Функции общего назначения.............................................................................................49
13 Сообщество и поддержка......................................................................................50
13.1 Интернет-пейджер SAPID..................................................................................................50
14 Импорт проекта.......................................................................................................51
15 Экспорт проекта......................................................................................................53
16 Синдикация данных...............................................................................................53
17 Поисковая оптимизация сайта ............................................................................54
17.1 Анализатор SEO.................................................................................................................55
18 Термины...................................................................................................................55
19 Ссылки.....................................................................................................................56

1 Вступление
SAPID- свободно распространяемое в соответствии с условиями лицензии
GNU (см. файл Licence.Ru в комплекте поставки) программное обеспечение с
открытым кодом (Open Source). SAPID - это система управления сайтами
(CMS), на ее основе вы можете создать и поддерживать персональные и
тематические проекты.
У вас уйдут считанные минуты на то, чтобы настроить SAPID на своем
сервере. SAPID нетребовательна к хостингу: системе необходимо немного
пространства (до 2 Мб). SAPID подстроится под возможности вашего
хостинга, и, если на сервере подключены дополнительные модули
(ModRewrite, GZIP и т.п.), сможет использовать их преимущества.
Если у вас уже есть сайт, то структура и информация может быть перенесена в
SAPID автоматически.
SAPID – это также opensource-среда разработки сайтов, отвечающая
требованиям спецификации XML Sapiens (универсального языка управляемых
сайтов http://www.xmlsapiens.org) от рабочей группы XML Sapiens.

2 Возможности

Страница 3 из 57 SAPID CMS (sapid.sourgeforce.net)


• Простота установки и использования.
Для того, что бы установить CMS SAPID вам всего лишь понадобится
распаковать дистрибутивный пакет на хост-сервер и стартовать скрипт
install.php. После этого для вас станет доступным демонстрационный сайт с
виртуальным гидом по системе. Каждый интерфейс системы снабжен
многочисленными комментариями и подсказками. В SAPID применена
технология прямого редактирования (Inline), что позволяет администратору
привычным образом перемещаться по разделам сайта и при необходимости
редактировать их.

• Минимальные требования к хостигу (file flat), независимость от


платформы.
Для использования SAPID Вам понадобиться минимальный хостинг-план.
Достаточно всего несколько мегабайт дискового пространства и язык PHP
4.x. Вы можете установить SAPID на практически любой бесплатный
хостинг-сервер, предоставляющий PHP. Если вам понадобиться перенести
проект на другой хостинг или создать локальную резервную копию сайта,
достаточно всего лишь скопировать файлы проекта.

• Программное ядро, построенное по концепции XML Sapiens.


Для создания веб-сервисов, новых интерфейсов сайта в free ware CMS SAPID
вам не потребуется знания программного языка PHP. Вы можете
использовать простые алгоритмы XML Sapiens для описания сценариев и
алгоритмов динамических областей сайта. Вы также можете использовать в
своих проектах примеры готовых решений из дистрибутивного пакета, и
загружать решения из общественной библиотеки XML Sapiens Work Gallery
(http://xmlsapiens.org/lib/)

• WYSIWYG (Визуальный редактор для редактирования содержания


документов)
Вы можете самостоятельно задавать редактируемые области содержания для
документов сайта, в том числе области, редактируемые визуальным
редактором. Это значит, что содержание будет столь же удобно
редактировать, как вы привыкли это делать в MS Word.

• Различные форматы представления данных (HTML, XHTML, XML-


Flash, SVG, WML)
В СMS SAPID вы не ограниченны единственным форматом представления
данных HTML. То есть вы можете с помощью SAPID создавать и
редактировать сайты во Flash, WML (WAP), XML-XSLT и т.д.

• Адреса документов сайта, отражающие их структурную зависимость


(friendly URLs)
Если ваш сервер поддерживает технологию Apache Mod Rewrite, то адреса
документов вашего сайта будут иметь удобочитаемый, легко
запоминающийся и понимаемый поисковыми системами вид
(site.com/item_1/subitem_11/)

Страница 4 из 57 SAPID CMS (sapid.sourgeforce.net)


• Конструктор веб-сервисов.
Если вам понадобиться создать новый пользовательский веб-сервис, вы
найдете что в SAPID это можно сделать более чем просто и удобно.

• Готовые примеры веб-сервисов.


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

• Поддержка многоязычных сайтов


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

• Утилита автоматического переноса структуры и данных существующего


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

• Возможность создания статической HTML-копии сайта на базе CMS


SAPID.
Если вы пожелаете создать статичный архив вашего сайта, то можете
воспользоваться специальной утилитой CMS SAPID. Эта утилита создает
точную статичную HTML-копию сайта, а также необходимые файлы для
дальнейшей конвертации сайта с помощью HTM2CHM в популярный формат
Windows Help.

• Создание пользовательских групп для посетителей сайта


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

• Роли администраторов системы: базовый режим, экспертный и режим


оператора контента.
Free ware CMS SAPID располагает двумя уровнями режимов
администрирования: упрощенный (базовый) и расширенный (экспертный).
Кроме того, имеется специальный режим для операторов контента. Если вы
желаете поручить кому-либо управление содержанием на вашем сайте, вы
можете передать ему назначенные вами авторизационные данные. По этим
данным система позволит лишь управление содержанием документом, но не
более того.

Страница 5 из 57 SAPID CMS (sapid.sourgeforce.net)


• Встроенный пейджер для коммуникаций с разработчиками и
участниками сообщества CMS SAPID.
Если по мере использования CMS SAPID вы столкнетесь с какими-либо
проблемами, то вы всегда сможете проконсультироваться непосредственно у
разработчиков или же в сообществе проекта посредством специального
сервиса SAPID – собственного пейджера мгновенных сообщений.

• Анализатор SEO.
SAPID содержит специальный сервис для поисковой оптимизации
документов сайта. Для любово документа SAPID можно вызвать анализатор
SEO, который сообщит о частоте встречаемости ключевых слов в различных
индексируемых областях документа.

• Открытость проекта для вашего участия в его развитии.


Если вы посчитаете, что проекту необходимы какие-либо доработки, то вы
можете предложить свои идеи на обсуждение сообществом SAPID
(http://www.sapid-club.com/). Вы также можете включить себя в проект SAPID
на странице http://sourceforge.net/projects/sapid/

Страница 6 из 57 SAPID CMS (sapid.sourgeforce.net)


3 Организация SAPID

CMS SAPID инициативный проект сотрудников Red Graphic Systems


(www.redgraphic.com). Проект разрабатывается и продвигается при содействии
компании Red Graphic Systems.

Автор и разработчик проекта:


Максим Барышников (http://xmlsapiens.org/~mephisto/)

В проекте также принимают участие:

Дмитрий Шейко (http://xmlsapiens.org/~sheiko/)


Концепция, документация, продвижение, контент-мигратор, пейджер
мгновенных сообщений
Павел Левкович (http://xmlsapiens.org/~linur/)
Интерактивное дерево структуры, пример 3D карты контента, интерфейс
статистики

Дизайн проекта
Ирина Зносок (i@redgraphic.com)

4 Назначение

CMS SAPID идеально подходит для построения персонального сайта. В


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

Вы можете создавать с помощью SAPID тематические контент-проекты (сайт,


посвященные определенной тематике: автомобилям, фитнесу, домашним
питомцам и т.д.). Вы сможете легко интегрироваться с прочими сайтами
подобной тематики посредством RSS-каналов и агрегатторов.

SAPID можно использовать для построения небольших порталов-сообществ.


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

5 Устойчивость к нагрузкам

Сообществом пользователей SAPID проводилось тестирование устойчивости


SAPID к нагрузкам. Было реализовано приложение, формирующее 20 запросов
на демонстрационный сайт SAPID одновременно. Приложение стартовалось с
порядка 200 компьютеров. Результаты тестирования показали, что SAPID
способен функционировать при нагрузке до 2 000 запросов в минуту. При

Страница 7 из 57 SAPID CMS (sapid.sourgeforce.net)


балансировке нагрузки между 3-мя серверами SAPID выдерживает нагрузку до
6 000 запросов в минуту.

6 Системные требования
Сервер:
• Apache Web Server / рекомендуется rewrite module/ (http://www.apache.org)
• PHP version 4.1.x (http://www.php.net)

Система корректно работает как на платформе UNIX, так и под управлением


Windows

Клиент администратора:
MS Internet Explorer 5.5+ (рекомендуется версия 6)
FireFox 0.9+ (браузеры на ядре Gecko)

7 Инсталляция

После того как вы загрузили исходный код текущей версии программы, вы


можете либо инсталлировать SAPID автоматически, либо установить ее в
ручную.

В первом случае достаточно переписать файлы дистрибутивного пакета на


сервер и стартовать скрипт install.php. Далее вы сможете просто следовать
указаниям программы.

В случае ручной установки после переноса файлов на сервер, вам потребуется


расставить права доступа на папки и файлы следующим образом

usr/dump 777
usr/dump/*.* 777
usr/extentions 755
usr/extentions/*.* 755
usr/templates 777
usr/templates/*.* 777
usr/templates/images 777
usr/templates/files 777
usr/xml 777
usr/xml/*.* 777
usr/xml/content/ 777
usr/xml/sdc/ 777
usr/xml/vdb/ 777
log/ 777

Затем следует сообщить программе в файле конфигурации /etc/rc.conf.php


HTTP-адрес проекта в переменную $http_path (например,
$http_path="http://myproject.domen.com") и полный путь корневой папке проекта
на сервере в переменную $root_path (например, $root_path
="/www/project/sapid/httpdocs/";)

Страница 8 из 57 SAPID CMS (sapid.sourgeforce.net)


Если вы произвели установку корректно, то при переходе по заданному вами
адресу (http://myproject.domen.com) вам будет доступен демонстрационный сайт
SAPID.

Для перехода к панели управления потребуется добрать к адресу сайта /area51/


(/?vpath=/area51/ при отключенном MODREWRITE), и авторизоваться
(pass/pass).

7.1 Возможные проблемы при инсталяции SAPID

7.1.1 Режим MODREWRITE

В ходе инсталяции может быть неопределенно наличие модуля


MOD_REWRITE на вашем сервере. Для получения Friendly URLs (человеко
понятных адрессов документов) вам потребуется самостоятельно настроить
ваш .htaccess и указать в конфигурационном файле etc/rc.conf.php
$MODREWRITE="enabled";

Пример файла .htaccess

DirectoryIndex index.php
ErrorDocument 404 /404/
Options +Followsymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?%{QUERY_STRING}

Для некоторых платформ потребуется указать полный путь к файлу index.php.


Например, таким образом:

DirectoryIndex index.php
ErrorDocument 404 /404/
Options +Followsymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://mysite.com/index.php?%{QUERY_STRING}

Узнать подробнее о MOD_REWRITE можно по адресам:


http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html,
http://www.sitepoint.com/article/guide-url-rewriting

Страница 9 из 57 SAPID CMS (sapid.sourgeforce.net)


7.1.2 Режим Multiviews
Если вам так и не удалось настроить MODREWRITE на своем сервере вы
можете попробовать применить режим Multiviews. Для этого потребуется
указать в конфигурационном файле etc/rc.conf.php
$MODREWRITE="Multiviews"; и настроить .htaccess следующим образом:

DirectoryIndex index.php
Options -Multiviews –Indexes
ErrorDocument 404 http://mysite.com/index.php

7.1.3 Режим Disabled


Если ваш хостинг-план не позволяет ни MODREWRITE, ни Multiviews или же
у вас нет возможности управлять .htaccess, укажите в конфигурационном
файле etc/rc.conf.php $MODREWRITE="disabled";. Файл .htaccess в данном
случае вам не потребуется, его можно удалить.

Страница 10 из 57 SAPID CMS (sapid.sourgeforce.net)


8 Интерфейс администрирования

Рисунок 1. Интерфейс администрирования

Давайте рассмотрим, как организован интерфейс администрирования SAPID. В


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

8.1 Многоуровневое администрирование в SAPID

Посредством SAPID создаются пользовательские интерфейсы. Посетитель


(неавторизованный пользователь сайта) взаимодействует c пользовательским
интерфейсом самого верхнего уровня. Администратор сайта в режиме
администрирования взаимодействует с пользовательским интерфейсом самого

Страница 11 из 57 SAPID CMS (sapid.sourgeforce.net)


нижнего уровня. Между этими двумя слоями может быть сколь угодно
большое число промежуточных интерейсов. Достаточно определить область
проекта доступную лишь для заданной группы, и мы получаем новый слой
пользовательского интерфейса. Контроллер данных в таком слое может быть
организован посредством указания DDC (См.11.3), связанного с CMS-
приложением или же прямым указанием кода контролера в шаблоне <?
EXTERNAL .. ?>

9 Управление сайтом

9.1 Что такое сайт и что такое CMS

Мы часто используем термин CMS, подразумевая программы управления


сайтом. В некоторой степени это справедливо. Но дабы избежать разночтений
в определениях, мы определим понятия сайт, CMS и связанные с ними для
проекта SAPID.

Любая информация доступная в Интернете, имеющая определенный интернет-


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

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

CMS SAPID позволяет управлять структурными связями документов сайта,


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

CMS SAPID позволяет управлять содержанием документов или частей


документов сайта.

CMS SAPID позволяет управлять представлением (внешним видом)


документов и внутренней структурой документов. Имеется ввиду, что в CMS
SAPID можно создавать шаблоны, обуславливающие группы схожих
документов. Шаблон содержит код представления документа (например,
HTML) и указатели на логические объекты (блоки редактируемого
содержания, блоки модулей).

CMS SAPID позволяет управлять веб-сервисами сайта и логикой интерфейсов.


Любые интерфейсные решения на сайте (навигационные формы,
интерактивные формы, информационные списки, выборки и т.д.) создаются и
управляются в режиме администрирования CMS SAPID.

Страница 12 из 57 SAPID CMS (sapid.sourgeforce.net)


9.2 Управление содержанием

Если вы установили SAPID и ознакомились с демонстрационным сайтом для


управления этим содержанием достаточно лишь набрать маршрут
http://myproject.domen.com/area51/ (http://myproject.domen.com/?vpath=/area51/
при отключенном MODREWRITE, см. 7.1) и далее ввести в форме свои
авторизационные данные. Если вы их не меняли в файле etс/rc.conf.php, то
можно набрать pass/pass.

Теперь в верхней части экрана появилась административная панель, но под ней


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

Для удаления документа или создания нового следует воспользоваться


интерфейсом «Структура»

Рисунок 2. Редактирование содержания документов

Страница 13 из 57 SAPID CMS (sapid.sourgeforce.net)


9.2.1 Как управлять новостями на сайте

Интерфейс управления новостями может быть настроен вами в


соответствующем DDC (сценарии, см. 11.3). В дистрибутивном пакете
предстален следующий интерфейс. Если вы перейдете к документу
«Infochannel», то получите список новостей раздела. В режиме редактировния
(переход посредством меню в панели состояния) напротив каждой новости
будет представлена кнопка для удаления, а ниже списка новостей кнопка для
добавления новости. Если вы желаете редактировать новость, вам следует
перейти по ссылке (Read more) к ее содержанию. Содержание новости может
редактироваться как любой другой документ.

Рисунок 3. Редактирование ленты новостей

9.3 Команды WYSIWYG-редактора

Области редактируемого содержания, с назначенным в шаблоне документа


типом «Визуальный редактор» при редактировании документа будут
представлены в визуальном редакторе. Визуальный редактор SAPID имеет
стандартные возможности IE Design Mode и добавленные к ним. Под областью
редактирования размещены три кнопки: «+», «HTML-код», «Чистить код».

Кнопка «Чистить код» применяется, когда надо очистить скопированное в


область редактирования содержание от какого-либо HTML-форматирования

Кнопка «HTML-код» является переключателем между режимами правки в


HTML-формате и визуальном представлении

Страница 14 из 57 SAPID CMS (sapid.sourgeforce.net)


Кнопка «+» раскрывает панель дополнительных функций.

Замечание:
Если вы используете браузер на базе ядра Gecko (Firefox, Netscape, Mozilla) для
включения отображения курсора в режиме визуального редактирования нажмите F7

9.3.1 Функции дополнительной панели

• Шрифт – выбрать шрифт для выделенного фрагмента содержания


• Выравнивание – задать правила выравнивания для выделенного
фрагмента содержания
• Отступ – задать отступ вправо или влево для выделенного фрагмента
содержания
• Список – преобразовать выделенный фрагмент содержания в список
• Добавить файл – обратиться к интерфейсу добавления файла, где можно
указать имя добавляемого файла, подпись к нему, и задать действие,
совершаемое при переходе по ссылке на файл.
• Добавить ссылку – обратиться к интерфейсу добавления ссылки, где
можно указать ссылку, подпись к ней, и задать действие, совершаемое
при переходе по этой ссылке.
• Вставить изображение – обратиться к интерфейсу добавления
изображений

Страница 15 из 57 SAPID CMS (sapid.sourgeforce.net)


9.3.2 Интерфейс добавления изображений
Для добавления нового изображения вам потребуется выбрать файл
изображения (допускаются файлы .GIF/.BMP/.JPG/.PNG/.SWF). Вы также
можете указать сопроводительный текст для изображения, правило
выравнивания изображения, толщину оконтовки, отступы по горизонтали и
вертикали.

Рисунок 4. Интерфейс добавления изображения

Если вы желаете добавить в содержание документа изображение из ряда


добавленных на сайт ранее, то переключитесь в режим «Мой сайт» в
горизонтальном меню в верхней части окна.

9.3.3 Создание галерей


Если вы желаете создать элемент галереи (малое изображение при переходе по
которому открывается всплывающее окно с большим изображением), то вам

Страница 16 из 57 SAPID CMS (sapid.sourgeforce.net)


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

Рисунок 5. Добавление изображения в галерею

Страница 17 из 57 SAPID CMS (sapid.sourgeforce.net)


9.3.4 Общие возможности визуального редактора

Нажмите Чтобы

CRTL-Z Отменить текущую операцию

CTRL+S Быстрое сохранение изменений, не покидая интерфейса


редактирования

9.3.5 Использование форматирования при редактировании содержания

Нажмите Чтобы

CTRL+B Сделать текст полужирным

CTRL+I Сделать текст курсивным

CRTL+U Сделать текст подчеркнутым

CTRL+SHIFT+Z или CTRL+ПРОБЕЛ Очистить формат

9.3.6 Перемещение по текстовому полю

Нажмите Чтобы

HOME Перейти в начало записи

END Перейти в конец записи

СТРЕЛКА ВЛЕВО или СТРЕЛКА ВПРАВО Переместить один знак влево или вправо

CTRL+СТРЕЛКА ВЛЕВО или CTRL+СТРЕЛКА Переместить одно слово влево или вправо
ВПРАВО

SHIFT+HOME Выделить текст от курсора до начала записи

SHIFT+END Выделить текст от курсора до конца записи

SHIFT+СТРЕЛКА ВЛЕВО Выбрать или отменить выбор одного знака слева

SHIFT+СТРЕЛКА ВПРАВО Выбрать или отменить выбор одного знака справа

CTRL+SHIFT+СТРЕЛКА ВЛЕВО Выбрать или отменить выбор одного слова слева

CTRL+SHIFT+СТРЕЛКА ВПРАВО Выбрать или отменить выбор одного слова справа

10 Создание сайта

10.1 Разработка концепции сайта

Прежде чем поступить к построению сайта, следует продумать архитектурный


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

Страница 18 из 57 SAPID CMS (sapid.sourgeforce.net)


10.1.1 Структура документа
Документы сайта могут различаться по содержанию, по структуре, и в
представлении (графический дизайн). В CMS SAPID структуру и
представление документа задает шаблон. Другими словами шаблон
документа, определяет группу документов схожих по структуре и
представлению, но различных по содержанию. Вам необходимо выделить все
такие группы и создать соответствующие шаблоны. См. подробнее раздел
«Создание шаблонов» (10.2).

10.1.2 Структура сайта


Следует также продумать то, каким образом документы сайта будут связаны
между собой. Эта зависимость в дальнейшем будет отражена в различных
навигационных формах сайта, что облегчит доступ к востребованным
данным со стороны пользователей. Для проектирования меж документных
зависимостей можно воспользоваться популярной моделью иерархического
дерева, наиболее полно отражающей структуру типичного сайта. Подробнее
о том, как управлять деревом структуры сайта в SAPID см. в разделе
«Создание структуры». О том, как создавать навигационные формы (меню)
см. в разделе «Создание DDC» (10.5.2)

10.2 Создание шаблонов

Как мы уже говорили, что шаблон определяет то, как будет выглядеть
документ, которому назначен данный шаблон на сайте. Для создания нового
шаблона следует перейти в интерфейс «Шаблоны». В этом интерфейсе вы
может создать собственный шаблон, изменить или удалить имеющийся. А
также вы можете добавлять и редактировать вспомогательные файлы, такие
как стилевые таблицы (CSS), файлы Java-скриптов. Давайте попробуем создать
новый шаблон для документа. Нажимаем кнопку «Создать новый шаблон» и
переходим к интерфейсу добавления шаблона. Прежде всего, вам следует
ввести название нового шаблона. Далее вы можете указать код представления
шаблона.

Страница 19 из 57 SAPID CMS (sapid.sourgeforce.net)


Например,

<html>
<body>
<h1>Заголовок</h1>
Текст
</body>
</html>

Однако нам надо указать, что блоки содержания «заголовок» и «текст» могут
редактироваться в режиме администрирования. Выделите слово «Заголовок» и
нажмите крайнюю левую кнопку ниже поля ввода кода. В появившемся окне
вам следует указать имя для указателя запроса содержания, скажем “title” и
выбрать тип запроса, например «Запрос текста на одну строку». Слово
«Заголовок» будет заменено указателем запроса содержания. Теперь мы
выделяем слово «Текст» и повторяем предыдущие действия. Укажем имя для
указателя «body» и тип запроса «Визуальный редактор». В результате мы
должны получить такой шаблон

<html>
<body>
<h1><sapi:apply name="qc.title.value" type="string" /></h1>
<sapi:apply name="qc.body.value" type="publication" />
</body>
</html>

После того как мы сохраним изменения шаблон отобразиться в общем списке


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

При создании и редактировании шаблонов вы можете не только задавать


расположение для редактируемого содержания, но указать положение блоков
содержания общих для всех документов (SDC, см. 11.2), или же включить в
шаблон модуль системы (DDC, см. 11.3), вставить системную переменную или
же другую конструкцию, отвечающую требованиям спецификации XML
Sapiens (www.xmlsapiens.org). См. также раздел «Объекты XML Sapiens» (см.
11)

См. также интерактивный курс на http://sapid.sf.net/download/screate_ru/

10.2.1 Синтаксис указателей объектов XML Sapiens в шаблонах документов

Общая конструкция для указателя любого объекта в SAPID выглядит


следующим образом

<sapi:apply name="объект.value" />

Страница 20 из 57 SAPID CMS (sapid.sourgeforce.net)


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

<sapi:apply name="variable.value" />

Имя переменной variable1. Свойство value указывает, что нам необходимо


значение переменной.

Указатель на контейнер запросов может выглядеть так:

<sapi:apply name="qc.body.value" type="string" />

Замечание:
В настоящей версии SAPID возможно использовать только предустановленный
контейнеры запросов, у которых тип и форма запроса содержания в режиме
администрирования задается дополнительным атрибутом type. Допустимы
значения text для строкового запроса и publication для визуального редактора. А
также типы image, file, checkbox.

Например:
<sapi:apply name="qc.body.value" type="publication" />

10.2.2 Включения кода системного языка CMS

В особых случаях требуется непосредственное обращение к коду языка


программирования CMS. SAPID поддерживает включения кода системного
языка в следующем синтаксисе:

<?EXTERNAL код_системного_языка ?>

или
<?SYSTEM код_системного_языка ?>

Страница 21 из 57 SAPID CMS (sapid.sourgeforce.net)


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

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

10.3 Создание структуры

Для управления структурой сайта следует перейти интерфейс «Структура».


Вы можете воспользоваться технологией Drag&Drop для операций с деревом
структуры, представленном в этом интерфейсе. Для того, что бы изменить
расположение какого-либо раздела дерева достаточно «зацепить»
пиктограмму папки раздела и перетащить в новое место. Вы хотите
скопировать раздел из одной ветви дерева в другую? Нет проблем.
Удерживайте клавишу Ctrl и поступайте в остальном также как при
перетаскивании. Если вы желаете сохранить произведенные вами изменения,
нажмите соответствующую кнопку, расположенную под деревом структуры.

Рисунок 6. Создание нового раздела структуры


Следует также упомянуть, что в CMS SAPID логические разделы и
подразделы структуры, физически являются документами сайта. Т.е.
ресурсами, определяемыми собственным уникальным интернет-адресом. Для
создания нового логического раздела в структуре следует нажать ссылку
«Добавить подраздел» напротив родительского элемента дерева для

Страница 22 из 57 SAPID CMS (sapid.sourgeforce.net)


создаваемого раздела. Т.е. для создания элемента верхнего уровня меню сайта,
следует нажать «Добавить подраздел» напротив элемента структуры,
обозначающего сам сайт. При добавлении появиться окно с запросом имени
для раздела, его адреса и его шаблона. Также запрашивается маска выборки
данного документа. Если создаваемый документ является указателем на
выборку из списка родительского документа (например, выборка новостей по
году и родительского документа со списком новостей), то это стоит
обозначить соответствующей маской. Допускаются маски:

# - целочисленное (например, #### - подразумевает четырехзначную запись


года)
#+ - переход к отдельной записи.

Таким образом, если вы желаете организовать адреса новостей ваше


новостной ленты в развернутом виде –
адрес_ленты/год/месяц/день/ID_новости, то вам следует преобразовать раздел
ленты в иерархическую ветвь масок ####, ##, ##, #+. См. раздел примеры.
Уже при создании раздела, вы можете назначать права доступа в этот раздел.
Для этого используется общепринятая модель UNIX. Вам потребуется
назначить владельца раздела, пользовательскую группу раздела и права в
формате владелец/группа/все_остальные (например, 777). См. также раздел
«Управление пользователями».

Для того что, бы перейти из структуры к какому-либо из документов сайта,


следует выбрать его название в дереве.

Для того, что бы редактировать содержание выбранного документа достаточно


всего лишь нажать кнопку «Редактировать» в правой части панели
администрирования. Теперь вы можете изменить содержание определенных
шаблоном блоков документа. Для сохранения изменений в правой части
панели администрирования имеется кнопка «Сохранить».

См. также интерактивный курс на http://sapid.sf.net/download/structure_ru/

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

10.4 Управления пользователями

SAPID содержит интерфейс «Пользователи» для управления списком


пользователей системы. При создании нового пользователя достаточно лишь
указать его login/password и группу. При указании предопределенных групп

Страница 23 из 57 SAPID CMS (sapid.sourgeforce.net)


(wheel – администраторы, managers – операторы контента) подразумевается
определение соответствующих пользовательских ролей.
В интерфейсе управления структурой при создании нового раздела
запрашивается информация о пользовательских правах на данный раздел.
Назначение прав происходит по принципам, принятым в UNIX. Каждому
разделу можно назначить пользователя-владельца, назначить
пользовательскую группу и обозначить UNIX-маску на права доступа
владелец/группа/все_остальные (777).

10.5 Моделирование интерфейсов

10.5.1 Создание веб-сервиса

Сценарий поведения любого веб-сервиса или же пользовательского


интерфейса сайта в CMS SAPID обуславливает соответствующий модуль
(DDC, см. 11.3). Содержание DDC описывает варианты кода возвращаемого
модулем для всех условий состояния среды, в зависимости от действий
пользователя. Аргументами выражений в условиях могут быть системные
переменные (см. «Переменные окружения» в спецификации XML Sapiens).
Когда DDC требуется получить какие-либо данные от CMS, скажем список
материалов ленты новостей, происходит обращение к функции CMS (см.
«приложения CMS» в спецификации XML Sapiens). Однако это
подразумевает однонаправленный обмен данными (от CMS к сайту), чего,
впрочем, достаточно для большинства интерфейсных задач. Когда же все-
таки требуется передать данные пользователя, например, содержание
пользовательской формы CMS для сохранения в SAPID используется
специальный синтаксис параметров формы.

С другой стороны благодаря возможности использования системного кода


непосредственно в шаблоне вы можете разместить в шаблоне вызов скрипта
контроллера (<?EXTERNAL include(“./usr/extensions/
doc1_controller.inc.php”); ?> ). Этот скрипт будет обрабатывать
пользовательские запросы к документу и формировать на их основании среду
окружения, что отразиться при генерации объектов документа (например,
содержание DDC).

Итак, мы можем видеть, что создание нового веб-сервиса в SAPID может


содержать до 3-х уровней управления.
1. Создание модуля (DDC)
2. Создание функции CMS (CMS-приложения)
3. Передачи инструкций CMS из пользовательской формы в документе сайта
(факультативно).

10.5.2 Создание модуля (DDC)

Страница 24 из 57 SAPID CMS (sapid.sourgeforce.net)


Как уже было сказано, сценарий веб-сервиса определяет соответствующий
контейнер динамических данных (DDC, см. 11.3). Таким образом, создание
нового сервиса SAPID начинается с интерфейса режима администрирования
«Модули». Вам потребуется создать новый DDC, содержание, которого
должно отвечать требованиям спецификации XML Sapiens. Синтаксис и
концепция DDC детально описаны в спецификации
http://xmlsapiens.org/spec/bodyofthesapi/datacontainers/dynamiccontainer/, и
дабы неповторяться здесь, мы просто рассмотрим пример одного DDC:

<?xml version="1.0"?>
<sapi version="1.0"
xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="menu" title="ddc" ns="site1"
category="navigation">
<sapi:author>
<sapi:name>Max Baryshnikov</sapi:name>
<sapi:email>mb@rg.by</sapi:email>
<sapi:url>www.redgraphic.com</sapi:url>
</sapi:author>
<sapi:comments>Vertical menu with subitems.</sapi:comments>
<sapi:choose>
<sapi:when exp="1">
<sapi:for-each select="get_tree()" name="enum">
<sapi:choose>
<sapi:when>
<sapi:exp>eq(this.this.currentpage.value,1)</sapi:exp>
<sapi:code>

<sapi:apply name="this.this.spacer.value" /> › <a


class="active" sapi:href="this.this.HREF.value"><sapi:apply
name="this.this.TITLE.value" /></a><br />

</sapi:code>
</sapi:when>
<sapi:when>
<sapi:exp>eq(this.this.currentpage.value,1)</sapi:exp>
<sapi:code>

<sapi:apply name="this.this.spacer.value" />› <a


class="inactive" sapi:href="this.this.HREF.value"><sapi:apply
name="this.this.TITLE.value" /></a><br />

</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>
</sapi:when>
</sapi:choose>
</sapi:ddc>
</sapi>

В двух первых строках этого кода мы определяем стандартный заголовок


XML. Далее с 3-8 строки мы вносим информацию об авторе. В 9й строке
описание модуля. Это пригодится если вы пожелаете внести свое решение в
общественную библиотеку XML Sapiens Work Gallery

Страница 25 из 57 SAPID CMS (sapid.sourgeforce.net)


(http://xmlsapiens.org/lib/). Далее мы можем видеть элемент SAPI:CHOOSE,
говорящий о том, что будут перебираться условия. В данном DDC на верхнем
уровне встречено лишь одно условие (SAPI:WHEN) – всегда истинное (1). В
случае выполнения данного условия (а оно выполняется всегда) стартует
перебор значений (SAPI:FOR-EACH), запрашиваемых у CMS-приложения
get_tree(). Get_tree() – рекомендованное приложение, оно возвращает
информацию о всех элементах структуры. Вложенный элемент
SAPI:CHOOSE опять намекает нам, что возвращаемые последовательно CMS-
приложением элементы структуры будут анализироваться на соответствие
заданным условиям. Он проверяет два условия, выражения которых
помещены в элемент SAPI:EXP.
В первом случае проверяется - не соответствует ли текущий элемент
перечисления текущему документу сайта (открытому в данный момент),
второе условие обратное первому ( eq(this.this.currentpage.value,1) ).
В каждом из этих случаев возвращается свойство элемента перечисления
TITLE (<sapi:apply name="this.this.TITLE.value" />) с сопутствующим ему
различным кодом представления.

Вы желаете изменить оформление меню сайта? Измените оформление для


содержания элемента SAPI:CODE для каждого из этих случаев или же
добавьте новые условия, скажем для проверки уровня вложенности (LEVEL).

10.5.3 Модули (DDC) дистрибутивного пакета

Файлы DDC расположены в папке /usr/xml/ddc/.

Модуль Описание

authorization.xml Модуль авторизации. Если пользователь неавторизован показывается


форма из первого условия, запрашиваются логин и пароль (условие I).
При этом отображается форма для регистрации пользователя (условие
III). Если пользователь авторизован будет отображена лишь форма
изменения регистрационных данных (условие II). Если в ходе регистрации
или авторизации возникла ошибка, сообщение об ошибке будет
отображено (условие IV).

books.xml Пример инфоканала типа каталог.


Инфоканал может иметь следующие режимы и состояния:
1) Режим доставки содержания – режим, когда посетитель просматривает
сайт;
2) Режим администрирования – режим, когда администратор управляет
сайтом;
2.1) Состояние редактирования – состояние, когда нажата кнопка
«Редактировать» на панели состояния;
2.2) Состояние просмотра – состояние, когда нажата кнопка
«Просматривать» на панели состояния;

Модель инфоканала

1. Базовые условия

Страница 26 из 57 SAPID CMS (sapid.sourgeforce.net)


1.1. Обращение к CMS-приложению get_infochannel. Используются
следующие параметры:

• текущий инфоканал books;

• базовый адрес канала en/samples/infochannel2/;

• показывать по 5 записей на страницу - LIMIT(0,5);

• сортировать по индексному полю BOOK_TITLE (один из запросов


содержаиня записи) по-возврастающей;

• Если 3й (индекс 2) параметр навигационной части адресной


строки равен "filter" и 4й параметр задан, то выводить в список
лишь те записи, укоторых содержание поля BOOK_TITLE
начинается с 4го параметра (в 4м параметре передается буква
алфавита для фильтрации);
Перебор условий по списку, возвращенному CMS-приложением

1.1.1. Показать запись списка в режиме доставки содержания;

1.1.2. Показать выбранную запись (по ссылке ‘Read more’) в режиме


доставки содержания;

1.1.3. Показать выбранную запись (по ссылке ‘Read more’) в режиме


администрирования, в состоянии редактирования;

1.1.4. Показать запись списка в режиме доставки содержания, если она


не содержит ссылки ‘Read more’;

1.1.5. Показать запись списка в режиме администрирования, в


состоянии редактирования;

1.2. Показать кнопку для добавления запись;

1.3. Показать выбранную запись в режиме администрирования, в


состоянии редактирования (добавление записи, редактирование
записи);

1.4. Показать навигацию по страницам списка;


Замечание: В режиме доставки содержания, содержание полей
принимается из переменных списка, возвращенного CMS-приложением
(например, <sapi:apply name="this.this.BOOK_AUTHOR.value" />)
В режиме администрирования предполагается для запроса данных
содержания, соотвественно используется конструкция QC (например,
<sapi:apply name="qc.BOOK_AUTHOR.value" />).

breadcrumbs.xml Модуль маршрута к документу.


CMS-приложение get_track() возвращает список элементов маршрута.
Если элемент списка не последний, он выводится как ссылка. Иначе
будет отображено название элемента без ссылки.

calendar.xml Модуль календаря инфоканала.


CMS-приложение назначает значения переменным типа &day.1.value;.
Модуль возвращает HTML-код календаря, где указатели на переменные в
ячейках календаря будут заменены соответствующими значениями
переменных.

cascadevmenu.xml Модуль каскадного меню.


CMS-приложение get_tree, согласно заданных ему параметров
возвращает список всех элементов структуры от 1 до 3 уровня и
элементов, являющихся потомками текущего раздела. Элемент списка,

Страница 27 из 57 SAPID CMS (sapid.sourgeforce.net)


соответствующий текущему разделу (Условие I) будет оформлен иначе,
чем прочие (Условие II).

comments.xml Модуль комментариев документа. DDC содержит 2 последовательных


условия. В первом CMS-приложение get_infochannel возвращает список
специального инфоканала allcomments_index, куда сохраняются все
комментариии к документам. Во втором условии отображается форма
добавления комментария к документу.

defaultmenu.xml Модуль простого меню. DDC обращается к get_tree за структурой сайта и


далее задает оформления для ее отображения. Текущий раздел будет
выделен.

dropdown_menu.xml Модуль «выпадающего» меню. Этот модуль можно считать классическим


примером многоуровневых конструкций условий и перечислений в DDC.
На первом уровне DDC помимо вывода в HTML Jscript , обращается к
CMS-приложению get_tree, для приема списка из всех элементов
структуры 1 уровня. При переборе записей списка происходит обращение
к get_tree за текущей ветвью 2-го уровня. Аналогичным образом DDC
ведет себя при переборе записей 2-го уровня. Таким образом, DDC
возвращает динамическое меню 3-х уровней вложенности.

get_rss.xml Модуль RSS-импорта. DDC задает отображение для записей списка RSS-
канала, указанного в третьем параметра адресной строки. Если при
разборе XML RSS канала не произошла ошибка, то DCC возвращает
HTML со списоком записей канала, иначе будет отображено содержание
ошибки.

guestbook.xml Модуль гостевой книги. DDC обращается к CMS-приложению


get_gb_records за списком записей гостевой книги (к
файлу /usr/xml/vdb/guestbook.xml) и отображает эти записи либо с ссылкой
для удаления (в административном режиме), либо без нее. Первая запись
списка выделяется. DDC также отображает форму для добавления
сообщения.

horizontalmenu.xml Модуль меню структуры 1-го уровня. Данный DDC- частный случай
defaultmenu.xml

infochannel.xml Универсальный DDC инфоканала.


Инфоканал может иметь следующие режимы и состояния:
1) Режим доставки содеражиня – режим, когда посетитель просматривает
сайт
2) Режим администрирования – режим, когда администратор управляет
сайтом
2.1) Состояние редактирования – состояние, когда нажата кнопка
«Редактировать» на панели состояния
2.2) Состояние просмотра – состояние, когда нажата кнопка
«Просматривать» на панели состояния

Модель инфоканала

1. Базовые условия
1.1. Обращение к CMS-приложению get_infochannel. Параметры передают
при вызове DDC.
Перебор условий по списку, возвращенному CMS-приложением
1.1.1. Показать запись списка в режиме доставки содержания

Страница 28 из 57 SAPID CMS (sapid.sourgeforce.net)


Показать выбранную запись (по ссылке ‘Read more’) в режиме доставки
содержания
1.1.2. Показать выбранную запись (по ссылке ‘Read more’) в режиме
администрирования, в состоянии редактирования
1.1.3. Показать запись списка в режиме доставки содержания, если она
несодержит ссылки ‘Read more’
1.1.4. Показать запись списка в режиме администрирования, в состоянии
редактирования
1.5. Показать кнопку для добавления новости
1.6. Показать выбранную запись в режиме администрирования, в
состоянии редактирования (добавление записи, редактирование
записи)
1.7. Показать навигацию по страницам списка
Замечание: В режиме доставки содержания, содержание полей
принимается из переменных писка, возвращенного CMS-приложением
(например, <sapi:apply name="this.this.TITLE.value" />)
В режиме администрирования предполагается запрос данных
содержания, соотвественно используется конструкция QC (например,
<sapi:apply name="qc.TITLE.value" type="string" index="yes" title="Title of
news" />).

inner_menu.xml Модуль меню вложенных разделов. DDC обращается к CMS-приложению


get_tree с параметром _CHILDRENOFCURRENT_. В этом случае get_tree
возврашает список вех вложенных разделов.

menu.xml Модуль меню заданной языковой версии сайта. Версия сайта


определяется первым параметром адресной строки. В данном случае
либо ‘en’, либо ‘ru’. Если выбрана текущей главная страница, то то
рассматривается случай ‘en’. Данный параметр определяет ветвь
структуры, поэтому он передается CMS-приложению get_tree для
получения нужного списка записей.

news.xml Модуль ленты новостей. Работает аналогично infochannel.xml, но


параметры передаются непосредственно в DDC. В отличии, от
infochannel.xml для задания адреса для просмотра новости отдельно
используется переменная this.this.MORE.value. Таким образом, адреса
элементов списка имеют расширенный формат, согласно заданной маски
(например, год/месяц/день/ID).

search.xml Модуль поиска. DDC отображает форму поискового запроса. В случае


переданного через нее запроса происходит обращение к CMS-
прилоежению get_searchresults за списком результатов поиска. В случае
возникновения ошибки (не надено результатов) – ошибка будет
отображена.

show_rss.xml Модуль экспорта инфоканала в RSS. DDC обращается к CMS-


приложению get_infochannel за списком записей канала news. Далее в
DDC задается RSS-формат оформления запсией списка.

survey.xml Модуль примера голосования. DDC отображает форму приема голосов,


если текущий пользователь еще не голосовал. В обратном случае
отображается форма с результатами голосования. Узнать подробнее о
модуле в 10.5.8.

topmenu.xml Частный случай defaultmenu.xml

Страница 29 из 57 SAPID CMS (sapid.sourgeforce.net)


10.5.4 Универсальный DDC инфоканала

В дистрибутивном пакете представлен универсальный DDC инфоканала


infocahnnel.xml и пример его выова в шаблоне. Так как во многих веб-проектах
требуется наличие большого числа однотипных инфоканалов, создавать для
каждого из них отдельный DDC неоптимально. В этих случаях логичней
использовать один DDC infocahnnel, но передавать параметы заданного
инфоканала в параметрах DDC. Например:

<sapi:apply name="ddc.infochannel.value">
<sapi:param name="query">
_CHANNEL(news)_
_BASEURL(en/samples/news/)_
_LIMIT(0,5)_
_ORDER(INDEX,TITLE,ASC)_
</sapi:param>
</sapi:apply>

10.5.5 Создание CMS-приложения

Для приема данных DDC от CMS используются функции CMS (CMS-


приложения). В SAPID системным языков является PHP, значит язык
функций CMS SAPID также PHP.

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


переданным ей параметров. Например, если потребуется содержание
языкового меню сайта CMS-приложение может быть вызвано следующим
образом get_tree('', '_LEVELRANGE(1-1)_'). На выходе функции мы получим
массив

array(0 => array("counter" => 1, "TITLE" => "Current


title", ..), ..)

(См. также 10.5.6).

10.5.6 Список CMS–приложений дистрибутивного пакета

Приложение Описание

get_infochannel() Описание:
Информационный канал: лента новостей, лента статей, специальная
лента

Параметры: ( [string вспомогательная_командная_строка])

Страница 30 из 57 SAPID CMS (sapid.sourgeforce.net)


Вспомогательная командная строка может содержать следующие
значения, разделенные пробелами:
_ALLITEMS_ - принять потомков для каждого узла
_LIMIT(A,B)_ - Ограничение числа выводимых узлов. Где A – порядковый
номер для начала списка, B – число выводимых узлов. Например,
_LIMIT(0,20)_
_CHANNEL(имя_канала)_ - указать имя информационного канала
_BASEURL(адрес_канала)_ - указать адрес информационного канала
_ORDER(RANDOM)_ - сортировать список случайным образом
_ORDER(DATEC,ASC)_ - сортировать список по дате создания узлов
_ORDER(DATEC,DESC)_ - сортировать список по дате создания узлов в
обратном порядке
_ORDER(INDEX,NAME,ASC)_ - сортировать список по индексноу полю
NAME. Индексным полем может быть любой запрос содержания (QC) с
атрибутом index=”yes”. См. 10.5.3
_ORDER(INDEX,NAME,DESC)_ - сортировать список по индексноу полю
NAME в обратном порядке. Индексным полем может быть любой запрос
содержания (QC) с атрибутом index=”yes”. См. 10.5.3
_WHERE(выражение) – выбрать узлы согласно условия. Выражение
_WHERE_ может содержать переменные и сравнительные операнды.
Например, _WHERE( this.this.BOOK_TITLE.value like ‘A%’)_

Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.ID.value – ID записи
this.this.DATE_CREATE.value – дата создания записи в формате
DATETIME
this.this.MORE.value – ссылка вглубь для заданной записи с маской
(год/месяц/день/ID)
this.this.TO_SELECT.value – ссылка вглубь для заданной записи без маски
(при использовании такого рода ссылок, не требуется создавать
вспомогательную ветвь дерева)
this.this.сounter.value – текущий номер элемента перечисления
this.this.ПОЛЕ.value – значение ПОЛЯ перечисления (переменной,
образованной от запроса содержания – QC. См. 10.5.6).

Дополнительные переменные
this.navigation.next – требуется ли отображать навигацию по страницам
списка «вперед»
this.navigation.next.style.display – возвращает ‘none’ если не требуется
отображать навигацию по страницам списка «вперед»
this.navigation.next.href - ссылка для перехода к следующей странице
списка
this.navigation.previous – требуется ли отображать навигацию по
страницам списка «назад»
this.navigation.previous.style.display - возвращает ‘none’ если не требуется
отображать навигацию по страницам списка «назад»
this.navigation.previous.href - ссылка для перехода к следующей странице
списка

Страница 31 из 57 SAPID CMS (sapid.sourgeforce.net)


get_tree() Описание:
Дерево структуры

Параметры: ( [int URI_ начального_раздела , string


вспомогательная_командная_строка])
Вспомогательная командная строка может содержать следующие
значения, разделенные пробелами:
_ALLITEMS_ - принять все узлы структуры информационного
пространства
__CHILDRENOFCURRENT_ - возвратить потомки для текущего раздела
_INDENTIONSTR(строка) – строка, определяющая отступ для разделов
при формировании вертиекального меню.
_LEVELRANGE(начальный_уровень-конечный_уровень) – ограничения по
уровням
_GETCONTENT_ - принимать по каждому узлу, данные связанного
документа
_ORDER(RANDOM)_ - сортировать списоки уровней случайным образом
_ORDER(NAME,ASC)_ - сортировать списоки уровней по именам узлов
_ORDER(NAME,DESC)_ - сортировать списоки уровней по именам узлов в
обратном порядке
_ORDER(DATEC,ASC)_ - сортировать списоки уровней по дате создания
узлов
_ORDER(DATEC,DESC)_ - сортировать списоки уровней по дате создания
узлов в обратном порядке

Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления
this.this. spacer.value – строка отступа
this.this.ID.value – ID раздела структуры
this.this.VAR.value – переменная раздела структуры
this.this.OWNER.value – владелец раздела структуры
this.this.GROUP.value – группа раздела структуры
this.this.PERMISSIONS.value – маска доступа к разделу структуры
this.this.LEVEL.value – уровень вложенности раздела структуры
this.this.TITLE.value – заголовок раздела структуры
this.this.TEMPLATE.value – шаблон, связанного документа
this.this.CHILDREN.value – наличие потомков
this.this.LEVEL5.value – уровень вложенности раздела*5 раздела
структуры (для использования в HTML-атрибуте style)
this.this.spacer.value – отступ через &nbsp; в соответствии с уровнем
вложенности
this.this.PATH.value – относительный адрес раздела структуры
this.this.VAR_PARENT.value – переменная родительского раздела

Страница 32 из 57 SAPID CMS (sapid.sourgeforce.net)


структуры
this.this.in_route.value – 1 (TRUE) если раздел в активной ветви
this.this.HREF.value – ссылка элемента перечисления

get_infochannelfilter() Описание:
Данная функция формирует ссылки и заголовки на выборки для
последней DDC информационного канала по годам, месяцам или дням.
Параметры: ( string вспомогательная_командная_строка )
Параметр вспомогательная_командная_строка может принимать одно из
значений: year, month, day
Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления
this.this.title.value – заголовок элемента перечисления
this.this.HREF.value – ссылка элемента перечисления

get_track() Описание:
Маршрут к текущему документу
Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления
this.this.title.value – заголовок элемента перечисления
this.this.href.value – ссылка на элемент перечисления

get_survey() Описание:
Данные формы голосования
Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления
this.this.LENGHT_ {n}.value – длина графического индикатора результата
this.this. {n}.value – значение результата
this.this.PER_ {n}.value – длина результата
где {n} – номер результата

get_calendar() Описание:
Форма навигации по архиву инфоканала «Календарь»
Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления

get_rss() Описание:
Внешний RSS-канал
Переменные перечисления:
this.this.value.leght – число элементов перечисления
this.this.сounter.value – текущий номер элемента перечисления

Страница 33 из 57 SAPID CMS (sapid.sourgeforce.net)


this.this.PUBDATE.value – дата публикация записи
this.this. TITLE.value – заголовок записи
this.this.DESCRIPTION.value - аннонс записи
this.this.LINK.value – ссылка записи

get_gb_records() Описание:
Гостевая книга
Переменные перечисления:
this.this.IP.value – IP-адрес, с которого была добавлена запись
this.this.ID.value – ID записи
this.this.DATE_CREATE.value – дата создания записи в формате
DATETIME
this.this.NAME.value – имя автора записи
this.this.EMAIL.value – email автора записи
this.this.MESSAGE.value – содержание записи
this.this.AUTHOR.value – HTML – имя автора
this.this.COUNTER.value – текущий номер элемента перечисления

get_searchresults() Описание:
Вывод результатов поиска
Переменные перечисления:
this.this.TITLE.value – заголовок документа
this.this.HREF.value – ссылка документа
this.this.MATCHES.value – выдержка из документа
this.this. RELEVANCY.value – релевантность документа поисковому
запросу (0-100)
this.this.COUNTER.value – текущий номер элемента перечисления
this.this.DATE_CREATE.value – дата создания записи в формате
DATETIME

10.5.7 Структура хранилища данных

Хранилище данных SAPID реализованно на базе файловой системы. При


разработке собственных CMS-приложений вам потребуется массив $tree->map
для операций со структурой, методы класса sapi_vdb для операций с
виртуальной СУБД (управление данными информационных каналов, веб-
сервисов), расположение файлов данных.

В любом CMS-приложении доступен массив структуры $tree->map в формате

Array( [1] => Array (


[ID] => 1
[POINTER] => ['root']['en']
[HREF] => /en/

Страница 34 из 57 SAPID CMS (sapid.sourgeforce.net)


[VAR] => en
[OWNER] => root
[GROUP] => wheel
[PERMISSIONS] => 777
[LEVEL] => 1
[TITLE] => English
[TEMPLATE] => main.tpl
), ..
)

В массиве имеются ID разделов, которые сотносятся с XML-файлами данных в


папке /usr/xml/content/.

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


образом

$filename=$GLOBALS["root_path"] . "usr/xml/vdb/".$CHANNEL.".xml";
if (!isset($db)) $db = new sapi_vdb($filename);
$stream=$db->get_data();

Где $CHANNEL – канал данных

Запись в виртуальную базу данных может выглядеть так:

$filename=$GLOBALS["root_path"] . "usr/xml/vdb/".$CHANNEL.".xml";
$db = new sapi_vdb($filename);
$data["row"]["text"]=$_POST["news_text"];
$data["row"]["title"]=$_POST["news_title"];
$data["post_action"]="ADDNEWIPROW";
$result=$db->save_data_row(false, $data, false);

10.5.8 Передача инструкций CMS

Те, кто успел ознакомиться со спецификацией XML Sapiens, знают, что


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

Другими словами мы должны написать DDC с двумя условиями. В первом


случае, когда в POST пусто, отображается форма запроса варианта ответа на
вопрос. Если в POST есть данные вызывается CMS-приложение, которое
рассчитывает число голосов по каждому голосу и отображает отчет. Все бы
хорошо, но нам требуется как-то сохранять данные из POST. Для этого нам

Страница 35 из 57 SAPID CMS (sapid.sourgeforce.net)


достаточно указать в форме скрытое поле data_file, которое укажет SAPID в
какой файл сохранять данные из POST. Файл будет помещен в папку
usr/xml/vdb/.

Пример:

<input type="hidden" name="data_file" value="survey1.xml">

Однако нам надо не просто дописывать в файл данные, но расширять файл


лишь в случае голоса уникального посетителя. В скрытом поле post_action
можно сообщить системе как именно поступить с данными POST. Поле
post_action может принимать следующие значения:

ADDROW - добавить данные как новую запись в файл

CHANGEROW - заменить данные текущее содержание файла

ADDNEWIPROW - добавить данные как новую запись в файл, если файл не


содержит записей с текущего IP

ADDNEWCOOKIESROW - добавить данные как новую запись в файл, если


файл не содержит записей с текущим маркером в COOKIES

Пример:

<input type="hidden" name="post_action" value="ADDNEWIPROW">

Теперь нам следует определить содержание новой записи. Здесь следует


помнить, что система примет из POST массив row и сохранит все его элементы
в новую запись. Так что если мы планируем сохранить вариант ответа в
переменную result необходимо поле запроса row[result]

Пример:

<input type="radio" name="row[result]" value="1"> Вариант ответа 1

<input type="radio" name="row[result]" value="2"> Вариант ответа 2

Итак, данные, поступающие в POST будут корректно сохранены в файле.


Теперь необходимо CMS-приложение, которое прочитает этот файл и
рассчитает на основе его содержания данные отчета. Нам следует создать
новое CMS-приложение get_survey. Это приложение, прежде всего, должно

Страница 36 из 57 SAPID CMS (sapid.sourgeforce.net)


получить данные прежних голосований их XML-файла. Для этого можно
воспользоваться функцией get_data класса sapi_vdb.

Пример

$filename=$GLOBALS["root_path"] . "usr/xml/vdb/".
$_POST["data_file"];
if (!isset($db)) $db = new sapi_vdb($filename);
$objdata = db->get_data();

Теперь дело за малым, мы перебираем массив, возвращенный get_xml, и на


основе его содержания формируем отчет.

Пример:

foreach($objdata as $fetch) {
$stream["0"]["RESULT".$fetch["RESULT"]]++;
}

В выходном потоке CMS-приложения мы имеем одну запись с переменными


RESULTn, где n - порядковый номер вариант ответа. Теперь осталось лишь
отобразить эти значения в DDC:

<sapi:apply name="this.this.RESULT1.value" />

Вот собственно и все по данному примеру. Но если вы задаетесь вопросом «А


как сделать удобное управление сервисом?», могу намекнуть, что в DDC
всегда можно проверить режим администрации ( $_SESSION["user_session"]
["login"]!=false ) и соответственно отобразить запросы для формы
голосования, данные заполнения которой будут сохранены системой по тому
же принципу

10.5.9 Режим трассировки


В ходе отладки сайта вы можете узнать состояние среды окружения SAPID.
Для этого достаточно добавить к адресу текущего докуента /trace/
(http://mysite.com/about/trace/). В этом случае будут выделены все объекты
документа. При нажатии по пиктограмме с изображением «+» будет открыто
окно с отладочной информацией по данному объекту. В нижней части рабочей
области сайта будет представлена панель, через которую можно будет
получить информацию о состоянии переменных окружения и данных текущего
документа.

Страница 37 из 57 SAPID CMS (sapid.sourgeforce.net)


Рисунок 7. Режим трассировки

11 Объекты XML Sapiens

11.1 Контейнеры запросов (QC)

Контейнеры запросов указывают на фрагменты, отображаемого на сайте


документа, содержание которых может изменяться администратором CMS.
Для организации запроса содержания в шаблоне документа или в объекте XML
Sapiens следует разместить указатель на QC.

<sapi:apply name="qc.title.value" type="string" />

Указатель QC допускает следующие атрибуты

Атрибут Назначение

type Тип запроса


title Подпись запроса в области
администиррования
index При значении “yes”, данный запрос
индексируется, для возможности
дальней сортировки. Применяется в

Страница 38 из 57 SAPID CMS (sapid.sourgeforce.net)


информационных каналах.
accessarea “global” – содержание запроса
отображается во всех режимах, “edit” – в
режиме администрирование, в состоянии
редатирования
resize Производить модификацию размера
изображения при загрузке. Формат:
resize=”width*height”
iconsize Производить создание иконки к
изображению заданного размера.
Формат: iconsize =”width*height”
src Ссылка на источник данных (например,
для запроса типа select)

В текущей версии SAPID доступны предустановленные типы QC:

Типы Запросы

string Запрос строки содержания.


publication Запрос публикации (WYSIWYG).
image Запрос изображения
file Запрос файла
checkbox Запрос бинарного значения True/False
date Показать текущую дату (PHP-маска
формата даты задается в
конфигурационном файле в переменной
PHP_DATEFORMAT)
select Запрос значения из предложенного
списка

Рассмотрим пример:

<sapi:apply name="qc.title.value" type="string" title="Title of


block" index="yes" />

11.2 Контейнеры статических данных (SDC)

Контейнеры статических данных указывают на повторяющиеся фрагменты


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

Страница 39 из 57 SAPID CMS (sapid.sourgeforce.net)


<sapi:sdc name="var1" title="Пример контейнера статических
данных">
html…
</sapi:sdc>

11.3 Контейнеры динамических данных (DDC)

Контейнеры динамических данных указывают на фрагменты отображаемых


данных на сайте документа, содержание которых формируется на основании
некоторого функционального алгоритма. Эти контейнеры содержат описание
функциональных алгоритмов.

Пример контейнера динамических данных:


<?xml version="1.0"?>
<sapi version="1.0"
xmlns:sapi="http://www.xmlsapiens.org/spec/sapi.dtd">
<sapi:ddc name="menu" title="ddc" ns="site1"
category="navigation">
<sapi:author>
<sapi:name>Max Baryshnikov</sapi:name>
<sapi:email>mb@rg.by</sapi:email>
<sapi:url>www.redgraphic.com</sapi:url>
</sapi:author>
<sapi:comments>Vertical menu with subitems. CMS
SAPID.</sapi:comments>
<sapi:choose>
<sapi:when exp="1">
<sapi:for-each select="get_tree()" name="enum">
<sapi:choose>
<sapi:when>
<sapi:exp>eq(this.this.currentpage.value,1)</sapi:exp>
<sapi:code>

<sapi:apply name="this.this.spacer.value" /> › <a


class="active" sapi:href="this.this.HREF.value"><sapi:apply
name="this.this.TITLE.value" /></a><br />

</sapi:code>
</sapi:when>
<sapi:when>
<sapi:exp>neq(this.this.currentpage.value,1)</sapi:exp>
<sapi:code>

<sapi:apply name="this.this.spacer.value" />› <a


class="inactive" sapi:href="this.this.HREF.value"><sapi:apply
name="this.this.TITLE.value" /></a><br />

</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>
</sapi:when>
</sapi:choose>
</sapi:ddc>

Страница 40 из 57 SAPID CMS (sapid.sourgeforce.net)


</sapi>

11.4 Выражения XML Sapiens


Для описания логики функциональных решений в контейнерах динамических
данных могут быть использованы выражения XML Sapiens. При разработке
операндов выражений использовались конструкции языка скриптов для XML
XEXPR (http://www.w3.org/TR/2000/NOTE-xexpr-20001121/). Данная
спецификация поддерживает выражения сравнения. Эти выражения могут
возвращать одно из двух значений (0 или 1), означающих соответственно
FALSE (ложь) или TRUE (истина).
В содержании атрибутов XML Sapiens допускает операнды выражений lt(A, B,
C) (меньше), leq(A, B, C) (меньше либо равно), geq(A, B, C) (больше либо
равно), eq(A, B, C) или == (равно), neq(A, B, C) или != (не равно), gt(A, B, C)
(больше). Где A B C значения, разделенные запятыми. Допускается
использование круглых скобок для группирования выражений, а также
логические операнды and(A, B, C) или AND (И) и or(A, B, C) OR (ИЛИ).
Также допустимы и математические операнды add(A, B, C) или + (сложить для
чисел и соединение для строк), subtract(A, B, C) или - (вычитание чисел),
multiply(A, B, C) или * (умножение чисел), divide(A, B, C) (деление чисел).
Выражения XML Sapiens допускают непосредственное обращение к
переменным среды CMS. Например:

<sapi:for-each select="get_tree()" >


<sapi:choose>
<sapi:when exp="neq(this.variable.value,
last_argv.value)">
<sapi:code>
<a sapi:href="this.this.href.value">
<sapi:apply select="this.this.title.value" />
</a>
</sapi:code>
</sapi:when>
</sapi:choose>
</sapi:for-each>

Выражения могут использоваться в атрибуте EXP элемента SAPI:WHEN, в


атрибуте SELECT элемента SAPI:FOR-EACH, в атрибуте EXP элемента
SAPI:APPLY или в атрибутах формата SAPI:%Attrib элементов HTML .

При необходимости получения результата выполнения выражения XML


Sapiens в коде контейнера (элемент SAPI:CODE) можно использовать
следующий синтаксис

<sapi:apply exp="add(http_path.value, qc.link.value)" />

Страница 41 из 57 SAPID CMS (sapid.sourgeforce.net)


11.5 Список выражений XML Sapiens

Синтаксис Действие

lt(A, B, C) TRUE если A < B < C


leq(A, B, C) TRUE если A <= B <= C
geq(A, B, C) TRUE если A => B => C
eq(A, B, C) TRUE если A = B = C
neq(A, B, C) TRUE если A != B != C
gt(A, B, C) TRUE если A > B > C
and(A, B, C) логическое умножение AND
or(A, B, C) логическое сложение OR
add(A, B, C) сложение для чисел и соединение для
строк
subtract(A, B, C) вычитание чисел
multiply (A, B, C) умножение чисел
divide (A, B, C) деление чисел

Замечание:
Запись operand(A, B, C) под разумлевает число возможных параметров от 2 до 10

11.6 Указатели XML Sapiens

Указатели XML Sapiens служат для обращения к содержанию объектов в коде


представления данных или же теле контейнеров данных. Указатели на данные
возвращают значения переменных окружения CMS. Обращение к значению
переменной может быть достигнуто путем использования элемента
SAPI:APPLY или же атрибута SAPI:%Attrib. Указатели на контейнеры
возвращают содержание контейнера данных.

Примеры:

<sapi:apply name="var1.value" /> <!— Указатель переменной


окружения -->
<sapi:apply name="qc.body.value" /> <!— Указатель контейнера
запроса -->
<sapi:apply name="sdc.footer.value" /> <!— Указатель SDC -->

Страница 42 из 57 SAPID CMS (sapid.sourgeforce.net)


<sapi:apply name="ddc.mainmenu.value" /> <!— Указатель DDC -->
<a sapi:href="qc.link.value">link</a> <!— Указатель в атрибуте
элемента HTML -->

11.7 Параметры вызова DDC

Если требуется использовать в шаблонах один и тот же DDC, но различным


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

<sapi:apply name="ddc.obj1.value">
<sapi:param name="pvar1">Value of param 1</sapi:param>
<sapi:param name="pvar2">Value of param 2</sapi:param>
</sapi:apply>

Значения параметров DDC будут доступны в условиях DDC в переменных


this.param.pvar1.value и this.param.pvar2.value

11.8 Перенаправление потока DDC

Если при проектировании шаблона представления требуется стартовать CMS-


приложение определенного DDC, но не возвращать в шаблон искомый код
DDC тот час же, следует воспользоваться перенаправлением потока DDC в
переменную окружения. При этом будет создана новая переменная, которая
примет код, «отработавшего» DDC. Эту переменную в дальнейшем можно
отобразить один или несколько раз в шаблоне посредством элемента
SAPI:APPLY.

Синтаксис перенаправления потока DDC следующий:

<sapi:apply name="ddc.obj1.value" redirect="tempvar" />


...
<sapi:apply name="tempvar.value" />
...

12 Руководство разработчика SAPID

12.1 Программная модель

В SAPID применена MVC-парадигма, рекомендованная в спецификации XML


Sapiens. Запрос из браузера поступает на скрипт index.php а из него
направляется контроллер SAPID (/mvc/controller/). Запрос анализируется,

Страница 43 из 57 SAPID CMS (sapid.sourgeforce.net)


после чего на основе данных адресной строки
($_SERVER["REQUEST_URI"]) в скрипте
/mvc/model/document_identification.inc.php идентифицируется текущий
документ. Для него принимаются данные содержания и шаблон. Если
необходимо, выполняются заданные действия (сохранение данных,
авторизация и т.д.).

Далее содержание документа и шаблона передаются процессору XML Sapiens


(/kernel/ kernel.lib.php). Процессор обрабатываетвсе указатели объектов XML
Sapiens. При генерации DDC процессор обращается к связанным CMS-
приложениям (/usr/extensions/). Готовый документ передает назад в браузер.

Browser
Controller
Environment

View Structure
XSL XML Sapiens
processor Template

Model
XML Sapiens
CMS API
declarations

Рисунок 8. MVC-парадигма SAPID

12.2 Среда окружения

12.2.1 Глобальные переменные

Переменная Содержание

$http_path HTTP-адрес сайта

$root_path Абсолютный адрес проекта

$FEEDBACK_EMAIL Email адрес для отсылки FEEDBACK

$default_charset Текущая кодировка

$default_language Текущий язык интерфейса администрирования

12.2.2 Переменные окружения


Переменные окружения представленны в массиве $env. Массив передается
объекту процессора XML Sapiens и самомодифицируется в процессе

Страница 44 из 57 SAPID CMS (sapid.sourgeforce.net)


компиляции документа. Поэтому актуальныя версия массива в CMS-
приложениях будет доступна как $this->env

Переменные окружения доступны в синтаксисе XML Sapiens как <sapi:apply


name="имя_переменной" /> или же &имя_переменной;

Переменная Содержание

$env [http_path] адрес сайта

$env [area51] Режим: 0-доставки содержания, 1-администрирования


(состояние просмотра), 2- администрирования
(состояние редактирования)

$env [obj_cache] флаг кеширования DDC

$env [default_charset] Кодировка документа

$env [default_language] Язык документа

$env [argv_string] Строка аргументов адресной строки браузера

$env [noslash_argv_string] -//-

$env [last_argv] Последний аргумент адресной строки

$env [argv.{n}] {n} элемент адресной строки

$env [document.id] Идентификатор документа

$env [document.title] Содержание QC.TITLE.VALUE

$env [document.template] Шаблон документа

$env [document.variable] Переменная документа

$env [document.level] Уровень структурной вложенности документа

$env [document.datetime] Время создания документа в DATETIME

$env [page.CONTENT] Содержание QC.CONTENT.VALUE

$env [page.pRead] Доступность на чтение

$env [page.pWrite] Доступность на запись

$env [page.pCreate] Доступность на создание

$env [user.LOGIN] Логин текущего пользователя

$env [user.GROUP] Группа текущего пользователя

$env [user.aStatus] Состояние авторизации пользователя

$env [argv][индекс_эл] Содержание заданного аргумента адресной строки

$env [argv_nav][индекс_эл] Содержание заданного аргумента навигационной части


адресной строки

$env [len_argv_nav] Число аргументов навигационной части адресной


строки

$env [argv_virtual.year] Значение фильтра в адресной строке по году

$env [argv_virtual.month] Значение фильтра в адресной строке по месяцу

$env [argv_virtual.day] Значение фильтра в адресной строке по дню

$env [argv_virtual.id] Значение фильтра в адресной строке по


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

Страница 45 из 57 SAPID CMS (sapid.sourgeforce.net)


12.3 Структура сайта

Структура сайта расположена в файле /usr/xml/tree.xml. При инициализации


системы (/mvc/controller/build_tree.inc.php) структура заноситься в объект
$tree

12.4 Данные документа

Данные документов расположены в xml файлах папки /usr/xml/content/. При


инициализации системы (/mvc/model/document_identification.inc.php)
данные текущего документа помещаются в массив $page и далее
распределяются в середе окружения следующим образом:
$env["page.имя_QC"] = данные для заданного QC по текущему документу

12.5 Размещение скриптов

Папка/скрипт Назначение

etc
rc.conf.php Конфигурационный файл системы

startup.inc.php Скрипт автозагрузки

case.inc.php Контроллер интерфейсов администрирования

interface

users.inc.php Административный интерфейс Пользователи

ddc.inc.php Административный интерфейс Модули

stats.inc.php Административный интерфейс Статистика

graph.php Конструктор графиков

structure.inc.php Административный интерфейс Структура

templates.inc.php Административный интерфейс Шаблоны

user_functions.inc.php Административный интерфейс CMS-приложения


(Функции)

rc.d

debug.inc.php Функции откладки кода

kernel
kernel.lib.php Библиотека API XML Sapiens процессора

vdb.lib.php Библиотека API виртуальной базы данных

tree.lib.php Библиотека API динаимческого дерева структуры

Страница 46 из 57 SAPID CMS (sapid.sourgeforce.net)


dal

files.lib.php Абстрактный слой управления файлами

lang
en.inc.php Английский язык интерфейса администрировани

ru.inc.php Русский язык интерфейса администрировани

log
2005.06.12.log Лог-файл статистики

mvc
controller

authorization_analysis.inc.php Получение информации о пользователе системы

build_tree.inc.php Получения дерева структуры сайта

getmethod_analysis.inc.php Анализ пользовательских GET-запросов

postmethod_analysis.inc.php Анализ пользовательских POST-запросов. Анализ


команд на отсылку Email, формирование шаблона
письма.
Замечание: анализ запросов из инфолент перенесен в
CMS-приложение get_infochannel
(usr/extentions/get_infochannel.inc.php)

requesturi_analysis.inc.php Анализ маски адресного пути, определние режима


трассировки, декларация переменной среды
document.url

user_requests_analysis.inc.php Анализ команд авторизации, переданных из


пользовательской формы, анализ передачи инструкций
CMS из пользовательской формы в документе сайта

model

document_identification.inc.php Идентификация текущего документа, прием его данных


в массив $page

view

functions.inc.php Функции общего назначения

usr
dump Папка для хранения временных файлов

extensions Папка с CMS-приложениями (Функциями)

system

cache Кеш объектов XML Sapiens

communicator Функции пейджера

images Изображения системных интерфейсов

js

mozile WYSIWYG для браузеров на ядре Gecko

startup.js.php Jscript –функции административного режима SAPID. По

Страница 47 из 57 SAPID CMS (sapid.sourgeforce.net)


большей части функции WYSIWYG

404.js.php «Бегущая строка» на стандартной странице с


сообщением о 404 ошибке

tree.js.php Jscript/DOM –функции динамического управления


деревом.

utf Карты кодировок для преобразования в UTF (Это


потребуется, если в PHP не включен модуль ICONV)

insert_file.php Интерфейс добавления файла в WYSIWYG

insert_image.php Интерфейс добавления изображения в WYSIWYG

editor.php WYSIWYG-редактор

edit.php Режим HTML WYSIWYG-редактора

sapi_expressions.inc.php Функции регулярных выражений XML Sapiens

checknewversion.inc.php Определение новой версии CMS

common_extfunctions.inc.php Общие функции CMS-приложений (сортировка)

counter.inc.php Учет статичтики посещений

default.css Полный CSS

edit_template.inc.php Форма управления содержанием файла для


административных интерфейсов

find.html Поиск в WYSIWYG по Ctrl-F

html2xhtml.js Преобразование HTML (битый режимом


DesignMode=On) к xHTML

image_resize.inc.php Функции изменения размера изображения (создание


иконок галерей)

insert_link.php Интерфейс добавления ссылки в WYSIWYG

light.css Сокращенный CSS

metapanel.inc.php Панель мета тегов

plotter.php Функции отрисовки UML-моджели DDC

preview.php -//-

remind.php Напоминание о появлении новой версии CMS

seo_analizer.php Анализатор SEO документа

tree.php Функции компресии данных структуры (дерева)

templates Папка шаблонов документов

files Папка с пользовательскими файлами

images Папка с пользовательскими изображениями и SWF

themes Темы пользовательского интерфейса

xml

content Папка с файлами содержания документов. Каждый


файл имеет имя в соответствии с ID (в дереве
структуры) родительского документа. Каждый файл
содержит XML-дерево, с элементами содержания
проименованными в соответсвии с использованными
QC для внесения контента

Страница 48 из 57 SAPID CMS (sapid.sourgeforce.net)


ddc Папка с DDC (модулями)

sdc Папка с SDC (фрагментами общего содержания для


группы документов)

vdb Папка данных виртуальной базы данных.


Содержит файл с комментариями к документам
(allcomments_index.xml), с номером текущего релиза
(системы release.xml), с содержанием гостевой книги
(guestbook.xml). Кроме того, каждый инфоканал
представлен в этой папке индексным файлом
(например, news.xml) и папкой с файлами записей
канала (например, news)

tree.xml Дерево структуры

users.xml Информация о пользователях системы

install.php Скрипт инсталляции системы

index.php Базовый скрипт

preview_image.php Скрипт отображения изображений в popup окне

showstats.php Скирпт отображения графиков статистики

12.6 Информационный канал

Под информационным каналом (инфоканалом) в SAPID подразумевается


список документов (лента новостей или статей, каталог, галерея).

Информационный канал управляется через DDC (например, infocahnnel.xml),


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

Для запроса списка документов CMS-приложения CMS-приложению


указывается имя источника _CHANNEL(имя)_. Физически это имя файла
индекса инфоканала, находящегося в папке /usr/xml/vdb/имя.xml. Данные
документов данного инфоканала соответственно будут размещены в файлах
папки /usr/xml/vdb/имя/. Для возможности сортировки по какому–либо из
полей данных (QC) документа списка, следует в указателе QC среди
атрибутов index=”yes”.

12.7 Функции общего назначения

Вы можете отобразить состояние любой переменной. Массива или же объекта


системы посредством функции d($variable)

Для отправки сообщений в формате HTML вы можете использовать функцию


send_mail($mail_to, $mail_from, $subject, $message, $charset).

Страница 49 из 57 SAPID CMS (sapid.sourgeforce.net)


13 Сообщество и поддержка

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


осуществляется по адресу http://en.sapid-club.com/

Поддержка проекта SAPID, обмен мнениями для русскоязычной аудитории


осуществляется по адресу http://ru.sapid-club.com/

Вы можете принять участие в разработке CMS SAPID присоединившись к


проекту http://sourceforge.net/projects/sapid/

Задача Адрес

Замечания об ошибках http://sourceforge.net/tracker/?atid=680099&group_id=118100&func=browse

Запросы на техническую http://sourceforge.net/tracker/?atid=680100&group_id=118100&func=browse


поддержку

Архив «заплаток» http://sourceforge.net/tracker/?atid=680101&group_id=118100&func=browse

Запросы на разработку http://sourceforge.net/tracker/?atid=680102&group_id=118100&func=browse


новых возможностей

Публичная документация http://sourceforge.net/docman/?group_id=118100

Список рассылки http://lists.sourceforge.net/lists/listinfo/sapid-community

И вы можете свободно обмениваться интерфейсными решениями для сайтов


через общественную библиотеку XML Sapiens Work Gallery
(http://xmlsapiens.org/lib/)

13.1 Интернет-пейджер SAPID

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


имеется кнопка «Пейджер». Она вызывает интерфейс обмена мгновенными
сообщениями в рамках сообщества пользователей SAPID.

При первом входе в интерфейс «Пейджер» система предложит вам


зарегистрироваться. Вы сможете завести себе системное имя и внести краткую
информацию о вас для сообщества пользователей SAPID. Эта информация
будет сохранена на вашем сервере и при входе в режим администрирования вы
будете также авторизованы в «Пейджере». Теперь интерфейс пейджера
включает меню переключения каналов Русский/Английский, доску сообщений
«Пейджера», поле для ввода вашего сообщения (допускается прикрепление
файла к сообщению) и список возможных адресатов.

При добавлении сообщения, оно будет отображено в выбранном канале


общения. Если вы желаете передать приватное сообщение одному или
нескольким адресатам, выберите их в списке адресатов.

Страница 50 из 57 SAPID CMS (sapid.sourgeforce.net)


14 Импорт проекта

Изучая предложения open source, задумывались ли вы над тем, что хорошо


было бы просто взглянуть на свой сайт под какой-либо конкретной CMS и уже
тогда сделать свои выводы? Однако переносить содержание со своего сайта в
новую CMS занятие трудоемкое. Хотелось бы просто сказать CMS: “Сделай
это сама!» и откинуться на спинку стула с удовлетворением наблюдая за
процессом. А если ваш сайт имеет специфичную структуру, а если он
статичен? Но если уж о чем-либо мечтать, то никаких ограничений быть не
может. Если вы используете SAPID у вас их и не будет.

Итак, миграция данных со старого сайта на новый, создаваемый под


управлением CMS SAPID. Возможно ли это? Вы можете проверить сами.
Начиная с версии 1.1.1 в SAPID добавлена утилита для транспортировки
данных между сайтами. Для того, что бы обратиться к ней наберите
http://ваш_сайт/migrator.php

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


начала миграции. Стоит также указать учтена ли в адресах страниц исходного
сайта иерархия (раздел1/подраздел11/подраздел111/). Если вы желаете, что бы
изображения со страниц исходного сайта были также перенесены, укажите об
этом в данном интерфейсе. В дистрибутиве SAPID в качестве примера поля
заполнены для персонального сайта Луи Розенфельда (Louis Rosenfeld ),
известного своими публикациями об информационной архитектуре.

Далее нам следует выделить в исходном сайте все различные по структуре


группы страниц. Скажем для примера, выделены три группы страниц для сайта
Луи Розенфельда. Мы можем перейти в интерфейс Template settings и создать
шаблоны для новой инкарнации этих страниц. Что же будет в шаблонах? На
типовой странице из группы исходного сайта мы выделяем блоки содержания
для переноса. Скажем, у нас есть заголовок, ремарка и основное содержание.
Значит, следует в HTML шаблона расставить указатели на эти данные:

<sapi:apply name="qc.title.value" type="string" />


<sapi:apply name="qc.content.value" type="publication" />

Теперь следует назначить правила выборки содержания со страниц исходного


сайта. Переходим по пиктограмме «Edit template configuration» напротив
созданного нами шаблона и указываем маску для идентификации этого
шаблона. Это значит, что мы должны выделить блок HTML уникальный для
данной группы страниц и внести его в соответствующее поле. Далее мы задаем
маски для блоков содержания. Достаточно указать идентифицирующий
фрагмент кода до блока содержания и после его. Например, для выборки
заголовка страницы можно использовать:
1) <title>
2) </title>

Что же, теперь осталось лишь выбрать кнопку Migrate! В вертикальном меню и
дождаться результатов миграции

Страница 51 из 57 SAPID CMS (sapid.sourgeforce.net)


Рисунок 9. Общие настройки миграции данных

Рисунок 10. Настройки шаблонов для миграции

Страница 52 из 57 SAPID CMS (sapid.sourgeforce.net)


Замечание:
Для использования миграции данных потребуется установить Add-on пакет
migrator.tar.gz (https://sourceforge.net/project/showfiles.php?
group_id=118100&package_id=154910)

15 Экспорт проекта
Если вы пожелаете создать статичный архив вашего сайта, наберите в адресной
строке браузера http://мой_сайт/convertor.php.

Вам будет предложено преобразовать ваш сайт в один из трех форматов:

HTML-файлы в одной папке


HTML-файлы, разнесенные по папкам в соответствии со структурой
PHP-файлы, разнесенные по папкам в соответствии со структурой
XML-файлы данных и структуры в одной папке
В первом случае также будут созданы индексные файлы для дальнейшей
конвертации сайта с помощью HTM2CHM
(http://www.handyarchive.com/free/htm2chm/) в популярный формат Windows
Help.

Замечание:
Для использования миграции данных потребуется установить Add-on пакет
convertor.tar.gz (https://sourceforge.net/project/showfiles.php?
group_id=118100&package_id=154910)

16 Синдикация данных

Как известно, обмен между различными сайтами отдельными блоками


содержания затруднен из-за структурных различий документов различных
сайтов. Существует унифицированный и ныне популярный формат для обмена
данными между сайтами – RSS. В дистрибутивном пакете SAPID имеется два
модуля (DDC), демонстрирующих использование этого формата:
show_rss – вывод новостной ленты в формате RSS
get_rss – прием новостной ленты в формате RSS

В DDC show_rss мы запрашиваем у функции CMS get_news() данные


новостной ленты ‘news.xml’:
get_news('news.xml')

Далее мы форматируем вывод данных в RSS.

В DDC get_rss мы используем функцию CMS get_rss(), которая обращается к


RSS-каналам по заданным ссылкам и возвращает массив заголовков.

Страница 53 из 57 SAPID CMS (sapid.sourgeforce.net)


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

17 Поисковая оптимизация сайта

В Интернете достаточно материалов по оптимизации сайтов для поисковых


систем (SEO) и повторять их в данной документации не имеет смысла. Однако,
стоит сказать несколько слов оптимизации сайта в SAPID. Подавляющее
большинство поисковых систем с высоким приоритетом относятся к фразам,
размещенном в элементе HTML TITLE. Если фраза в TITLE проработана
должным образом и соотносится с содержанием документа, то при поиске этот
документ попадет в начало списка результатов. Это означает больший приток
посетителей на ваш сайт из поисковых систем.

Вы можете назначать МЕТА-теги, включая заголовоки (TITLE) документов в


разделе меню «Мета-данные документа» нижней части панели
администрирования при редактировании содержания документа. Однако
следует указать в шаблоне документа запросы мета-данных:

<title><sapi:apply name="qc.metatitle.value" type="string"


/></title>
<meta name="description" sapi:content="qc.metadescription.value">
<meta name="keywords" sapi:content="qc.metakeywords.value">

В остальном следуйте рекомендациям специализированных изданий по


поисковой оптимизации. Вот некоторые из них:

• Search Engine Watch - Tips About Internet Search Engines & Search Engine
Submission
• Pandia.com - the latest search engine news
• Search Engine Marketing 101 - an optimization and promotion tutorial
• Search Engine Showdown - The Users' Guide to Web Searching
• SearchEngines.com - Search Engine Resource Center
• Search Engine World
• SearchUtilities - All about search engines, web promotion
• WebPosition Gold Page Critic Help
• Internet Business Promoter - keyword density analyzer , the search engine
submission software tool and the search engine ranking reporter.
• Search Engine Marketing Guide
• Clickz.com - Search Engine Marketing Articles And Reviews
• Win the Search Engine Game
• Search Engines Search - search for search engines
• Web Search - Search Engines, Directories and Finding Information on the Web
• Free search engine articles on search engine marketing
• Keyword Resources
• The Free Search Engine Academy
• The Marketleap Report
• Web Site Positioning Resource Center
• Web Marketing Information Center
• Articles of Internet Marketing

Страница 54 из 57 SAPID CMS (sapid.sourgeforce.net)


• WordSpot - detailed review of products, services, tips and techniques that relate to
how keywords and search terms are used for marketing.
• Internet Search Engine Database

Источник: www.promo.by

Рисунок 11. Поисковая оптимизация документа

17.1 Анализатор SEO

При вызове интерфейса «Мета-данные документа», кроме редактирования


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

18 Термины

Термин Описание

Состояние редактирования состояние, когда нажата кнопка «РЕДАКТИРОВАТЬ» на панели сотояния

Состояние просмотра состояние, когда нажата кнопка «ПРОСМАТРИВАТЬ» на панели сотояния

Страница 55 из 57 SAPID CMS (sapid.sourgeforce.net)


Административный режим Режим, когда поьлзователь авторизирован как администратор (area51)

Режим доставки Режим, когда пользователь (посетитель) неавторизован на сайте

QC (контейнер запросов) Редактируемый фрагмент содержания

SDC (контейнер Статический код, общий для группы документов


статических данных)

DDC (контейнер Динамический код, зависящий от заданного алгоритма


динамических данных)

Модуль См. DDC

CMS-приложение Функция PHP (расположеа водноименном скрипте в папке usr/extensions/),


которая возвращает в DDC ряды запрашиваемых данных.

Функция См. CMS-приложение

Инфоканал Информационная структура, состоящая из ряда записей, каждая из


который является самостоятельным документом.

Запись инфоканала Документ с виртуальным адресом. Виртальная часть адреса


идентифицирует запись в списке инфоканала.

Информациолнной Множество сайтов, объединенных общей тематикой или владельцем


пространство

Языковая версия Сайт информационного пространства, с содержанием на определенном


языке

Сайт Множество документов

Документ Ресурс, имеющий свой уникальный Интернет-адрес

Объекты документа Шаблон, QC, DDC, SDC

Шаблон Код шаблона оформления документа

Адресная строка HTTP-адрес документа

Навигационная часть Часть адреснной строки после раделителя DATA. Эта часть не учавствует
адресной строки в идентификации документа

19 Ссылки
[1] T. Bray, et al, Extensible Markup Language (XML), W3C Proposed
Recommendation 10-February-1998, REC-xml-19980210, February 10, 1998,
http://www.w3.org/TR/REC-xml.
[2] XML Sapiens 1.1 SE specification, http://xmlsapiens.org/spec/, 2004.
[3] SAPID CMS Project, http://sapid.sourceforge.net, 2004
[4] SAPID-CLUB Forum, http://en.sapid-club.com
[5] B. Bos, H. W. Lie, C. Lilley, I. Jacobs, Cascading Style Sheets, level 2, CSS2

Страница 56 из 57 SAPID CMS (sapid.sourgeforce.net)


Specification. W3C Recommendation 12-May-1998,
http://www.w3.org/TR/RECCSS2/.
[6] J. Clark and S. Deach, eds, Extensible Style Language (XSL), W3C Proposed
Recommendation, 12 January 2000. http://www.w3.org/TR/xsl.
[7] J. Clark, XSL Transformations (XSLT), W3C Recommendation 16 November
1999,
http://www.w3.org/TR/xslt.
[8] XML Sapiens PHP Processor 1.0, http://sapiprocessor.sourceforge.net/, 2005
[9] Metatorial Inc. – Concepts, http://metatorial.com/conceptarchive.asp
[10] Publications of Gerry McGovern,
http://www.gerrymcgovern.com/publications.htm
[11] CMSWath.com, http://cmswatch.com

Страница 57 из 57 SAPID CMS (sapid.sourgeforce.net)