This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Санкт-Петербургский государственный университет Факультет филологии и искусств Кафедра информационных систем в искусстве и гуманитарных науках
И.А. МБОГО
Разработка веб-портала с использованием CMS PLONE Методическое пособие
Санкт-Петербург 2007
1
Рекомендовано к изданию Кафедрой информационных систем в искусстве и гуманитарных науках Факультета филологии и искусств Санкт-Петербургского государственного университета
Мбого И.А. Разработка веб-портала с использованием CMS PLONE: Методическое пособие. — СПб.: Ф-т филологии и искусств СПбГУ, 2007. — 43 с. Методическое пособие посвящено вопросам, связанным с разработкой и настройкой веб-портала с использованием системы управления контентом PLONE. Рассмотрены основные инструменты, необходимые администратору портала, в том числе рабочий цикл создания документов (workflow) позволяющий управлять процессом публикации материалов в сети Интернет.
Подготовка и издание учебного пособия осуществлено в рамках проекта СПбГУ «Инновационная образовательная среда в классическом университете» (Приоритетный национальный проект «Образование»).
Введение Plone это продукт, лицензированный в рамках General Public License (GPL), содержащий исходные коды, которые могут быть использованы без каких-либо ограничений. Дистрибутивы и документацию можно взять по адресу http://plone.org, документацию по zopeсерверу – на http://zope.org. У системы есть довольно большое community, поддерживаются списки рассылки по различным направлениям (http://sourceforge.net/mail/?group_id=47214). В качестве примера работающей системы можно рассматривать сайт факультета филологии и искусств СПбГУ (http://portal.phil.spbu.ru). Plone – это система публикаций, использующая в основе сервер приложений Zope. Сервер приложений Zope написан на языке программирования Python и является, в том числе, средой разработки приложений (framework). Для Zope был написан набор библиотек Content Management Framework (CMF, система управления контентом). Plone является расширением CMF. Общая структура комплекса представлена на рис. 1.
Рисунок 1 Структура комплекса Plone/Zope Отпечатано с готового оригинал-макета в секторе цифровой печати Института искусств Факультета филологии и искусств СПбГУ 199178 Санкт-Петербург, 10 линия В.О., д. 49. Подписано в печать 10.11.2007. Заказ № 48. Формат 60х84/16. Усл. печ. л. 3,25. Тираж 50 экз.
2
3
Plone использует модель построения приложения Model View Controller (MVC). Эта модель позволяет разделить модель данных приложения, пользовательский интерфейс и управляющую логику. Для хранения данных используется встроенная, объектная база данных ZODB.
Установка и настройка Plone (под Windows) Наиболее простой способ установки Plone - использование инсталлятора под Windows, который автоматизирует процедуру установки Plone под Windows (http://plone.org/downloads). Перед началом установки необходимо остановить все запущенные Web-серверы. Инсталлятор Plone делает прослушиваемыми порты 80 и 8080. При установке продукта на ОС устанавливается интерпретатор python и zope сервер (zope instance), которые стартуют в виде служб при старте ОС. Для работы с Plone запустите его контроллер (Plone controller) используя ссылку «Пуск — Все Программы — Plone — Plone».
Рисунок 2. Окно запуска Plone
4
Контроллер - это приложение, которое предоставляет хороший пользовательский интерфейс для запуска и остановки Plone. Главное окно контроллера содержит страницу состояния Plone, которая позволит легко запустить или остановить Plone. После старта Plone он становится доступным по локальным адресам: http://localhost/ - интерфейс Plone для пользователя и контент менеджера и http://localhost:8080/manage - доступ к Zope сервера ZMI (Zope Management Interface): интерфейсу администратора и разработчика. Plone позволяет организовывать доступ к материалам, размещенным в системе, по нескольким протоколам – http, ftp, WebDAV. Сервера ftp и WebDAV входят в дистрибутив и рассчитаны только на работу с Plone, они строят виртуальную файловую систему, извлекая данные из ZOBD. Таким образом, настроить какой-либо из известных серверов для доступа к ресурсам Plone по протоколам ftp или Web-based Distributed Authoring and Versioning (WebDAV) не представляется возможным. Изменение портов, как показано на рисунке 3, позволяет вам указать порты, которые Plone прослушивает на наличие входящих соединений по HTTP, FTP и WebDAV.
Рисунок 3. Страница, отображающая порты, на которых запущен Plone
5
При установке Plone следовало позаботиться о том, чтобы никакой другой сервер (IIS, Apache или Personal Web Server - PWS) не прослушивал тот же самый порт, как и Plone, то есть порт 80. Plone HTTP: это поле указывает порт для доступа пользователей к Plone. По-умолчанию это порт 80 - стандартный для Web-серверов. Несмотря на то, что этот порт не является обязательным, без него вы не сможете получить доступ к Plone с помощью браузера. Если этот порт включен и Plone запущен, кнопка View Plone на статусной странице (странице состояния) должна быть доступна. Zope Management HTTP: это поле указывает порт для доступа к Plone в качестве администратора. По умолчанию это порт 8080. Указанный порт позволяет вам получить доступ к Интерфейсу управления Zope (ZMI) для корневого каталога Zope. Вы можете сделать то же самое через HTTP порт, однако более просто и удобно использовать различные порты. Если данный порт включен и Plone запущен - кнопка Manage Plone на статусной странице (странице состояния) должна быть доступна. FTP Access: это поле указывает порт для доступа к Plone по протоколу FTP. По умолчанию данное поле пустое - это означает, что порт неактивен. Если вы хотите включить его, обычно для этого используют порт 21. Вы можете использовать FTP для передачи больших файлов. WebDAV Source: это поле указывает порт для доступа к Plone через WebDAV. По умолчанию данное поле пустое - это означает, что порт неактивен. Если вы хотите включить его, обычно для этого используют порт 8021. (WebDAV - это протокол для удалённого управления контентом в Plone. С помощью WebDAV вы получаете возможность выполнять такие задачи, как отображение вашего сервера Plone на какой-либо из дисков в Windows). После установки, обратитесь к Zope с помощью браузера по адресу http://localhost:8080/manage. Вам потребуется указать имя пользователя и пароль (например те, которые вы указывали при установке Zope).
6
В верхнем правом углу ZMI есть выпадающий список, содержащий продукты, которые вы можете добавить. Проверьте то, чтобы Plone Site был одним из предлагаемых вариантов в этом списке. Если так, процедура установки завершена (см. рис. 4).
Рисунок 4. Plone Site в выпадающем списке (первый запуск Plone)
Запустите браузер и зайдите на сервер по адресу 80 (http://localhost/). Справа вверху находится ссылка «Войти». Введите логин и пароль пользователя. Теперь вы авторизированный пользователь, об этом говорит строка пользователя (под формой поиска справа). Вам необходимо настроить Plone для работы. Для этого в строке пользователя выберите пункт «Мои настройки». Вы попали в раздел персональных настроек пользователя. Пока в этом списке только 2 пункта: 1. Изменить пароль 2. Личные настройки В личных настройках впишите свой адрес электронной почты. Поскольку вы администратор сайта, то в строке пользователя вам доступен пункт «Установки Plone»:
7
1. Добавить/удалить продукты. 2. Журнал ошибок 3. Настройки почты 4. Установки портала 5. Варианты внешнего вида 6. Администрирование пользователей и групп 7. Интерфейс управления Zope Настройки почты (настройка SMTP-сервера). В этом разделе необходимо настроить SMTP (почтовый) сервер, через который будут отправляться уведомления и забытые пароли участникам. Обычно SMTP-сервер расположен на том же компьютере. Соответственно установки будут «localhost» и «25». Установки портала (настройка Plone-портала) влияют на работу всего сайта и его политику. Название портала – это строка, которая выводится в заголовке окна браузера, т.е. тег title. Обычно название сайта. Описание портала – обычно краткая аннотация портала. Имя портала «От» – в письмах отсылаемых порталом содержимое поля «От» (заголовок письма «From:»). Адрес портала «От» – адрес электронной почты от которого будет рассылаться почта. Внимательно отнеситесь к заполнению этого поля, т.к. пользователи, получающие письма от портала, будут отвечать на этот адрес. И так же проконсультируйтесь у вашего системного администратора, какие адреса могут отсылать почту. Обычно это e-mail службы поддержки сайта (адрес в заголовке письма «From:»). Язык по умолчанию – выберите язык, поле важно для поисковых систем и браузеров. Политика регистрации – значение этого поля влияет на форму регистрации. Если позволить участникам выбирать свои начальные пароли, то на сайте можно будет регистрироваться всем, без сообщения своего адреса электронной почты, а значит, сайт может превратиться в базу для размещения картинок сомнительного содержания. Параметр «Сгенерировать и отправить по электронной почте начальный пароль участника» при регистрации посетитель вводит свой e-mail и на указанный адрес высылается пароль. При первом заходе на сайт посетителю будет предложено поменять пароль на более удобный. Поддержка внешнего редактора – если вы хотите использовать продукт External Editor можно его подключить.
8
Добавление и редактирование контента Каждый тип контента – это объект внутри ZODB. Каждый тип характеризуется своим набором полей предназначен для публикации различных типов содержания. Plone поддерживает следующие типы контента: Document (Документ). Этот элемент предоставляет пользователю некоторую статическую (неизменяемую) информацию. Это наиболее общий тип добавляемого контента, который представляет собой большинство типичных Web-страниц. News item (Новость). Документ, который должен быть показан в колонке новостей (например, пресс-релиз). Link (Ссылка). Это ссылка на другой элемент, который может быть внутренним или внешним относительно Web-сайта. Image (Изображение). Графический файл с изображением (gif или jpeg файлы). Event (Событие). Приближающееся событие, мероприятие, конференция или другое. Объект «событие» имеет характерные поля, такие как – место проведения, время, контактная информация организаторов и т.д. Folder (Папка). Аналог папки на жестком диске. Это папка для размещения контента, чтобы его можно было найти в дальнейшем. Topic (Тема). Это группа различных типов контента. По существу, это сохраненный поисковый критерий, который позже снова может быть использован. Только привилегированные пользователи сайтов могут добавлять темы. File (Файл). Это такая часть контента, как видео, звуковые, текстовые файлы ил любые другие типы файлов, который будут отображаться в виде прикреплений и доступны для скачивания. Document (Документ) - это заполненная страница, обычно содержащая какой-либо текст. Несмотря на то, что все добавляемые виды контента могут служить Web-страницами, наиболее подходящий для этого тип - Документ. Страница Plone-сайта, которую вы уже видели страница приветствия Plone - это один из примеров Документа (см. рис. 5).
9
Рисунок 6. Мой контент
Рисунок 5. Добро пожаловать в Plone, обычный документ
Добавление страницы Есть два пути добавить контент любого типа с использованием браузера. Прежде всего убедитесь, что вы вошли на сайт, потому что только зарегистрированные пользователи могут добавлять контент. Далее перейдите по ссылке my folder (моя папка) в меню пользователя наверху справа - это перенесёт вас в вашу персональную папку (область, которую вы контролируете). Если у вас есть возможность добавлять контент в папку, то она будет отображена с использованием границы зелёного цвета вокруг её верхней части.
Если зелёная граница отсутствует - вы не имеете возможности добавить контент. Верхняя граница содержит действия, которые вы можете выполнить в текущем разделе сайта. На рисунке 6 вы можете видеть, что на странице отображено содержимое текущей папки, поскольку именно эта вкладка (contents или содержимое) является выделенной. Другие вкладки это view (просмотр), sharing (совместный доступ) и properties (свойства). В правом верхнем углу зелёной границы вы увидите выпадающие меню Add New Item (Добавить новый элемент) и State (статус). Нажмите на меню Add New Item, чтобы увидеть список элементов, доступных для добавления (рис. 7).
Рисунок 7. Добавление страницы из зелёного выпадающего списка
10
11
Редактирование страницы После добавления страницы вы немедленно попадаете на страницу её редактирования.
Title (Название): Это название документа, которое будет отображаться на сайте (например, наверху страницы, в результатах поиска, в заголовке браузера и т.п.). Это поле обязательно для заполнения. Description (Описание): Это краткое описание документа, содержащее обычно около 20 слов, являющихся введением в документ. Данное поле очень полезно для тех страниц, у которых следует указывать их краткое содержание, например чтобы отобразить его в результатах поиска. Body text (Основной текст): Это тело документа. Его формат задаётся установкой значения следующего поля. Format (Формат): Если не включен визуальный редактор, то вы можете выбрать один вариант из трёх: Structured Text (Структурированный текст), HTML, и Plain Text (обычный текст). Каждый из этих типов подробно обсуждается в разделе «Выбор формата текста». Если вы не уверены, оставьте это поле со значением по умолчанию. Если визуальный редактор включен, то формат выбрать нельзя. Upload document (Загрузить содержимое): Если желаемый для добавления файл содержится на вашем компьютере, вы можете загрузить его на сервер, вместо того, чтобы заполнять поле основного текста. Для выбора загружаемого файла используйте кнопку внизу страницы. Содержимое загружаемого файла будет добавлено в поле Основного Текста вместо всего того, что там есть. Поле доступно только если не включен визуальный редактор.
Рисунок 8. Редактирование документа
Теперь вы можете редактировать документ в вашем браузере, используя предоставленную форму. Если вы посмотрите в адресную строку вашего браузера, вы увидите имя объекта (документа), который был создан, например Document.2003-12-29.43787. Ниже описаны поля предоставленной формы для редактирования и их значения. Short name (Идентификатор): Значение этого поля будет составлять часть URL этого документа, поэтому старайтесь делать его коротким, описательным и предпочтительно без пробелов. Соблюдение этих правил позволит сделать URL легкочитаемыми. Например, идентификатор может быть audit-report-2003. Если это поле не будет заполнено, Plone сгенерирует идентификатор самостоятельно.
Связанные элементы: Здесь вы можете указать ссылки на документы или другие объекты, имеющие отношение к редактируемой странице. Ссылки на эти объекты будут показаны в специальном портлете. Разрешить дискуссию: Можно включить или выключить возможность обсуждать эту страницу другими посетителями. «Значение по умолчанию» определяется администратором.
После того, как вы завершите редактирование документа, нажмите на кнопку Save (Сохранить) для подтверждения внесенных изменений. После этого вы попадёте на вкладку view (Просмотр), где сможете увидеть в каком виде документ будет доступен пользователям (рис. 9). Чтобы отредактировать документ ещё раз, перейдите на вкладку edit (правка).
ЗАПОМНИТЕ: Значение, указанное в данном поле не будет использовано, если соответствующая опция указана в ваших настройках.
12
13
Keywords (Ключевые слова): Элементам соответсвует некоторый набор ключевых слов, которые позволяют группировать и сортировать эти элементы. Например, статья о произошедших политических событиях может иметь ключевые слова политика и премьер-министр. Ключевые слова очень гибкое средство и вы можете использовать любые слова из представленного списка. По умолчанию ключевые слова в системе отсутствуют, однако администратор сайта может добавить новые ключевые слова для того, чтобы пльзователи могли их выбрать. Сделали вклад: Имена людей, которые сделали вклад в этот элемент. Каждое лицо сделавшее вклад должно быть на отдельной линии. Авторы: Введите список имен пользователей ответственных за создание содержания данного элемента. Одно имя на один ряд. Основной создатель должен быть указан первым. Дата вступления в силу: это первый день, когда единица информации будет доступна. Вы можете назначить эту дату с помощью указания значений в форме или нажатия на маленькую иконку календаря, которая откроет календарь и позволит выбрать дату (см. рис. 10). Рисунок 9. Сохранение перенесёт вас на вкладку view
Дата истечения срока: Это последний день, когда единица информации будет доступна. Обычно дату вступления в силу и дату истечения срока не указывают.
Установка метаданных для документа
Авторские права: это информация об авторских правах на контент. Обычно данное поле оставляют пустым.
Любая часть информации может иметь некоторое число назначенных для него свойств. Именно эти свойства, известные также как metadata (Метаданные) и обеспечивают хранение такой информации, как ключевые слова, авторские права, информация о соавторах. Этот набор свойств не является обязательным и используется только если в их использовании для данного элемента есть специальная необходимость, особенно если эта информация не должна быть доступна рядовым пользователям системы, просматривающим контент. То есть основная причина, по которой следует использовать метаданные, это добавление информации для таких задач как поиск или каталогизация контента. Вы можете получить доступ к свойствам объекта с помощью перехода на соответствующую вкладку properties(свойства). Представленная форма имеет несколько полей, которые являются одинаковыми независимо от типа контента: Исключить из навигации: Если данная опция отмечена, то элемент не будет показан в древе навигации
14
Рисунок 10. Указание даты вступления в силу
После заполнения всех необходимых полей значениями, нажмите Save (сохранить) для подтверждения изменений. Как было сказано ранее, в большинстве случаев нет необходимости редактировать значения в этой вкладке (Properties - свойства). Редактирование обычно 15
основывается на рекомендациях для сайта или на типе создаваемого сайта.
Дата вступления в силу Любой элемент в Plone может иметь дату истечения срока и дату вступления в силу. Оба свойства не являются обязательными и отсутствие указанных сроков гарантирует, что данные значения использованы не будут. Один из примеров, когда документ может иметь даты вступления в силу и истечения срока действия, является пресс-релиз. В идеале документ является созданными, подготовленными и проверенными в Plone. Однако, предполагается, что он должен появиться на сайте в полночь. До момента наступления указанной даты документ не будет видимым в календаре, навигационном меню и в результатах поиска. Следует заметить, что те, кто знает о существовании пресс-релиза будут иметь возможность получить к нему доступ напрямую. После того, как дата вступления в силу прошла, документ появится во всех вышеупомянутых местах и начнёт жить своей обычной жизнью. Аналогичная ситуация с датой истечения срока действия. Если вы имеете специальное предложение, которое должно перестать отображаться в указанный день, вы должны установить на этот день дату истечения срока действия. После её наступления документ перестанет быть видимым в календаре, навигационном меню, результатах поиска и т.д.
Публикация документа Когда документ создан, ему присваивается начальное состояние (статус), называемое visible (видимый). По умолчанию контент не является автоматически опубликованным и доступным всему миру. Вместо этого, некоторые пользователи могут просматривать документ, однако он не отображается в навигационном меню и результатах поиска. Это очень полезное состояние, потому что вы можете направить пользователей на этот контент, но поскольку он не видим в меню и 16
результатах поиска он не видим для всех пользователей, кроме тех, кто о нём знает. В любой момент времени каждая единица контента на Plone-сайте находится в определённом состоянии. Это состояние описывает его права доступа и роли в пределах сайта. Благодаря наличию единиц информации в различных состояниях существует возможность назначить различные уровни безопасности для каждой отдельной единицы контента. Например, документам может потребоваться неделя или две для их подготовки и проведения множества проверок. В конечном счёте вы захотите опубликовать этот документ так, чтобы его смогли видеть все пользователи, то есть он отражался в навигации и результатах поиска. Вы можете опубликовать контент используя выпадающее меню State (статус), расположенное в правом верхнем углу основной навигации (см. рис. 11).
Рисунок 11. Выпадающее меню State (статус)
Для опубликования объекта, выберите Submit (публиковать) из выпадающего меню. По умолчанию вы не можете немедленно публиковать контент, но вы можете предложить его для проверки. Когда документ предложен для проверки, он переходит в состояние review. Это промежуточное состояние между видимостью и опубликованностью. Оно позволяет пользователям, имеющим роль reviewer на вашем сайте, редактировать содержимое документа перед тем, как он станет доступен для внешнего мира. После отправки контента на проверку, в правом верхнем углу вы увидите сообщение о том, что документ в со17
стоянии проверки. На рисунке 12 вы можете увидеть, что вкладка редактировать теперь отсутствует.
Рисунок 12. Контент отправлен на проверку, его состояние изменено на pending (в ожидании обработки) и вкладка редактирования (edit) более недоступна.
ЗАПОМНИТЕ: Если вы на сайте под пользователем с полномочиями менеджера, то в выпадающем списке будет только одна опция Publish (публиковать). Это позволяет вам поместить контент на сайт сразу в опубликованном состоянии безо всяких промежуточных шагов. В выпадающем списке рабочего цикла в правом верхнем углу есть также опция Advanced (дополнительно), которая открывает форму состояния для изменения статуса объекта. Это часть формы, доступной при нажатии вкладки Properties (свойства). Она содержит следующие поля: Effective Date (Дата вступления в силу): Это то же самое поле, как и во вкладке Properties (свойства) Expiration Date (Дата истечения срока): Это то же самое поле, как и во вкладке Properties (свойства) Comments (Комментарии): Здесь указываются все комментарии, которые вы хотите добавить при внесении изменений. Например, вы можете указать следующее: «Первый эскиз. Посмотрите, пожалуйста, второй параграф». Change State (Изменить состояние): Это копии пунктов, доступных в выпадающем меню. Например опции Publish, Submit и так далее. Ещё одна опция No Change (Без изменений) доступна для того случая, когда изменения не нужны.
Укажите изменения, которые вы хотите сделать и нажмите Save (Сохранить) для их подтверждения.
18
Рабочий цикл создания документа (workflow) На данном этапе вы, возможно, спрашиваете себя о том, что такое рабочий цикл (workflow) и что означают его состояния. Рабочий цикл, как будет рассказано в главе 7, это способность назначить различные состояния для контента. Далее кратко описаны состояния, имеющиеся в системе по умолчанию. Visible (Видимый): В этом состоянии контент создаётся. Все пользователи могут найти данный контент с помощью поисковых функций или непосредственно указав его URL. Контент не отображается в навигационном меню. Его могут редактировать владелец и администраторы сайта. Pending (Ожидает рецензии): Контент, ожидающий обработки включает элементы, которые были опубликованы членами сайта. С точки зрения пользователя, этот контент ведёт себя как контент в состоянии visible. Различие заключается в том, что контент, ожидающий утверждения, отмечается соответствующим флагом, в результате чего редакторы сайта получат приглашение опубликовать этот контент или забраковать его. Этот контент может редактироваться только редакторами (рецензентами) и менеджерами. Published (Опубликованный): Опубликованный элемент является видимым всеми посетителями сайта. Он появляется в результатах поиска и навигационном дереве. Также данный контент может появляться в других местах, индивидуальных для данного типа контента (например новости будут видны тогда, когда вы перейдёте на соответствующую вкладку). Опубликованные элементы могут быть отредактированы только менеджерами, однако их владельцы могут изменять статус элемента (например на visible). Private (Скрытый): Элементы в этом состоянии могут просматриваться и редактироваться только их владельцами и другими людьми с администраторским доступом к папке, в которой элементы находятся. они не появляются в результатах поиска или навигационом меню других пользователей. Данные элементы могут также редактироваться менеджерами сайта.
Рецензирование Если вы рецензент, то в правой колонке вашей домашней страницы после регистрации (входа на сайт) вы увидите список документов, ожидающих рецензирования. Это список документов, которые должны быть проверены вами или другими рецензентами (рис. 13).
19
(правка).
Рисунок 13. Список объектов для рецензирования
Список для рецензирования (список обзора) появляется в тот момент, когда вы входите на сайт пользователем, имеющим роль рецензента и существуют документы, ожидающие рецензии. Судить о том, что вы вошли на сайт можно по тому, что ваше имя присутствует в меню пользователя. Список содержит документы для проверки. Создайте любой документ и установите его состояние в рецензируемый, чтобы он появился в меню, о котором идёт речь. Чтобы отрецензировать этот тестовый документ щёлкните на нём мышью для его открытия. Собственно говоря, на данном этапе вы имеете возможность выбрать один вариант из следующих: Забраковать: Для этого следует выбрать соответствующий пункт из выпадающего меню. Это вернёт документ назад в состояние visible (видимый) и предполагает, что проверка завершилась с отрицательным результатом. Вы также можете щёлкнуть на пункт Advanced (дополнительно) для открытия формы с комментариями и добавить сообщение о причинах забраковывания документа. Одобрить: Для одобрения следует выбрать пункт Publish (публиковать). Это переведёт элемент в опубликованное состояние и сделает его доступным для посетителей сайта. Ничего не делать: Это оставит документ в имеющемся состоянии, поскольку иногда бывает необходимо проверить информацию или проконсультироваться о ней с кем-либо ещё. В конечном счёте вы должны будете вернуться к рассмотрению документа, так как он будет отображаться в списке элементов, которым необходимо редактирование до тех пор, пока вы не выполните одно из описанных ранее действий. Редактировать: Это позволяет внести изменения в документ, после чего выполнить одно из ранее описанных действий. Как рецензент вы можете внести в документ любые изменения, которые посчитаете нужными, так что чувствуйте себя свободно и пользуйтесь для этого вкладкой edit
20
После того, как вы удалили элемент из списка для рецензирования путём его забраковывания или публикации, он более не будет в нём отображаться. Естественно, предполагается, что на сайте уже есть некоторые пользователи, имеющие роль рецензента. Обычно (но не обязательно) это тот пользователь, который создал Plone-сайт как администратор. В главе 8 будет рассказано о том, как добавлять и редактировать пользователей, а также назначать некоторым из них роли рецензента.
Установка продуктов В разделе "Добавить/удалить продукты" можно установить продукты. Обычно устанавливается визуальный редактор FCKEditor. Поддержку визуального редактора можно включить в персональных настройках. Дополнительные продукты можно скачать из общего репозитария http://plone.org/products. Стоит иметь в виду, что многие продукты пишутся для какой-то определенной версии Plone/Zope и других могут не работать. Проблема совместимости здесь стоит очень остро. Для установки продуктов их нужно разархивировать и скопировать в каталог %root_dir%Plone 2\Data\Products, перестартовать Zope. После этого продукт должен появиться в /Control_Panel/Products в ZMI. Далее его следует установить используя portal_quickinstaller (ZMI) или через «Добавить/удалить продукты» в настройках Plone.
Инструменты сайта По умолчанию ставится определенный набор инструментов. Зайдите в ZMI, и вы увидите такой список: caching_policy_manager (CMF Caching Policy Manager) Менеджер, который отвечает за кэширование. XXX! Честно говоря, я им ни разу не пользовался. Так что хотел бы узнать о нем поподробнее. content_type_registry (Content Type Registry) Инструмент, который привязывает MIME-типы к типам данных порта-
21
ла. Zope позволяет работать с сервером не только по HTTP протоколу, но и FTP и WebDAV. Если вы собираетесь предоставлять доступ к данным по этим протоколам, то, вероятно, вам стоит настроить какие файлы, при загрузке на сервер, будут преобразовываться в какие документы портала. Если вы собираетесь использовать Archetypes, то там есть аналогичный инструмент. cookie_authentication (Cookie Crumbler) Этот инструмент позволяет авторизовывать пользователей используя жетоны (cookie). Протокол HTTP имеет возможности авторизовывать, и когда вы заходили в ZMI пришлось пройти через окошко ввода логина и пароля. Но к сожалению HTTP не имеет возможности "отлогинить" пользователя. Дабы не вдаваться в детали, скажу, что на данный момент существует только одна законная и удобная схема, через жетоны (cookie). Когда вы входите на сайт вам выдается жетон (cookie), когда нажимаете кнопку "Выйти" - удаляется. Этот продукт позволяет связать информацию получаемую, из жетонов с внутренним механизмом распределения прав Zope. error_log (Site Error Log) Вообще-то это не инструмент CMF или Plone, а стандартный продукт Zope. Коллектор ошибок и исключений. Принцип работы прост: информация об ошибках возникающих ниже по иерархии дерева записывается в список ошибок. Внимание! Ошибки хранятся в памяти и после перезапуска сервера список очищается. plone_utils (Various Plone Utility methods) Что-то вроде моста между шаблонами сайта и набором маленьких утилит. Внутренняя система безопасности разрешает скриптам добавляемым в ZMI выполнять только определенные действия и работу с ограниченным числом библиотек. Поэтому приходится размещать часть функционала во внешних продуктах. plone_utils и есть этот внешний набор небольших скриптов, которые и выкинуть жалко, и привязать не к чему.
portal_actionicons (Plone Action Icons Tool) "Очень важный продукт", занимается только тем, что сопоставляет картинки разным действиям на сайте. Причина его возникновения для меня загадка. portal_actions (Plone Actions Tool) Сердце CMF сайта. Будет рассказано подробнее отдельно. portal_calendar (Plone Calendar Tool) Продукт по идее должен заниматься отображением календарика с событиями. Работает очень медленно, смысл его существования не ясен, но календарики очень любят заказчики и слабые духом разработчики. portal_catalog (Plone Catalog Tool, Indexes all content in the site) Важный компонент сайта, поисковый каталог. Все документы при добавлении/изменени/удалении/изменении статуса/etc регистрируются тут. Каталог совмещенный с системой прав как раз и являются тем граммом урана которые делают Zope бесценным. portal_controlpanel (Plone Control Panel Tool) Список элементов панели управления Plone. portal_discussion (Plone Discussion Tool, Controls how discussions are stored by default on content) Инструмент отвечает за обсуждения доступные на сайте. Как, разве вы еще не знаете, что на Plone-сайтах можно обсуждать практически все? Так вот на Plone-сайтах можно обсуждать практически все. portal_factory (Plone Factory Tool, Responsible for the creation of content objects) Специальный инструмент который позволяет не создавать физически в ZODB объекты каждый раз когда пользователи нажимают кнопку "Создать". Объект временно размещается в памяти и пока вы его не сохраните будет оставаться там. Удивительное рядом. По умолчанию отключен. Включать имеет смысл только когда используете Workspace. portal_form_controller (Form Controller Tool, Manage form validation and post-validation actions) Инстумент который так же заслуживает отдельного обсуждения. Если кратко, то отвечает за проверку заполнения форм. portal_groupdata (Plone Group Data Tool) Инстумент хранит информацию о группах пользователей. portal_groups (Plone Groups Tool) Инстумент отвечает за создание папок групп. portal_interface (Portal Interface Tool) Так же как и plone_utils служебный инструмент, позволяет получить доступ к программынм интерфейсам.
22
23
portal_memberdata (Plone Memberdata Tool) Хранит свойства пользователей и их портреты. Кстати, если вы хотите посмотреть список всех портретов то зайдите по ссылке Plone/portal_memberdata/portraits/manage_main. portal_membership (Plone Membership Tool, Handles membership policies) Занимается созданием папок участников сайта, что обычно отключается на бизенс сайтах. Так же тут хранятся действия доступные участникам сайта. portal_metadata (Plone Metadata Tool, Controls metadata - like keywords, copyrights etc) Свойства портала и объектов в нотации Dublin Core. Инстумент так же известен тем, что в нем изменяется список типов событий (закладка Elements, группа свойств Subject). portal_migration (Plone Migration Tool, Handles migrations to newer Plone versions) Инстумент отвечает за миграцию со старых версий портала на новые. Внимание! Прежде чем мигрировать портал сделайте резервную копию директории var экземпляра сервера. portal_properties (Plone Properties Tool, Portal) Реестр сайта, тут хранятся свойства с которыми работают инструменты и шаблоны. Если надо поменять поведение чего-то на сайте, то вероятно это можно сделать тут. portal_quickinstaller (Plone QuickInstaller Tool) Один из немногих действительно оригинальных инструментов написанных создателями Plone (практически все остальные ограничиваются изменением иконки в ZMI для инстументов CMF). Позволяет устанавливать дополнительные продукты влияющие на работу портала. Например: CMFBoard - продукт позволяющий создавать на сайте форумы. portal_registration (Plone Registration Tool, Handles registration of new users) Отвечает за регистрацию на сайте участников. portal_skins (Plone Skins Tool, Controls skin behaviour (search order etc)) Тут и хранится весь дизайн, формочки, скрипты проверки, картинки и т.д. Все темы оформления хранятся тут. portal_syndication (Plone Syndication Tool, Generates RSS for folders) Обеспечивает возможность синдикации, к сожалению только в формате RSS.
24
portal_types (Plone Types Tool, Controls the available Content Types in your portal) Реестр типов данных доступных на сайте. Когда посетитель создает папку или новость, то он создает экземпляр одного из объектов перечисленных в этом списке. portal_undo (Plone Undo Tool, Defines actions and functionality related to undo) Так же как и portal_syndication или portal_registration инстумент с богатыми внутренними возможностями в ZMI от которых виден только внешний интерфейс. Этот отвечает за отмену действий на сайте. ZODB устроена особым образом, что все изменения дописываются в конец файла, так что до тех пор пока вы не упаковали базу данных у вас всегда есть возможность отменить последние действия. Конечно, есть некоторые ограничения, например если вы создали папку, а потом в ней документ, то нельзя будет отменить создание папки без отмены создания документа. portal_url (Plone URL Tool, Methods to anchor you to the root of your Plone site) Интерфейс доступа к корню портала из шаблонов и скриптов. portal_workflow (Plone Workflow Tool, Contains workflow definitions for your portal) Инстумент управляет рабочими циклами. Требует отдельного рассмотрения.
Инструменты разработчика Разработка системы ведется по трем направлениям: создание дизайна, проектирование различных шаблонов и написание продуктов. Дизайн сайта можно выполнять, используя разные подходы. Вопервых, его можно создавать изменяя встроенные стили. В разделе portal_skins находятся все визуальные компоненты системы. Для их изменения необходимо выбрать нужный элемент и нажать кнопку Customize. При этом этот элемент копируется в раздел portal_skins/custom. Как только объект помещается в этот каталог, он становится доступным для изменения. Таким образом можно изменить любые изображения, стили и т.д. С помощью такого подхода можно сделать только незначительные изменения, оставляя общее расположение элементов неизменным. Другим направлением является разработка собственных skins на 25
основе готовых каркасов DIYPloneStyle, MySkin, SimplePloneStyle. Использование этих продуктов позволяет разрабатывать полностью свой дизайн, отличный от основного каркаса Plone. Шаблоны. Шаблоны страницы являются инструментом для генерации веб страниц. Целью шаблонов страниц является естественный процесс публикации. Дизайнер, используя WYSIWYG HTML редактор, создает шаблон, программист редактирует его и делает частью приложения. Если требуется, дизайнер может загрузить шаблон обратно в свой редактор и продолжить изменения в его структуре и внешнем обличие. Не трогая изменений сделанных программистом, он не сможет нарушить работу приложения. Шаблоны страниц должны удовлетворять трем основным правилам: 1. Хорошее согласование с инструментами редактирования. 2. Что вы видите, то вы и получаете. 3. Хранение кода отдельно от шаблона, за исключением структурной логики. Zope поставляется с двумя системами шаблонов DTML и ZPT (Zope Page Templates). DTML считается устаревающей и в дальнейшем поддерживаться не будет. Шаблоны страниц используют Template Attribute Language (TAL) язык описания атрибутов, заключающийся в добавлении специальных атрибутов в тэг. Для примера, заголовок динамической странице выглядит подобно этому:
атрибут устанавливает содержимое тэга title и его значение "here/title" является выражением, предоставляющим текст для вставки внутрь тэга. Когда эти шаблоны сохраняются в Zope и просматриваются пользователем, Zope превращает этот статический контент в динамический и заменяет "Page Title" каким-либо найденным значением "here/title". В данном случае "here/title" принимает значение title объекта, который обращается к данному шаблону. Эта замена происходит динамически, когда шаблон становиться представлением. Этот пример также демонстрирует второй принцип. Когда вы видите шаблон в редакторе, текст заголовка работает как заменитель динамического текста заголовка. Этот шаблон представляет собой пример генерации документов.
Page Title
Здесь tal:content атрибут является оператором TAL. Он имеет XML пространство имен (часть tal:), большинство инструментов редактирования не считают его ошибочным потому что не знают его, и соответственно не удаляют этот атрибут. Этот атрибут не изменяет структуру или внешний вид шаблона при загрузке его в WYSIWYG редактор или в веб браузер. Имя content указывает на то что данный
26
Рисунок 14. Создание шаблона.
27
Есть команды шаблона для замены всего тэга, его содержимого или некоторых его атрибутов. Вы можете повторить тэг несколько раз или полностью опустить его. Вы можете соединять часть нескольких шаблонов вместе и определить простую обработку ошибок. Все эти особенности используются для генерации структурированных документов. Вы не можете создавать подпрограммы или классы, писать циклы или множественные проверки условий, или просто вычислять сложные алгоритмы. Для этих задач, вы должны использовать Python. Этот язык шаблонов не является самостоятельным языком программирования. Он основывается на использовании внутри каркасов программирования (framework)(таких как Zope), в которых другие объекты обрабатывают бизнес логику и задачи, не имеющие отношения к разметке страницы. Для создания действующего шаблона, его желательно, поместить в custom и вставить объект Page Template. После создания объекта Вы получите почти пустую страницу.
Элементы TAL Вставка текста Для того чтобы разместить динамический текста внутри другого текста, используйте tal:replace оператор в тэге span. Добавьте следующие строки в ваш шаблон: The URL is <span tal:replace="request/URL">URL.
Тэг span является структурным и не отображается визуально, в результате вы видите нечто подобное "The URL is URL.", когда просматриваете представление вашего исходника редакторе или в браузере. Когда вы просматриваете визуализированную (обработанную) версию шаблона, он выглядит подобно следующему: The URL is http://localhost:8080/TestTemplate.
Помните, что когда вы размещаете tal:replace не в тэг span а в тэги форматирования такие как b или font, эти тэги также заменяются на результат вычисления оператора, т.е. они будут отсутствовать в тексте конечной страницы. Если вы хотите поместить текст внутрь тэга, оставив сам тэг нетронутым, вы должны использовать оператор tal:content. Для установки заголовка вашей страницы примера в тэг title, добавьте следующие строки: The Title
Если вы откроете вкладку Test в новом окне, в заголовке страницы появится «Тестируем шаблон». Повторяющиеся структуры Оператор tal:repeat "повторить эту строку для каждого элемента содержащую список свойств объекта". Ниже представлена таблица, которая имеет номер строки для каждого объекта, и столбцы с id, meta-type и title. Рисунок 15. Стандартная страница шаблона.
28
29
#
Id
Meta-Type
Title
#
Id
Meta-Type
Title
Оператор повторения поочередно помещает объекты из списка в переменную item, и делает копию строки, используя эту переменную. Значение item/id в каждой строке представляет Id объекта, для которого создается строка. Условные элементы Условия можно вставлять используя выражение tal:condition
#
Id
Meta-Type
Title
#
Id
Meta-Type
Title
#
Id
Meta-Type
Title
Посмотрите на шаблон и вы увидите две строки. Если не добавлять оператор tal:condition в эти строки, то шаблон генерировал бы обе строки для каждого элемента, это не совсем то что вы хотели бы. Оператор tal:condition в первой строке гарантирует что эта строка включает только четные повторения, в то время как условие во второй строке указывает на нечетные повторения.
30
Оператор tal:condition ничего не делает если его выражение имеет значение true и просто удаляет весь тэг, включая его содержимое, если значение выражения false. Свойства odd и even переменной repeat/item возвращают ноль или единицу. Число ноль, пустая строка, пустой список и встроенная переменная nothing все они имеют значения false. Противоположное значение true, включающее не нулевое число и строки с любыми символами (даже пробелы). Определение переменных Оператор tal:define создает переменную items и его можно использовать ее где-нибудь в тэге table.
#
Id
Meta-Type
Title
Обратите также на то что вы можете иметь два TAL атрибута в одном и том же тэге table. В первом определяется переменная items, во втором items используется в условии, определяющем, какое из двух значений она имеет false(пустая последовательность) или true. На использование TAL накладываются следующие ограничения: 1. Только один оператор каждого типа может использоваться в пределах .одного тэга. Дело в том, что HTML не позволяет нескольким атрибутам иметь одно и тоже имя, вы не можете иметь два оператора tal:define в пределах одного тэга. 2. Оба оператора tal:content и tal:replace не могут использоваться в одном и том же тэге одновременно, так как эти функции, в таком случае, конфликтуют между собой. 3. Последовательность в которой вы записываете TAL атрибуты в тэге не совпадает с последовательностью их выполнения. В каком бы порядке вы их не написали, выполняются они всегда в следующей последовательности: define, condition, repeat, content / replace, attributes.
31
встроенные переменные Мы
уже использовали некоторые встроенные переменные template, user, repeat и request. Здесь представлен полный список других встроенных переменных и информация для их использования: nothing: фальшивое значение, аналогичное пустой строке, которое вы можете использовать в tal:replace или tal:content для очистки тэга или его содержимого. Если вы установите атрибут в nothing, этот атрибут будет удален из тэга (или не вставлен), в отличие от пустой строки. default: специальное значение ничего не изменяющее при использовании в tal:replace, tal:content или tal:attributes. Оно оставляет текст шаблона в том месте где записан. options: the keyword arguments, if any, that were passed to the template. attrs: словарь из атрибутов текущего тэга в шаблоне. Ключами являются имена атрибутов, а значениями конкретные значения определенные в шаблоне. root: корневой объект Zope. Используется для получения Zope объектов с фиксированным местоположением, не зависящим от того где расположен ваш шаблон и как он вызывается. here: объект который вызывает шаблон. Часто это тоже самое что и контейнер, за исключением того что может изменяться если вы используете заимствование. Используйте его для получения объектов Zope которые могут быть найдены в различных местах в зависимости от того как шаблон был вызван. container: контейнер (обычно папка) в которой хранится шаблон. Используйте ее для получения объектов Zope располагающихся относительно места где храниться шаблон. modules: коллекция модулей Python доступных из шаблона. Смотрите написание Python выражений.
Архетипы (Archetypes) Archetypes является каркасом (framework) для разработчиков новых типов контента для Plone. В базовой поставке пользователь имеет небольшой набор типов объектов – документ, новость, событие, изображение. Если Вам требуется создать дополнительный тип (т.е. новый объект, который формируется при помощи заполнения полей), то Archetypes – это именно тот инструмент, которым нужно пользоваться. 32
Сила Archetypes заключается, во первых, в автоматической генерации форм; во вторых, в предоставлении библиотеки из основных типов полей, виджетов форм, и кода проверки поля (валидаторов); в третьих, в простой интеграции собственных полей, виджетов, и кода проверки; и в четвертых, в автоматическом преобразовании форматированного (rich) контента. При создании своего типа необходимо создать определенную структуру файлов. Products | \- MyArticle | \- __init__.py | \- Article.py | \- config.py | \Skins \Article.pt | \- Extensions | \- __init__.py | \- Install.py
__init__.py – этот файл стартует, когда Zope загружает продукт (тип). Файл содержит описательную информацию для Zope сервера, установка имени объекта, скинов,… Article.py – основной файл, содержащий класс и основную схему; config.py – файл конфигурации, содержит кофигурационные
константы, имя продукта, описание разрешений; Extensions - каталог, в котором находится инсталлятор Install.py. Install.py считывается QuickInstaller. Методы install() и unistall() внутри этого файла выполняются во время инсталляции или деинсталляции продукта. Skins – каталог для хранения шаблонов
33
Более подробную информацию об архетипах можно получить по адресу: http://plone.org/documentation/manual/archetypes-developer-manual. В качестве небольшого примера приведем создание объекта на основе архетипов, который называется tender. Постановка задачи: Требуется создать дополнительный объект Plone, который бы имел возможность публиковать информацию об объявленных конкурсах. Каждый конкурс имеет сроки объявления, срок принятия решения, конкурсную документацию и др. необходимую информацию. Информация о конкурсе должна размещаться администратором сайта в виде заполнения формы с предопределенными полями. Вывод сведений должен осуществляться в виде общей таблицы. Анализ задачи: • Необходимо сформировать новый тип, который описывается с помощью предопределенных полей. Новый тип формируется на основе архетипов; • Стандартные режимы отображения не позволяют отображать созданный тип в требуемом виде. Для реализации требуемого вида необходимо будет написать свой шаблон, с использованием TAL.
Файл __init.py__ - инициализация продукта from from from from
from Products.Archetypes.public import * from config import * from Products.tenders.config import PROJECTNAME, \ ADD_CONTENT_PERMISSION skin_globals=globals() def initialize(context): # Import the type, which results in registerType() being called import tender # initialize the content, including types and add permissions content_types, constructors, ftis = process_types( listTypes(PROJECTNAME), PROJECTNAME) registerDirectory('skins', skin_globals) utils.ContentInit( PROJECTNAME + ' Content', content_types = content_types, permission = ADD_CONTENT_PERMISSION, extra_constructors = constructors, fti = ftis, ).initialize(context)
Файл config.py содержит сонфигурационные настройки продукта Файл install.py. Для простых инсталляторов можно принять этот файл как данность и просто скопировать его в свой проект
from Products.CMFCore.CMFCorePermissions import setDefaultRoles, ModifyPortalContent from Products.Archetypes.public import DisplayList
"""\
#Название продукта PROJECTNAME = "tenders"
This file is an installation script for this skin. It is meant to be used as an External Method.
# Название директории хранения шаблонов SKINS_DIR = 'skins' GLOBALS = globals()
To use, either use Plone 2.0+ to install, or add an external method to the root of the Plone Site that you want the skin registered in with the configuration:
# Определение прав доступа ADD_CONTENT_PERMISSION = "tenders_list: Add Content" # Set up default roles for permissions setDefaultRoles(ADD_CONTENT_PERMISSION, ('Manager', 'Owner',))
id: install_skin title: Install Skin *optional* module name: ExampleFileSystemSkin.Install function name: install Then go to the management screen for the newly added external method and click the 'Try it' tab.
"""A document type which may contain images and number of fields"""
# Add directory views try: addDirectoryViews(skinsTool, 'skins', skin_globals) out.write( "Added directory views to portal_skins.\n" ) except: out.write( '*** Unable to add directory views to portal_skins.\n') # Go through the skin configurations and insert the skin skins = skinsTool.getSkinSelections() for skin in skins: path = skinsTool.getSkinPath(skin) path = map(string.strip, string.split(path,',')) changed = 0 for skin_name in skin_names: if skin_name not in path: try: path.insert(path.index('custom')+1, skin_name) changed = 1 except ValueError: path.append(skin_name) changed = 1 if changed: path = string.join(path, ', ') # addSkinSelection will replace existing skins as well. skinsTool.addSkinSelection(skin, path) out.write("Added %s to %s skin\n" % (', '.join(skin_names),skin)) else: out.write("Skipping %s skin, %s already set up\n" % (skin, ', '.join(skin_names))) def setupTypes(self, out): installTypes(self, out,
36
#Импорт используемых библиотек from AccessControl import ClassSecurityInfo try: from Products.LinguaPlone.public import * except ImportError: # No multilingual support from Products.Archetypes.public import * print "No LinguaPlone support" # CMF from Products.CMFCore import CMFCorePermissions # AT from Products.Archetypes.public import * from Products.Archetypes.Field import ScalableImage from Products.Archetypes.Marshall import PrimaryFieldMarshaller from config import * from Products.ATContentTypes.content.document import ATDocument from Products.ATContentTypes.content.schemata import ATContentTypeSchema #Импорт имени проекта from Products.tenders.config import PROJECTNAME # Copy the ATDocument schema (to avoid modifying the original) and append our # own fields for the images and attachments manager widgets. #Описание схемы. Типов полей и виджетов (widget – расширение возможностей полей, # например, поле время/дата может иметь виджет календарь, который позволяет # пользователю набирать дату и время не вручную, а выбирать с помощью
# При генерации формы поле title будет формироваться автоматически (оно наследуется из BaseSchema, поэтому при определении своей схемы полу title не указывается) schema =
# Объявление класса. Обязательно указывается новый тип объекта внутри системы # portal_type и новое имя архетипа archetype_name, оно будет появляться в списке # добавляемых объектов class tender (BaseContent): """ Документ, содержащий объявление о тендере """ # Standard content type setup portal_type = meta_type = 'tender' archetype_name = 'Тендер' schema = BaseSchema + schema typeDescription= 'Документ, содержащий объявление о тендере'
Содержание Введение.............................................................................................................. 3 Установка и настройка Plone (под Windows) .................................................. 4 Добавление и редактирование контента .......................................................... 9 Добавление страницы ...................................................................................... 10 Редактирование страницы ............................................................................... 12 Установка метаданных для документа........................................................... 14
Дата вступления в силу.................................................................................... 16
<metal:block fill-slot="documentActions">
Рабочий цикл создания документа (workflow) .............................................. 19
Публикация документа .................................................................................... 16 Рецензирование ................................................................................................ 19 Установка продуктов ....................................................................................... 21 Инструменты сайта .......................................................................................... 21 Инструменты разработчика............................................................................. 25 Элементы TAL.................................................................................................. 29 Архетипы (Archetypes)..................................................................................... 32 Содержание....................................................................................................... 43