1 М.В. Булгаков, В.П. Носов Создание образовательных интернет-порталов с использованием системы управления динамическим сайтом iPHPortal Аннотация Рассматриваются методические вопросы использования разработанной в ГНИИ ИТТ "Информика" свободно распространяемой модульной системы управления динамическим сайтом iPHPortal ™ для создания образовательных порталов федерального уровня и сайтов образовательных учреждений. В 2003 году система была использована в трех новых федеральных образовательных порталах. 1. Введение Система управления динамическим сайтом iPHPortal ™ http://phportal.informika.ru представляет дистрибутивный набор (оболочку) для создания информационных динамических сайтов и порталов образовательного профиля. Система представляет набор PHP скриптов и утилит, она функционирует вместе со свободно распространяемыми продуктами Apache, PHP, MySQL, mnoGoSearch в среде UNIX (Linux, FreeBSD) или Microsoft Windows Me/2000/XP. Система относится к классу свободно распространяемого программного обеспечения c открытым исходным кодом. Система включает ядро, реализующее базовый набор функциональных возможностей, подключаемые и модули, реализующие дополнительные функциональные возможности. Пользовательский интерфейс системы реализуется с использованием шаблонов. производительность и Архитектура масштабируемость ядра системы, обеспечивает не высокую уступающую таким продуктам как IBM WebSphere Portal и Sun ONE Portal. Важной особенностью iPHPortal является возможность формирования библиотеки дополнительных функциональных модулей, взаимодействующих с ядром системы по определенным интерфейсам. В составе iPHPortal имеются утилиты, обеспечивающие возможность выгрузки и подключения библиотечных 2 модулей. При этом библиотечные модули хранятся в виде XML файлов, архивированных в формате ZIP. Каждый модуль реализует определенную функциональность, административный (редакторский) и пользовательский интерфейс с соответствующим набором шаблонов для формирования HTML страниц. От известных аналогичных решений http://phpclub.ru/?m=app&s=24 iPHPortal отличают следующие особенности: - ориентация на работу в рамках системы образовательных сайтов и порталов; - наличие механизма подключения дополнительных функциональных модулей; - полнофункциональный механизм использования шаблонов при реализации пользовательского интерфейса. Сайты, использующие систему состоят из 3 взаимосвязанных частей: 1. База данных 2. Административный интерфейс (бэкофис) 3. Внешнее представление сайта (фронтофис) В базе данных хранится структура и материалы сайта, информация интерактивов и служебная информация необходимая для работы системы. Изображения (сопровождающие картинки материала и т.д.) хранятся в файловой системе. Функции бэкофиса: 1. Изменение структуры и информационного наполнения сайта 2. Работа с шаблонами и обработчиками 3. Модерирование интерактивов всех типов 4. Управление пользователями и правами пользователей Бэкофис (раздел сайта) используют только пользователи, управляющие сайтом. Для доступа к бэкофису требуется браузер Microsoft Internet Explorer версии 5.0 или выше. Внешний вид фронтофиса задается шаблонами и может бы оптимизированным под определенный браузер или быть независимым от браузера. Система может быть рекомендована для использования при создании сайтов образовательных учреждений и образовательных порталов. В 2003 году с использованием iPHPortal реализованы: - официальный сайт Минобразования России www.ed.gov.ru 3 - специализированный портал по информационным и коммуникационным технологиям в образовании www.ict.edu.ru - специализированный портал по дополнительному образованию детей www.vidod.edu.ru - специализированный портал "Международное образование" www.international.edu.ru В первом квартале 2004 года ожидается опытная реализация iSchool ™ свободно распространяемого типового сайта для общеобразовательных учреждений на базе iPHPortal ™, включающая интерактивный инсталлятор. 2. Основные возможности системы Основные функциональные возможности, реализуемые ядром iPHPortal: - создание и редактирование групп пользователей, назначение прав для групп пользователей; - аутентификация пользователей; - формирование и редактирование иерархической системы рубрик (разделов) сайта; - формирование и редактирование одностраничных и многостраничных гипертекстовых материалов в HTML формате (книги, статьи, новости, вопросы и ответы) c помощью визуального или текстового редактора, передача на сервер (upload) сопутствующих файлов (иллюстрации, документы и т.п.), автоматическое и интерактивное формирование атрибутов материалов (дата, автор, название, анонс, сопутствующие файлы иллюстраций, отнесение к рубрикам, позиции рубрикаторов и т.д.); - администрирование и редактирование интерактивов (отзывы, голосования, гостевые книги); - формирование статических страниц материалов по контенту и шаблонам; - выгрузка и загрузка дополнительных модулей. 4 2.1. Управление структурой сайта В системе сайт рассматривается как дерево рубрик (директорий), в рубриках размещаются материалы или различные интерактивы (рис.1). Все рубрики (директории) и материалы (файлы) предгенерируются на сайт. Рисунок 1. Дерево рубрик сайта 2.2. Публикация материалов Для каждой рубрики можно создавать отдельный тип материалов. Для каждого типа определяются необходимые поля редактирования. Их можно выбрать из набора стандартных полей (заголовок, анонс, текст, картинка, фотогалерея, сопровождающий файл и т.д.), либо создать специальные поля. Материалы предгенерируются в файлы, что снижает нагрузку на базу данных. Текст материала может редактироваться двумя способами. Первый - в редакторе, например MS Word ™ или MS Front Page ™, в котором возможно добавлять таблицы, ссылки и изменять параметры шрифта без знания HTML. Второй способ - обычный текстовый редактор. Текстовый редактор удобен тем, что загружается гораздо быстрее визуального, но для форматирования материала в этом случае нужно быть знакомым с языком разметки HTML. 5 Рисунок 2. Визуальный редактор Адрес сайта и адрес страницы сайта (URL) появляется на пользовательском экране одновременно с дизайном и контентом. Поэтому адрес является полноправной частью сайта. В iPHPortal используется адресация разделов и страниц, допускающая смысловую нагрузку, например /books/biology/basics.html. Такая адресация более удобна для пользователя, чем числовая, например /books/biology/3425.html, где идентификатор 3425 формируется автоматически при создании материала. Существует также функциональность “cтатические файлы” – это возможность загружать файлы в отдельную для каждого материала директорию, при отображении к содержанию статического файла добавляется header (шапка) и footer (подвал). Адресуются статические файлы по адресу материала. Например, материал статический имеет файл url http://site.ru/lib/programming/java/thinking-in-java/, contents.html для этого материала будет иметь тогда адрес http://site.ru/lib/programming/java/thinking-in-java/contents.html. Для адресации такого вида используется модуль mod_rewrite веб-сервера Apache. 6 2.3. Управление пользователями и разделение полномочий пользователей на разделы сайта и отдельные функциональности Пользовательская система состоит из пользователей и групп пользователей. Право пользователю может быть выдано на определенную функциональность (например, “Управление голосованиями”) или на определенную объект (например, право “Автор материала” на рубрику “Новости” или право “Модератор форума” на форум “Основной”). Рисунок 3. Права группы пользователей Рисунок 4. Объекты “Рубрика” права группы пользователей 7 Рисунок 5. Объекты “Форум” права группы пользователей 2.4. Разделение логики генерации материалов и дизайна (шаблонов) Страницы (файлы) сайта генерируются с помощью пары “обработчик” (handler) и “шаблон” (template). Обработчик – это функция языка PHP, в которой извлекаются нужные данные из БД, создается и наполняется объект “Шаблон”. Шаблоны создаются на языке директив шаблонного “движка”. Тексты обработчиков и шаблонов сохраняются в базе данных и предгенерируются в файлы (для ускорения работы шаблонного “движка”). 2.5. Возможность подключения модулей Система имеет модульную структуру. Модуль поставляется в виде одного xml-файла, файл создается автоматически при “экспортировании” модуля. Модульная структура позволяет создать библиотеку модулей для использования на сайтах системы образовательных порталов. Наличие готовых решений позволяет значительно снизить время и затраты на создание новых сайтов. Созданные модули (декабрь 2003 года): Модуль Описание Баннеры Позволяет создавать специальные блоки на сайте, в которых динамически показываются произвольные изображения и тексты 8 Каталог образовательных ресурсов Модуль предназначен для создания (GEM) каталога ресурсов, совместимого с каталогом федерального портала "Российское образование" www.edu.ru (формат GEM). Реализуется импорт и экспорт метаописаний. Каталог образовательных ресурсов Модуль реализует каталог ресурсов в (LOM) формате IMS LOM (экспериментальный вариант). Реализуется импорт и экспорт метаописаний. Конференции Модуль поддержки off-лайновых и проведения on-лайновых конференций Форумы Система форумов на сайте Гостиные Гостиные с ведущим в стиле "вопрос ответ" Гостевые книги Возможно создание гостевых книг, рубрик "вопрос-ответ Голосования Проведение опросов посетителей сайта RSS-экспорт Экспорт анонсов материалов (новостей) в формате RSS Архив материалов Архив материалов по годам и месяцам Поиск Поиск материалов на сайте Тесты Тестирование посетителей сайта Регистрация пользователей Регистрация и редактирование данных пользователей (фронтофис) с отнесением к группам с индивидуальным набором прав для каждой группы. 3. Принципы работы системы Страницы (файлы) сайта генерируются с помощью пары “обработчик” (handler) и “шаблон” (template). Обработчик – это функция языка php, в которой извлекаются нужные данные из БД, создается и наполняется объект “Шаблон”. 9 Шаблоны создаются на языке директив шаблонного “движка”. Тексты обработчиков и шаблонов сохраняются в базе данных и предгенерируются в файлы (для ускорения работы шаблонного “движка”). Из пары обработчик + шаблон(ы) создаются “страницы” (в странице может быть больше одного шаблона, например при генерации статьи на сайте может использоваться один обработчик и два шаблона – шаблон материала и шаблон версии для печати), действия и “типы рубрик”. Для “страницы” определяются опции редактирования рубрики/материала в бэкофисе – опции могут быть назначены отдельно для страницы и для всего сайта. Созданные “страницы” связываются с рубриками – страница для индекса рубрики и страница для материалов рубрики. Созданный шаблонным движком страница индекса рубрики или материал сохраняется в файл (предгенерируются), либо сразу выводится на экран. В сохраненном в файл коде используются директивы php и поэтому расширение предгенерируемых файлов должно быть настроено в конфигурационном файле Апача как обрабатываемое PHP. В ядре системы заложены функции управления пользователями и правами пользователей, структурой сайта, разделения дизайна и информационного наполнения, управления различными типами материалов. Для ускорения работы используется предгенерация структуры сайта (директории) и “блочное” кэширование. В системе сайт представляется в виде дерева рубрик, при создании рубрики информация о ней записывается в БД и создается директория на вебсервере. Затем в этой рубрике через можно разместить материалы или модули (пользуясь административным интерфейсом), либо скопировать туда сторонние скрипты. Внешнее представление сайта определяется шаблонами. Шаблон состоит из html кода и директив шаблонного движка. С помощью директив в шаблон включаются блоки и создаются динамические блоки. ”Блочное” кэширование заключается в том, что при каждом обращении страница сайта собирается динамически, из статических и динамических фрагментов. Например, страница с материалом (статьей) состоит из нескольких блоков: • Блок с текстом материала - статический • Блок с логотипом сайта (header) – статический 10 • Блок с выводом случайного баннера – динамический • Блок с выводом формы голосования – динамический • Блок с информацией о создателях сайта (footer) – статический Материал предгенерируется в файл на сервере, в котором эти блоки собираются и выводятся пользователю. Сборка блоков производится функцией PHP require, т.е. директивы включения блоков шаблонного движка в результирующем файле заменяются вызовами функции require. Блоки (инклуды) могут быть 2 типов – предгенерированные и непредгенерированные. Предгенерированные блоки не содержат директив шаблонного движка. Их изменение не влечет за собой необходимости перегенерации страниц, созданные по шаблонам с включением этих блоков. Пример таких блоков – header (шапка), footer (подвал) сайта. Непредгенерированные блоки содержат в себе директивы шаблонного движка и при изменении блока перегенерируются страницы, созданные по шаблону с включением этого блока. Пример – блок с текстом материала. Такой принцип кэширования позволяет снизить нагрузку на сервер и уменьшить время отклика. Количество и организация блоков на странице зависит от шаблона, по которому генерируется материал и может изменяться в зависимости от дизайна сайта. Структура директорий сайта: / /docs/ - www директория сайта (варианты htdocs, www и т.п.) /include/ … другие директории Директория include может быть вложена в www директорию сайта. 11 Рисунок 6. Структура директорий сайта с установленной системой В директории docs/admin и include находятся файлы необходимые для работы системы. В поддиректориях директории docs/mages/ размещаются различные типы изображений. Остальные директории docs/*** созданы при создании структуры сайта. Назначение директорий: Директория Описание /docs/admin/ Cкрипты административного интерфейса. /docs/images/banners/ Баннеры (картинки, flash). /docs/images/material-gallery/ Картинки фотогалереи материала, для каждой галереи создается поддиректория, имя которой равно material_id материала. 12 /docs/images/material-images/ Картинки материалов. Картинки загружаются через ”визуальный” или “простой” редактор текста. /docs/images/material-thumb/ Сопровождающие картинки материалов. /docs/images/rubric-thumb/ Сопровождающие картинки рубрик. /include/ Содержит основной файл конфигурации сайта common.inc.php. /include/cache/ Файлы с кэшированными данными (права пользователя и т.д.). /include/class/ Файлы классов объектов системы управления сайтом. /include/conf/ Файлы конфигурации. /include/events/ Файлы событий и действий. /include/func/ Функции. /include/handlers/ Предгенерированные файлы обработчиков. /include/meta/ Предгенерированные файлы с METAданными материалов и рубрик. /include/templates/ Предгенерированные файлы с шаблонами. 4. Шаблоны Шаблоны для сайта создаются на основе имеющегося html-макета. Необходимо чтобы были html-макеты всех типов страниц сайта (индекс сайта, индекс рубрики, материал (статья) и т.п.). Для занесения шаблонов выберите пункт меню Генерация -> Шаблоны и затем “Добавить шаблон”. Шаблоны бывают четырех типов – шаблон страницы (этот шаблон можно выбрать при создании “страницы”), инклуд (include) - эти шаблоны включаются в шаблоны страницы, шаблон инклуда (используются при предгенерации элементов сайта, например меню, а также при выводе баннеров) и “версии шаблонов” – используются для создания изменяемых элементов страниц, например меню, которое изменяется в зависимости от рубрики. 13 Для удобства создания и дальнейшего изменения, при создании шаблонов сайта, общие логические элементы для страниц (например “хидер” (header), “футер” (footer), меню и т.п.) выделяются в “инклуды” (при занесении шаблона нужно выбрать “Тип шаблона” – “Инклуд”). В шаблоны страниц инклуды вставляются директивой <!-- INCLUDE BLOCK : код_шаблона --> Например, занесли шаблон - инклуд с названием “Меню” и кодом “menu” и шаблон страницы с названием “Материал” и кодом “material”. В то место текста шаблона страницы “Материал”, где должен быть текст инклуда нужно занести строку <!-- INCLUDE BLOCK : menu --> Место в шаблоне, где будет находиться некоторая строка, определяемая в обработчике - переменная шаблона, обозначается {имя переменной}. Например, в шаблоне материала, в месте, где будет находиться заголовок материала нужно поместить {material_title}. Если переменной шаблона в обработчике ставится в соответствие массив, до доступ к элементам массива реализуется так {имя переменной.ключ массива}, например {image.width}. Для создания динамических блоков используется директива <!-- START BLOCK : имя_блока --> …. Текст блока <!-- END BLOCK : имя_блока --> Содержание динамического блока не будет выводится, если в обработчике не будет выполнен метод $tpl->newBlock (‘имя блока’). Если метод вызывается несколько раз – текст блока выводится несколько раз. Динамические блоки используются для вывода списка некоторых элементов, например строк таблицы. Данные для динамических блоков заносятся в обработчиках. 14 Пример динамического блока: <table> <tr> <td>Название</td> <td>Количество</td> </tr> <!-- START BLOCK : row --> <tr> <td>{name}</td> <td>{quantity}</td> </tr> <!-- END BLOCK : row --> </table> Можно создавать вложенные динамические блоки. Пример вложенных динамических блоков: <table> <tr> <td>Название</td> <td>Количество</td> <td>Картинка </tr> <!-- START BLOCK : row --> <tr> <td>{name}</td> <td>{quantity}</td> 15 <td> <!-- START BLOCK : image --> <img src=”{image.url}” width=”{image.width}” height=”{image.height}”> <!-- END BLOCK : image --> </td> </tr> <!-- END BLOCK : row --> </table> Каждая директива шаблонного языка (INCLUDE BLOCK, START BLOCK и т.д.) должна быть на новой строке. В шаблоны можно добавлять код PHP, заключенный в <? ?>. Например <?= date (‘d.m.Y H:I’) ?> - для вывода текущей даты. Этот код будет вызываться динамически – т.е. в предгенерированном файле будут эти самые команды, и они будут вызываться при каждом просмотре. Эта возможность используется для включения динамических блоков в предгенерированные статические страницы. Для того чтобы динамические вставки правильно показывались при прямом выводе содержания страницы методом $tpl->printToScreen() объект шаблона нужно создавать, указывая во втором параметре ‘NO_INCLUDE’ $tpl = new TemplatePower($templates['main_template'],’NO_INCLUDE’); Если нужна возможность менять в title страниц и мета-теги то для их вывода используются директивы <!—TITLE Æ и <!—META Æ. Пример: 16 <html> <head> <title><!—TITLE --></title> <!—META --> </head> …. Для того чтобы вывелись title и meta, относящиеся именно к генерируемому материалу или рубрике, в обработчике необходимо указать $tpl->assignPlacePath (‘путь к МЕТА-данным страницы’) В обработчике, генерирующем материал, функция вызывается с параметром 'material/'.$material_data['material_id'], в обработчике, генерирующем индекс рубрики, с параметром 'rubric/'.$rubric_data['rubric_id']. Вызывается до метода prepare().Иначе вместо <!—TITLE --> и <!—META --> будет пусто. 5. Страницы “Страницы” – это набор из обработчика и шаблонов страниц, который используется для генерации индексов рубрик и материалов сайта + набор опций редактирования (для материалов). “Страницы” могут быть двух типов “Автогенерация” и “Материал”. Тип “Автогенерация” используется для индексов рубрик, содержащих автоматически генерируемые списки, например список материалов рубрики или подрубрик рубрики. Для каждой страницы определяются опции редактирования рубрики (если страница установлена для индекса рубрики) или опции редактирования материала (если страница установлена для материала рубрики). Существуют “настройки страниц по умолчанию” –они используются на всех страницах, если на странице не отмечен чекбокс “Переопределить стандартные настройки”. 17 Рисунок 7. Параметры редактирования рубрик В параметрах рубрик определяется, показывать ли поле “Описание рубрик”, поля для поисковых систем (Title и META-тэги) и количество картинок к рубрике. Для каждой картинки можно ввести название, если название не заполнено картинки именуются по порядку – “Сопровождающая картинка”, “Сопровождающая картинка 2” и т.д. Если для картинки определены ширина и высота, то при загрузке изображения любого размера, оно будет приведено к нужной ширине и высоте. Рисунок 8. Картинки к рубрике 18 Рисунок 9. Параметры редактирования материалов Созданные страницы привязываются к рубрикам. Для того чтобы у рубрики был индекс, отметьте чекбокс “Индекс рубрики”. Индексы рубрик могут автоматически генерироваться по определенному шаблону (тип “Автогенерация”), могут быть редактируемыми как материал (тип “Материал”) или перенаправлять на другую страницу (тип “Редирект”). 6. Модули Система iPHPortal имеет модульную структуру. Модуль представляет собой код, предназначенный для работы с определенной сущностью. Модуль может использоваться в каком-то одном разделе (модуль “Каталог образовательных ресурсов”) или в нескольких разделах (модуль “Форумы” может быть размещен в нескольких разделах). Разбиение сайта на отдельные модули позволяет использовать наработки на других порталах. 19 С помощью системы экспорта импорта можно создавать экспортные файлы с полной информацией о модуле, позволяющие просто переносить модули и создать библиотеку модулей. 6.1. Состав модуля 1. Определение модуля (запись в базе данных) 2. Таблицы БД (дамп) 3. Классы 4. Страницы административного интерфейса 5. Пункты меню 6. Обработчики 7. Шаблоны 8. Группы прав, относящихся к модулю 9. Права, относящиеся к модулю 10. Объект права 11. Тип рубрики по умолчанию 12. Файлы к модулю 13. Настройки к модулю Разделение внешнего представления и логики работы модуля реализуется c использованием паттерна Model-View-Controller. Суть этого паттерна состоит в том, чтобы отделить представление данных от доступа к ним. В паттерне выделяются три части системы: model (модель), являющаяся абстрактным хранилищем данных, view (представление) – абстрактный способ отображения информации клиенту и controller (контроллер) – часть, реализующая взаимодействие между моделью и представлением (бизнес-логику). Моделью является набор классов PHP, который представляет логику работы с определенной сущностью (например, с материалами на сайта). View – HTMLшаблон, с использованием директив шаблонного “движка”. Данные в шаблон передаются контроллером – кодом PHP, который использует Model для извлечения данных. Применение паттерна MVC решает следующие проблемы: 20 • код отделен от представления данных; таким образом, представление данных легко переработать, не затрагивая остальные части системы; • хранилище данных может быть любым (как одной из DB, так и, например, XML-файлом); в общем случае легко можно реализовать набор универсальных data providers, получающих, изменяющих или добавляющих данные, используя value objects (объекты, содержащие информацию о данных (например, строку таблицы реляционной БД)); • меньше времени уходит на разработку приложения, так как сильно сокращается время, необходимое для тестирования; при разработке приложения можно параллельно вести разработку нескольких частей системы благодаря абстракциям, применяемым в контроллере Модуль может быть двух видов: 1. C возможностью размещения в рубрике (например, “Форум” или “Каталог ресурсов”, т.е. имеющий представление на сайте) 2. Просто некая функциональность (например, “Баннеры” или “Голосование”). 6.2. Подготовка классов модуля к экспортированию 1. Названия таблиц в классе модуля должны быть прописаны следующим образом: // Конструктор function forums() { global $site; $this->mForumsTable = isset($site['forums_table']) ? $site['forums_table'] : 'forum'; } Для возможности переопределения названий таблиц в файле include/conf/tables.inc.php 21 Так же должно присутствовать свойство класса $_used_tables, в котором перечислены таблицы, используемые классом. В модуле может быть несколько классов и в классе прописываются таблицы, используемые именно этим классом. Пример: var $_used_tables = array ('forum','forum_message'); 2. В классе должны быть два метода для создания / удаления таблиц класса – install и uninstall. Метод install вызывается при импортировании модуля, метод uninstall при удалении модуля. SQL-файл со скриптом создания и наполнения таблиц модуля должен лежать в директории include/class/sqldump и должен иметь имя равное имени файла класса, только расширение не “.class.php”, а “.sql” Пример метода install: //Инсталлятор таблиц // $table_prefix - префикс для создаваемых таблиц, //в случае если таблицы с такими именами уже есть function install ($table_prefix = '', $ignore_warnings = '') { global $module_exchange; // Создание экземпляра класса module_exchange ins_class ('module_exchange'); // В warnings записывются предупреждения при инсталляции таблиц модуля $warnings = array(); // Оставить имеющиеся таблицы if (isset($ignore_warnings['install']['forum_tables']) && $ignore_warnings['install']['forum_tables'] == 'exists') return $warnings; 22 // Проверка наличия таблиц форума в БД // Если есть хотя бы одна таблица, из перечисленных в переменной $_used_tables – возвращается true $tables_exists = $module_exchange->check_class_tables ($this->_used_tables); // Предупреждения, возвращаемые из этого метода, показываются пользователю с выбором // “Создать таблицы заново” (overwrite) или оставить имеющиеся (exists, по умолчанию) // После того как пользователь сделал выбор, метод вызывается заново, в переменной $ignore_warnings // содержится выбор пользователя if ($tables_exists && (!isset($ignore_warnings['install']['forum_tables']) || $ignore_warnings['install']['forum_tables'] != 'overwrite') ) { $warnings['forum_tables'] = 'Таблицы БД модуля Форумы уже существуют'; } if (!$warnings) { // Создание таблиц // Запускается sql файл со скриптом создания и наполнения таблиц модуля $module_exchange->process_sql_dump ('forums'); } return $warnings; } Пример метода uninstall 23 // Удаление модуля function uninstall () { global $module_exchange; ins_class ('module_exchange'); // Для каждой таблицы, перечисленной в переменной $_used_tables вызывается команда // DROP TABLE IF EXISTS $table_name $module_exchange->drop_class_tables ($this->_used_tables); } 6.3. Принцип экспортирования модуля При экспорте модуля все данные, относящиеся к модулю, записываются в один xml-файл. В xml-файл прописываются не только описания других файлов (классов, обработчиков, шаблонов и т.д.), но и содержание файлов, закодированное в формате base64. Затем этот файл автоматически архивируется для уменьшения размера. Пример экспортного файла (поля с текстом base64 не заполнены) <?xml version="1.0" encoding="windows-1251"?> <module version="1.0" name="Форум" desc="Древовидный форум" handler_code="forum" errordocument="true" def_rtype_code="forum" def_rtype_name="Форум" def_rtype_script=""> <!--Классы, используемые модулем--> <classes> <class code="forum" editdate="" text="" sqldump="" sqldump_editdate=""/> </classes> <!--Административные страницы модуля--> <adminpages> <adminpage filename="forums.php" editdate="" text=""> 24 <requredright code="manage_forum"/> </adminpage> </adminpages> <menugroups> <menugroup name="Интерактив" image=""/> </menugroups> <!--Пункты меню модуля--> <menuitems> <menuitem menugroup="Интерактив" name="Форумы" link="forums.php" highlightpages="forums.php,forum_edit.php"> <requredright code="manage_forum"/> <menuitem name="Форумы" link="forums.php" highlightpages="forums.php,forum_edit.php"> <requredright rightcode="manage_forum"/> </menuitem> </menuitem> </menuitems> <!--Обработчики--> <handlers> <handler name="Форум" desc="" code="forum" type="dynamic" text="" editdate=""/> </handlers> <!--Шаблоны--> <templates> <template name="Форум - список форумов" desc="" code="forum-list" alias="forum_list" text="" editdate=""/> </templates> <!--Группы прав пользователя--> <userrightgroups> <userrightgroup name="Форум"/> </userrightgroups> <!--Права пользователя--> <userrights> 25 <userright name="Управление форумами" desc="Описание права" code="manageforum" rightobject="forum" rightgroupname="Форум"/> </userrights> <!--Объекты прав пользователя--> <rightobjects> <rightobject name="Форум" code="forum" name2="форумы" name3="" table="" id_field="" name_field=""/> </rightobjects> <!--Настройки, относящиеся к модулю--> <settings> <setting group_code="site" name="Кол-во тем форума на странице" value="15" type="numeric" allow_empty="0" code="site_forum_threads_show" desc=""/> </settings> <!--Файлы, относящиеся к модулю--> <files> <file path="" data="" editdate=""/> </files> </module> 6.4. Экспортирование модуля На странице редактирования модуля выберается закладку “Экспорт модуля”. Для экспортирования модуля обязательно должна быть заполнена мета информация, которая не обязательна для функционирования модуля: 1. Классы, которые использует модуль 2. Административные страницы модуля 3. Пункты меню модуля 4. Права, которые использует модуль 5. Настройки, используемые модулем 6. Файлы, которые использует модуль 26 Рисунок 10. Экспортные данные модуля Примечание: • Все права, которые прописаны для административных страниц и для пунктов меню модуля автоматически прописываются в список прав, используемых модулем. • Шаблоны, которые включается в шаблоны модуля, автоматически включаются в экспортный файл (аналогично для обработчиков). После заполнения информации о модуле нажмите кнопку “Экспортировать модуль”. Рисунок 11. Получение экспортного файла модуля 27 6.5. Импортирование модуля Для импортирования модуля выберите пункт меню Генерация -> Модули, затем закладку ”Добавить модуль”. Рисунок 12. Страница занесения модуля Модуль можно создать вручную (ввести название, обработчик, шаблоны и т.д.), либо загрузить предварительно созданный экспортный файл. При импортировании модуля производится проверка: 1. Проверка наличия модуля с таким же кодом или названием 2. Проверка наличия классов модуля 28 3. Проверка наличия административных страниц модуля 4. Проверка наличия объектов прав пользователя 5. Проверка наличия прав пользователя Если существуют объект с таким же названием (например, класс, административная страница, обработчик и т.д.) и его параметры отличаются от данных в экспортном файле – выводится предупреждение. По умолчанию ответ на предупреждение “Записать версию из экспортного файла” (для всех объектов, кроме шаблонов). Рисунок 13. Подтверждение загрузки модуля Если в БД уже существует хотя бы одна таблица, используемая модулем, выводится предупреждение. Можно оставить имеющиеся таблицы или загрузить дамп таблиц модуля заново. 29 Рисунок 14. Создание таблиц модуля После импортирования новый модуль можно разместить в рубрике. Рисунок 15. Выбор модуля (типа рубрики) размещенного в рубрике 7. Отражение специфики образовательного портала в iPHPortal Неотъемлемым компонентом обеспечения современной образовательной системы являются информационные ресурсы (ИР). Каталог ИР и служба каталогизации относятся к ключевым компонентам образовательного портала Совокупность образовательных центрального профильных образовательного порталов будем портала называть и всех федеральным образовательным порталом (ФОП) или просто образовательным порталом. Разработанная система предназначена для развертывания профильных порталов и важным ее качеством является возможность интеграции с центральным порталом. Реализованы механизмы интеграции с центральным порталом посредством экспорта 30 мета описаний каталога информационно-образовательных ресурсов и экспорта новостей посредством RSS (Really Simple Syndication). Возможности, обеспечиваемые каталогом ИР и службой каталогизации, в значительной степени зависят от используемой системы метаданных. Каталог создан в двух вариантах. Первый вариант реализован по модели, совместимой со спецификацией метаданных GEM (Gateway to http://www.geminfo.org/Workbench/GEM2_elements.html, Educational Materials) представляющей собой расширение спецификации Dublin Core http://dublincore.org/ для задач каталогизации образовательных ресурсов. Эта модель используется в каталоге федерального портала "Российское образование" www.edu.ru. Рубрикаторы каталога вертикального портала могут отличаться от рубрикаторов edu.ru. Для автоматической репликации посредством xml каждой рубрике каталога вертикального портала можно поставить в соответствие рубрику каталога edu.ru. Во втором варианте используется модель IMS LOM (Learning Object Metadata) http://ltsc.ieee.org/wg12. Т.к. модель LOM допускает возможность расширения набора атрибутов, в web-интерфейсе управления каталогом ресурсов предусмотрена настройка набора используемых атрибутов. При необходимости администратор сайта может без программирования добавить свою группу атрибутов или отдельные атрибуты. Т.к. набор полей GEM является подмножеством IMS/LOM, что обеспечивает возможность импорта метаданных IMS => GEM. Оба варианта каталога могут выдавать метаописания занесенных ресурсов в формате XML, что позволяет объединять ресурсы профильных порталов на центральном портале edu.ru. При публикации материалов на сайте их можно сразу же размещать в КИОР и тем самым делать доступными для всей аудитории образовательных порталов. В настоящий момент на основе этой системы разработаны порталы “Информационно-коммуникационные технологии” http://www.ict.edu.ru , “Международное образование” http://international.edu.ru , новый сайт Министерства Образования http://www.ed.gov.ru и др. Подробнее о системе можно узнать на сайте http://phportal.informika.ru. 31 Сведения об авторах: Булгаков Михаил Вячеславович, кандидат технических наук, доцент, начальник отдела информационных систем Государственного научно-исследовательского института информационных технологий и телекоммуникаций (ГНИИ ИТТ «Информика»), г. Москва, тел. (095) 237-57-52 e-mail bul@informika.ru Носов Виктор Павлович, аспирант, программист отдела информационных систем Государственного научноисследовательского института информационных технологий и телекоммуникаций (ГНИИ ИТТ «Информика»), г. Москва, тел. (095) 237-57-52 e-mail nosov@informika.ru