Содержание
Список иллюстраций
Список таблиц
Аннотация
Система Cairo предоставляет возможность создавать сложные структуры данных и управлять ими. Такие структуры состоят из множества типов сущностей. Типы связываются между собой отношением "родитель-ребенок", что позволяет четко определить каркас информационного ресурса.
Для создания информационного ресурса необходимо иметь возможность создавать виртуальные хосты и базы данных, а также иметь возможность работать с файлами на сервере. Одна установленная версия системы может поддерживать несколько ресурсов различного масштаба и сложности. Далее подробно рассматривается пример создания ленты новостей. Этот пример позволит продемонстрировать основные возможности системы и подходы, используемые при создании веб-ресурсов на базе Cairo.
В случае, если используется демонстрационная версия Cairo или версия для разработчика, то адреса всех веб-ресурсов, разрабатываемых на базе платформы Cairo, должны иметь суффикс доменного имени ".cairo" (например, "www.sample.cairo"). Если же используется базовая версия Cairo, то может возникнуть необходимость получить лицензию на дополнительный ресурс. Подробнее об этом написано в документе "Система управления контентом CAIRO: Активация системы и получение лицензий на дополнительные ресурсы данных".
В тестовом примере будут использоваться два виртуальных хоста. Один для системы администрирования, другой - для общедоступного веб-интерфейса. Параметры виртуальных хостов описаны в таблице.
Таблица 1. Виртуальные хосты, используемые в примере
Адрес хоста | Каталог Document Root | Описание |
---|---|---|
www.sample.cairo | /var/www/www.sample.cairo | Сайт, на котором будет выведена создаваемая лента новостей. |
admin.sample.cairo | /var/www/admin.sample.cairo | Система администрирования. |
Настройки, указанные в таблице, приведены в качестве примера. В настройках сервера необходимо указать путь, по которому установлена Cairo на конкретном сервере.
На данном этапе подразумевается, что в системе установлен интерфейс администратора
Cairo. Необходимо добавить в него новый ресурс. Для этого создадим новую
базу данных sample
и импортируем в нее файл
/dump/cairo-dummy.sql
, который входит в дистрибутив
системы. Добавим в файл /etc/login.ini
раздел с
описанием параметров ресурса:
[Sample] dbhost = localhost dbuser = cairo dbpasswd = some_password dbname = sample dbcharset = dbversion = <Версия сервера БД> authhost = admin.sample.cairo basedir = /var/www/admin.sample.cairo uploaddir = /var/www/www.sample.cairo/var/uploaded cachedir = /var/www/www.sample.cairo/var/cache frmtext_files = /var/frmtext-files httphost = www.sample.cairo locale = ru_RU.CP1251 auth_user = auth_group =
В файле /etc/login.ini
приведенные параметры ресурса следует заменить на те, которые соответствуют реальному серверу.
В данном руководстве будет создан простейший информационный ресурс - "Лента новостей", поэтому его структура будет содержать всего два типа сущностей: "Новость" и "Лента новостей". Тип сущности "Лента новостей" имеет одно поле - "Название". Тип сущности "Новость" включает следующие поля:
Дата добавления;
Заголовок;
Изображение;
Аннотация;
Полный текст.
Для получения доступа к интерфейсу администратора Cairo необходимо
авторизироваться. Откройте в браузере URL
http://admin.sample.cairo/
. В появившейся форме авторизации следует ввести
следующие данные:
Имя пользователя: root
Пароль: admin
В выпадающем списке "Ресурс" выбирается название ресурса. После авторизации откроется стартовая страница веб-интерфейса.
Разработка любого нового ресурса начинается с пункта меню
. Нажав на него, можно получить доступ к модулю управления типами сущностей. Здесь можно создавать новые типы, редактировать старые и организовывать связи между ними.Перейдите в раздел
и нажмите на кнопку . Появившаяся форма позволяет определить основные параметры нового типа. Заполните поля формы в соответствии с рисунком ниже.После создания типа сущности выводится страница этого типа. Теперь определим набор полей новости. Нажав на кнопку
переходим на форму добавления поля.Для примера будет использоваться набор полей, описанный в таблице ниже. Необходимо добавить все описанные поля и заполнить указанные параметры. Впоследствии можно расширить или сократить данный набор полей по собственному усмотрению.
Таблица 2. Параметры сущности "Новость"
Псевдоним поля | Дата | Заголовок | Изображение | Аннотация | Полный текст |
Имя поля | news_date | title | image | topic | news_text |
Тип поля | date | string | image | text | frmtext |
Формат поля | ZvenoSimple | ||||
Значение по умолчанию | time() | ||||
Важность поля | обязательное | обязательное | необязательное | обязательное | необязательное |
Может выводится в списке | Да | Да | Да | Да | Нет |
В списке по умолчанию | Да | Да | Да | Нет | Нет |
Тип сортировки | По убыванию | ||||
Входит в заголовок | Нет | Да | Нет | Нет | Нет |
Подробнее о параметрах полей можно узнать в документах: "Система управления контентом CAIRO: Руководство разработчика" и "Система управления контентом CAIRO: Справочное руководство по API".
Определив все поля сущности "Новость", перейдем к созданию ленты новостей. Для этого снова воспользуйтесь ссылкой
и нажмите на кнопку .Тип "Лента новостей" создадим с именем таблицы
"class_news_line"
. Обязательно отметьте флаг
"Появляется в главном меню". Этот флаг указывает,
что ссылки на страницы сущностей типа "Лента новостей" будут доступны в
главном меню раздела .
Теперь создадим для типа сущностей "Лента новостей" обязательное
строковое (string) поле "Название"
с именем в
таблице "title"
. Не забудьте установить флаг
вхождения данного поля в заголовок сущности.
В результате система содержит два типа сущностей, которые пока не связаны друг с другом. Для завершения процесса создания структуры данных демонстрационного ресурса осталось установить связь между ними, а именно указать, что лента новостей может содержать новости. Для этого заходим на страницу типа "Лента новостей" и нажимаем на кнопку "Допустимые для вложения типы". Заполните поля формы в соответствии с рисунком ниже.
в блокеТеперь сущности типа "Новость" могут вкладываться в сущности типа "Лента новостей". Другими словами, в тип сущности "Лента новостей" была добавлена точка вложения "Новости" .
На данном этапе уже определены типы сущностей ресурса и связи между ними. Теперь создадим первый экземпляр типа "Лента новостей".
Для создания ленты новостей необходимо перейти на страницу типа сущности "Лента новостей" и нажать на кнопку
. В появившейся форме введите название ленты новостей, например "Новости мира CMS", и сохраните данные. Так как при создании типа "Лента новостей" было указано, что сущности этого типа могут появляться в главном меню, то ленты новостей, являющиеся корневыми сущностями, будут доступны через пункт меню .Если необходимо создать дополнительные ленты новостей, то это можно сделать, воспользовавшись кнопкой
на странице типа "Лента новостей". Все ленты новостей появятся в меню .После выполнения указанных операций получен работающий интерфейс для управления лентами новостей. В следующем разделе будет показано как, используя библиотеки Cairo, создать сайт, на котором пользователи смогут читать новости.
В предыдущем разделе была создана информационная структура
веб-ресурса. Ниже будет описан процесс создания сайта, предназначенного для вывода данных,
добавленных через интерфейс администратора Cairo. Для этого нам
понадобится архив cairo-project-x.x.x.tar.bz2
,
который входит в дистрибутив системы.
Создадим ресурс, состоящий из двух скриптов. Первый будет выводить список новостей, а второй - страницу новости. Для получения информации о новостях будем использовать классы, предоставляемые платформой Cairo.
Настройка параметров веб-ресурса аналогична настройке интерфейса
администратора Cairo (см. документ "Система управления контентом CAIRO:
Установка и настройка"). В настройках каталогов необходимо прописать те
же параметры, что и для универсального интерфейса администратора, за
исключением параметров general.basedir
,
general.tmpdir
, general.skindir
,
general.etcdir
, general.cachedir
и
general.uploaddir
, которым присваиваются адреса
соответствующих каталогов. Кроме того, в дополнительном разделе
database
определяются параметры базы данных. В
результате файл /etc/core.ini
должен выглядеть
следующим образом:
;############################################################################# ;## Общие настройки системы ;############################################################################# [general] ; Каталог, в который установлена система general.basedir = /var/www/www.sample.cairo ; Каталог временных файлов general.tmpdir = /var/www/www.sample.cairo/tmp ; Каталог библиотек general.libdir = /var/www/admin.sample.cairo/usr/lib ; Каталог ядра системы general.coredir = /var/www/admin.sample.cairo/core ; Каталог, содержащий модули general.moddir = /var/www/admin.sample.cairo/usr/modules ; Каталог, содержащий классы полей general.fieldsdir = /var/www/admin.sample.cairo/usr/fields ; Каталог, содержащий альтернативные классы сущностей general.entdir = /var/www/admin.sample.cairo/usr/entities ; Каталог, содержащий темы оформления general.skindir = /var/www/www.sample.cairo/usr/skins ; Каталог Элементов управления general.widgetdir = /var/www/admin.sample.cairo/usr/widgets ; Каталог, содержащий Javascript ; Используется путь относительно корня ресурса, так как ; JavaScript используется только в шаблонах general.jsdir = /usr/javascript ; Каталог настроек general.etcdir = /var/www/www.sample.cairo/etc ; Каталог кэша general.cachedir = /var/www/www.sample.cairo/var/cache ; Каталог загруженных на сервер файлов general.uploaddir = /var/www/www.sample.cairo/var/uploaded ; Текущий скин general.skin = default ; Пути поиска файлов (одной строкой) general.paths = /var/www/admin.sample.cairo/core,/var/www/admin.sample.cairo/usr/lib, /var/www/admin.sample.cairo/usr/modules,/var/www/admin.sample.cairo/usr/modules, /var/www/admin.sample.cairo/usr/fields,/var/www/admin.sample.cairo/usr/widgets ; Часовой пояс клиента general.gmt.client = +0200 ;############################################################################# ;## Настройки интернационализации ;############################################################################# [locale] ; Язык локали по умолчанию locale.LANG = ru_RU.CP1251 ;############################################################################# ;## Настройки режима отладки ;############################################################################# [debug] ; Показывать ли ошибки PHP debug.show_php_errors = on ; Вывод статистики после генерации страницы debug.show_stat = off ; Выводить ли расширенную статистику по SQL-запросам debug.sql_stat = off ; Выводить ли ошибки, если они появились при генерации страницы debug.show_runtime_errors = on ;############################################################################# ;## Настройки изображений ;############################################################################# [image] ; Ширина эскизов изображений image.thumb_width = 76 ; Высота эскизов изображений. ; Если установить значение 0, то высота будет вычисляться автоматически image.thumb_height = 0 ; Способ, которым будут создаваться уменьшенные копии изображений ; Допускаются два значения: ; - ImageMagic ; - GD ; По умолчанию используется GD image.thumb_handler = GD ; Версия GD ; Необходимо заполнить только в случае, если используется ; библиотека GD image.gd_ver = 1.6.2 ; Путь к ImageMagick'у image.convert = ;############################################################################# ;## Настройки файлов ;############################################################################# ; Ширина иконок файлов file.icon_width = 16 ; Высота иконок файлов. file.icon_height = 16 ;############################################################################# ;## Настройки электронной почты ;############################################################################# [mail] mail.host = localhost mail.from = "robot@sample.cairo" mail.webmaster = "admin@sample.cairo" ;############################################################################# ;## Настройки базы данных ;############################################################################# [database] database.host = localhost database.user = cairo database.passwd = some_password database.name = sample database.charset = database.version = ;############################################################################# ;## Настройки интерфейса ;############################################################################# webface.title = "" ; Страницы будут сжиматься webface.gzip = on ; Кэшировать ли данные на стороне клиента webface.cache.client = on
Подробнее о назначении настроек можно прочитать в документе "Система управления контентом CAIRO: Файлы конфигурации".
Страница списка новостей строится на основе класса
CEntityList
, который позволяет получать список
сущностей. Для простоты будем выводить простой список без использования
постраничности, календарей и другой функциональности, присущей новостным
лентам.
В каталоге /var/www/www.sample.cairo/bin
уже
есть файл home.php
. На него ссылается корень сайта.
Весь код, относящийся к выводу списка сущностей, будет реализован именно
в нем.
В первую очередь необходимо подключить компоненты, которые будут использоваться в системе:
Через веб-интерфейс администратора Cairo получаем информацию об идентификаторе типа сущности "Новость" и идентификаторе связи новостной ленты и новости. Подробнее о том, какую служебную информацию и каким образом можно получить через интерфейс администратора Cairo смотрите в документе "Система управления контентом CAIRO: Интерфейс администратора". Если информация о типах сущностей вводилась в порядке, соответствующем описанному в данном руководстве, то оба идентификатора будут равны "1". Используя эту информацию, получаем список новостей.
В списке будет выводиться заголовок новости, изображение, дата, и
аннотация. Перечень этих полей указан в первом параметре метода
get_list()
. Затем необходимо сформировать
массив полей, выводимых в списке и ассоциативный массив новостей.
Далее формируем массив, который будет содержать только ту информацию о новостях, которая будет выводиться на странице.
В результате весь скрипт получения списка новостей будет выглядеть следующим образом:
Теперь остается только подключить шаблон страницы. Шаблон представляет собой HTML-файл со вставками PHP-кода. При желании, можно использовать любой имеющийся шаблонизатор, платформа Cairo не налагает ограничений на используемую систему шаблонизации.
Следует обратить внимание на то, каким образом выводится изображение новости. Платформа Cairo поддерживает возможность быстрого создания кэшируемых эскизов изображений. Подробную информацию о соответствующих возможностях можно найти в разделе "Создание эскизов изображений" документа "Система управления контентом CAIRO: Руководство разработчика".
Создание страницы списка новостей завершено. Результат
можно увидеть в браузере по адресу
http://www.sample.cairo/
.
На следующем этапе будет создана страница новости.
На странице новости будет выводиться заголовок новости, полный текст и изображение новости, если таковое присутствует.
В первую очередь следует создать файл
/var/www/www.sample.cairo/bin/news.php
. Он будет
содержать код, реализующий страницу новости. Для работы с новостями
понадобится класс CEntity
, который позволяет
получать информацию о сущности, используя ее идентификатор.
Для получения информации о сущности достаточно создать экземпляр
класса CEntity
с переданным конструктору
идентификатором сущности.
В целях безопасности скрипт запрещает передавать пустой параметр и
проверяет формат переданных данных. После создания сущности объект
$o_news
содержит все параметры, настройки типа и
полей. Далее подключается шаблон для вывода страницы сущности и
обрабатываются появившиеся ошибки. Весь скрипт получения информации о
новости выглядит следующим образом:
Осталось только создать шаблон для вывода новости. В отличие от страницы списка новостей, здесь изображение будет выводиться в его натуральную величину.
Если все операции были выполнены правильно, то в результате должна получиться простая лента новостей. Это лишь небольшой пример, показывающий основные принципы работы с платформой Cairo. Возможности примера можно расширить самостоятельно. Так, можно добавить дополнительные ленты новостей и организовать навигацию по ним, модифицировать набор полей новости и т.д. Данная лента новостей может быть использована как часть более крупного ресурса.