Известная Нью-Йоркская газета The New York Observer запустила свой сайт на Друпале. Возможности сайта и его дизайн отлично разработаны Рэнди Хазаном, который внимательно отнёсся к типографике и работе с пространством. Разработчики сайтов на Друпале — Моше Вейцман и Барри Джаспен, захотели поделиться некоторыми применёнными на сайте техниками с сообществом Друпала.
Сайт газеты сосредоточен вокруг первой страницы и страниц каналов. Каждый канал охватывает одну из основных тем: политику, медиа, городские события и так далее. А первая страница охватывает самые важные статьи из всех разделов. Так же, как и в печатном варианте газеты, сайт имеет команду профессиональных редакторов, которые выбирают статьи для первой страницы и каналов. Они решают какие статьи поместить на какую позицию на странице, выбирают изображение для каждой статьи, его размер, положение и так далее. Кроме того, редакторы нуждаются в возможности определять статьи для первой страницы и страниц каналов в нужное время, видеть то, как они будут выглядеть в опубликованном виде и публиковать в заданное время. Например, каждый вторник, они собирают новое содержание, обсуждают необходимость публикации той или иной статьи, подготавливают новую версию сайта, которая должна быть опубликована в среду утром. Они также выпускают версии газеты на выходные дни, материалы для которых готовят в пятницу.
Мы рассматривали возможность использования модулей Scheduler, Scheduled Actions и Workflow, но не один из них нам не подошёл. Вместо этого, мы решили использовать другой подход. Мы создали тип документов с использованием CCK для первой страницы и другой тип документов для разделов.
Эти типы в основном собрание полей CCK Node Reference, в которые редакторы помещают статьи и выводят в различные позиции на странице. Так как редакторы также нуждаются в настройке заголовков статей (то есть заголовки статей на первой странице могут не совпадать с заголовками этих же документов при их открытии), мы добавили текстовое поле заголовков для каждого поля CCK Node Reference. Самое важное, мы добавили поле Effective Date для каждого типа документов. Это дата, в которую статья публикуется.
Такая архитектура даёт определённые преимущества:
Эти преимущества хорошо сравниваются с модулями Scheduler, Scheduled Actions и Workflow. Эти модули отрабатывают при запуске cron и делают очень много небольших изменений в статусе статей. Если бы мы пошли этим путём, редакторы должны бы были тщательно отслеживать каждую статью. Если запуск cron прошёл неудачно или в статье выбраны неверные данные, первая страница сайта будет выглядеть не так, как задумывалось. Но более важно то, что при этом невозможно увидеть, как будут выглядеть эти статьи на первой страницы до того, как они на ней размещены. Архитектура выпусков проста, точна, легче управляется и отвечает всем требованиям сайта.
После первой страницы сайта и страниц каналов, наиболее важными страницами являются страницы статей. Статья — это тип документов, который расширен большим количество дополнительных полей: подзаголовок, изображение, краткое содержание и других. К тому же, статьи связаны с другими типами документов с помощью поля CCK Node Reference:
На новый сайт необходимо было перенести электронную версию архива газеты, который начинается с 1997 года.
В архиве содержалось около 22 000 статей в формате Microsoft Access/ASP и XML, который использовался для распространения статей в других организациях. Кроме того, имелось 6 блогов на Moveable Type, в которых было несколько тысяч документов и комментариев. Каждая из этих статей находилась в одном из каналов, имела одного или нескольких авторов, была в одной или нескольких колонках и разумеется состояла из обычных полей, таких как заголовок и содержание. Некоторые из этих статей находились в источниках в виде нескольких копий и требовалось устранение этих дубликатов.
Так как было большое количество данных в нескольких форматах, мы не могли их все обработать за один раз. Мы не могли, например, определить полный список авторов и колонок, создать эти данные, а при переносе только определять и присваивать документам авторство, так как в этом списке, нужного автора могло не оказаться. К тому же, мы хотели перенести часть данных (например, одну базу данных Access или только два XML-файла, или только три блога) для тестирования сайта.
Мы разработали мощную и гибкую систему, которая учитывала все требования и динамически создавала каждую запись и её связи (статья, автор, колонка, версия для печати, канал и так далее) если они встречались при обработке. Например, если статье требовался номер документа автора (NID), вызывалась функция get_author_nid($author_name). Если документ автора находился, то статья ссылалась на найденный документ, если нет, то запись (документ) об авторе создавалась динамически. Все записи обрабатывались таким образом, чтобы при создании статьи создавались все её связи если это было нужно, или ссылки, если информация об этих связях ещё не была записана.
В целом, при переносе было создано около 26 000 документов (статей, авторов, колонок, версий для печати и других необходимых типов документов).
Обновление: теперь это возможно с помощью модуля Block Page Visibility.
На этом сайте используется большое количество блоков, которые имеют сложные параметры, влияющие на их вывод на той или ной странице. Мы начали с посещения страницы параметров каждого блока и заполнения правил видимости. Это было трудным занятием, из-за чего мы переключились на другой подход. Мы создали массив в шаблоне нашей темы, который для каждого блока определял тип документа, путь страницы и специальные правила, которые определяли, будет ли блок выводится при открытии определённой страницы. Определение специальных правил позволило использовать для блоков очень сложные правила, например «показать блок на странице статьи, но только если статья находится в колонке, которая является одной из шести колонок для блога».
Централизация управления видимостью блоков стала необычно удобным походом и позволила управлять видимостью значительно проще и быстрее.
Главной возможностью первой страницы и страниц каналов стало флеш-приложение, которое выводит миниатюры или большие изображения из определённых статей. Содержание, выводимое этим флеш-приложением, отличается для первой страницы и страниц каналов. Всё необходимое ему содержание храниться в полях CCK, считывается из них и обрабатывается по определённым правилам.
На первой странице интересно выглядит облако голов. В отличие от общепринятого на сайтах облака тегов, теги в нём заменены на изображения упоминаемых в статьях людей. Модуль Statistics считает количество просмотров статей, а в облаке выводятся головы людей, статьи с упоминаниями которых наиболее популярны за последние 72 часа.
Для этого облака существует свой XML-файл — http://www.observer.com/headcloud. Для его генерации используется функция ormat_xml_elements().
Для нас не стало сюрпризом, что в процессе разработки сайта мы столкнулись с несколькими неожиданными проблемами. Как обычно, сталкиваться с ними приходилось в последнюю минуту. Вот некоторые из них:
Друпал становится CMS, которую выбирают издательства. Если вам интересна эта область использования системы, то вы можете присоединиться к группе Newspapers.