В конце 2007 года, Aten Design Group в сотрудничестве с The Colonial Williamsburg Foundation запустили сайт iCitizenForum.com, сайт на Друпале о гражданстве. Этот документ описывает некоторые факты, которые привели к выбору Друпала и описывает технические вопросы его создания.
The Colonial Williamsburg Foundation управляет крупнейшим в мире историческим музеем в Williamsburg, Virginia. Кроме того, фонд занимается историей 301-acre Historic Area; управляет музеями, социальными программами и библиотекой John D. Rockfeller; ведёт важные археологические исследования относящиеся к вопросам возникновения Америки. В соответствии со своим девизом — That the Future Learn from the Past — фонд заинтересован не только в восстановлении истории XVIII века, но и содействует просвещению людей о возникновении Америки.
iCitizenForum.com содействует ведению дискуссий по вопросам касающимся гражданства, так как это является продолжением основной задачи фонда.
Когда мы были вовлечены в проект в конце 2007 года, работа уже началась. Дизайн был уже разработан. Сайт был закодирован в ColdFusion. Возможности используемые сообществом были реализованы с использованием решения на базе платформы .NET. Концепция сайта уже прошла несколько рассмотрений и вопрос реализации проекта был уже не за горами.
Мы начали нашу работу с общего исследования, для переоценки основных целей сайта и определения будущих шагов. Центральной целью проекта, как было определено в этом процессе, было привлечение пользователей к обсуждению идей связанных с гражданством. В соответствии с этой целью мы установили следующие требования:
В процессе разработки проекта мы столкнулись с определёнными трудностями. Программное обеспечение использовавшееся для сообщества не поддерживало разнотипную классификацию. Мы хотели использовать две таксономии для одного содержания: одна для пяти разделов форумов, которые служили бы контейнерами для входящих в них тем, а другая для свободного ввода тегов. Дополнительно, мы видели возможные проблемы с созданием документов, которые не являлись бы записями в блоге, упорядоченными в иерархическое меню, но имели бы такие же возможности классификации как и документы в блогах. В то время, эти возможности были просто недоступны, во всяком случае без необходимости серьёзной работы с кодом и программирования всех возможностей с нуля.
Наши проблемы в основном заключались в системе классификации — как раз в том, что хорошо умеет делать Друпал. Кроме классификации содержания, Друпал даёт широкие возможности для сообщества, такие как настраиваемые типы документов, управление доступом, гибкая система меню, удобная публикация RSS-лент. Дополнительно, управление содержанием в целом, было темой, которую мы часто обсуждали с Colonial Williamsburg, и часто отказывались от разных вариантов вследствие их стоимости, лицензирования или отсутствия совместимости с уже существующей архитектурой. Как достаточно изолированная часть спектра их деятельности, iCitizenForum.com был идеальной тестовой площадкой для Друпала.
Colonial Williamsburg использует IIS на серверах Windows NT, ColdFusion и базу данных MS SQL Server. Это не слишком часто встречающееся окружение для Друпала. Временные ограничения и существующие договора по обслуживанию NT-сервера делали использование LAMP невозможным, таким образом мы начали изучение возможностей хостинга для работы Друпала в Windows. Мы установили PHP 5, MySQL и дополнительный модуль для IIS (ISAPI Rewrite, аналог mod_rewrite) для возможности использовать чистые URL.
После завершения работ с настройкой сервера, мы приступили к созданию на нём нашего сайта.
Мы разрабатывали типы документов с использованием CCK и создали дополнительные блоки с PHP-кодом для управления списками документов.
Кроме того, каждый документ категории «Обсуждение» имеет на сайте связанный с ним документ «Тема форума», назначенный на её категорию, который служит заглушкой для списка связанных документов. Этот подход обеспечивает управление документооборотом для категорий, который уже доступны для документов. Новые темы не будут появляться на сайте до тех пор, пока соответствующий пользователь не опубликует связанный документ «Тема форума».
На всём сайте, код дополнительного блока определяет текущую тему обсуждения и выводит список связанных документов.
Авторы нуждаются в том, чтобы использовать связанные с документом изображения. Это было сделано путём создания дополнительного блока, который показывает изображения прикреплённые к любому документу сайта при помощи поля ImageField.
Первоначально, документы редактировались с помощью TinyMCE. Позднее мы переключили TinyMCE на использование разметки Markdown, что позволило решить некоторые старые проблемы связанные выводом JavaScript текстового редактора (подробности смотрите в статье WYSIWYG vs Markdown).
Модуль CAPTCHA используется для всех полей ввода, которые доступны незарегистрированным посетителям. Мы выбрали Math CAPTCHA на основе изображений, по причине лучшей понятности цифр перед буквами гражданами разных стран.
Переводы документов на разные языки осуществляются на основе типов документов, в которых существует поля типа — ссылка на документ, которое позволяет ссылаться на оригинальный документ. Возможность перевода можно посмотреть на странице http://icitizenforum.com/about, которая содержит описание содержания и цели сайта iCitizenForum.com, также на определённых языках доступен список всех дополнительных ресурсов сайта. Так как всё это было реализовано на основе типов документов и дополнительных полях, эти списки генерируются динамически и расстановка ссылок на переводы была реализована очень быстро и просто.
Переведённые документы оформлены визуально, в виде флагов государств под заголовком каждого документа. В нижней колонке сайта находятся те же самые значки, которые ведут на страницу about на выбранном посетителем языке.
Некоторые из самых интересных возможностей сайта iCitizenForum.com связаны с управлением видеозаписями. На начальной стадии разработки проекта, мы добавляли видео путём вставки кода с сервисов YouTube, Vimeo, Blip и подобных им прямо в содержание документа. Позднее, мы обсудили пути сбора документов с видеозаписями в одну ленту, которая формирует видеобиблиотеку. Кроме того, редакторы видео из Colonial Williamsburg хотели получить возможность управления качеством публикуемых видеозаписей, что означало хранение и обработку этих видеозаписей локально. Мы хотели управлять возможностью сбора видео с других видеосервисов, но хотели улучшения управления качеством оригинальных записей публикуемых на iCitizenForum.com.
Эти новые требования были поставлены перед разработчиками по двум направлениям. Во-первых, мы хотели получить списки видеозаписей в виде видеобиблиотеки. Во-вторых, мы хотели динамически добавлять видео на сервисы подобные YouTube.
Чтобы реализовать первое требование, мы создали модуль VideoLib, который позволяет настраивать вид для вывода видеозаписей, связанных таксономий и связанное видео в отдельных блоках. Модуль переопределяет несколько функций оформления, что позволяет получить более полное управление за тем, как видео будет выглядеть в библиотеке. Это включает JavaScript, который применяет определённые AJAX-действия к таксономии и навигации по связанным видеозаписям, обеспечивает реагирование при просмотре пользователями отдельных страниц.
Видео прикрепляется к документам через CCK-поле. Любой тип документов может содержать видео путём добавления в него этого поля. На странице настройки VideoLib, администратор сайта может определить типы документов, которые будут иметь это поле и из каких типов документов видео будет включаться в библиотеку. Дополнительно, администратор может выбрать словари для вывода их в качестве блоков навигации. В этом случае, мы хотели чтобы темы обсуждения показывались как параметры навигации в левой колонке, но это были бы не теги.
Для получения подобного результата мы могли бы использовать виды с дисплеями из страниц и блоков. Но мы выбрали путь создания дополнительного модуля, который обладает необходимыми возможностями и обладает лучшей портативностью, с потенциальной возможностью использования его на других сайтах.
Мы предприняли попытку, которую сделал Брэд (beeradb), которая быстро переросла в модуль YouTube API, который предоставляет широкие возможности по сбору видеоматериалов и эти возможности вышли далеко за наши первоначальные цели. Модуль YouTube API позволяет программно управлять видео, имеет интеграцию с FeedAPI, видеоленты, комментирование, идентификацию, рейтинги и управление предпочтениями между Drupal-сайтом и сервисом YouTube.
В дополнение к автоматическому размещению видео на YouTube и Vimeo, видеобиблиотека содержит ленту с видеоматериалами, которая включает все документы из библиотеки, их краткое содержание и связанное с ними видео.