Вы здесь

The New York Observer

Версия системы: 
Друпал 6

Известная Нью-Йоркская газета The New York Observer запустила свой сайт на Друпале. Возможности сайта и его дизайн отлично разработаны Рэнди Хазаном, который внимательно отнёсся к типографике и работе с пространством. Разработчики сайтов на Друпале — Моше Вейцман и Барри Джаспен, захотели поделиться некоторыми применёнными на сайте техниками с сообществом Друпала.

The New York Observer

Первая страница и рубрики

Сайт газеты сосредоточен вокруг первой страницы и страниц каналов. Каждый канал охватывает одну из основных тем: политику, медиа, городские события и так далее. А первая страница охватывает самые важные статьи из всех разделов. Так же, как и в печатном варианте газеты, сайт имеет команду профессиональных редакторов, которые выбирают статьи для первой страницы и каналов. Они решают какие статьи поместить на какую позицию на странице, выбирают изображение для каждой статьи, его размер, положение и так далее. Кроме того, редакторы нуждаются в возможности определять статьи для первой страницы и страниц каналов в нужное время, видеть то, как они будут выглядеть в опубликованном виде и публиковать в заданное время. Например, каждый вторник, они собирают новое содержание, обсуждают необходимость публикации той или иной статьи, подготавливают новую версию сайта, которая должна быть опубликована в среду утром. Они также выпускают версии газеты на выходные дни, материалы для которых готовят в пятницу.

Мы рассматривали возможность использования модулей Scheduler, Scheduled Actions и Workflow, но не один из них нам не подошёл. Вместо этого, мы решили использовать другой подход. Мы создали тип документов с использованием CCK для первой страницы и другой тип документов для разделов.

Эти типы в основном собрание полей CCK Node Reference, в которые редакторы помещают статьи и выводят в различные позиции на странице. Так как редакторы также нуждаются в настройке заголовков статей (то есть заголовки статей на первой странице могут не совпадать с заголовками этих же документов при их открытии), мы добавили текстовое поле заголовков для каждого поля CCK Node Reference. Самое важное, мы добавили поле Effective Date для каждого типа документов. Это дата, в которую статья публикуется.

Такая архитектура даёт определённые преимущества:

  • Последовательный вывод. Мы определили шаблон для открытых рубрик, — node-edition_home.tpl.php — который занимается выводом информации на первой странице. Страницы разделов работают схожим образом, но они имеют свои шаблоны, которые немного отличаются
  • Просмотр любой выпуска газеты со страницы этого выпуска
  • Расписание публикаций. Первая страница и страницы разделов используют функцию,которая позволяет выбирать корректную версию документа для этой страницы, после чего обрабатывается вызов node_view($nid)
  • Специальные модули. Так как выпуски состоят из документов, они могут быть легко связаны с категориями таксономии, выводиться различными путями в видах, клонироваться модулем Clone (полезный для нас модуль, так как часто редакторы вносят лишь небольшие правки) и так далее
The New York Observer

Эти преимущества хорошо сравниваются с модулями Scheduler, Scheduled Actions и Workflow. Эти модули отрабатывают при запуске cron и делают очень много небольших изменений в статусе статей. Если бы мы пошли этим путём, редакторы должны бы были тщательно отслеживать каждую статью. Если запуск cron прошёл неудачно или в статье выбраны неверные данные, первая страница сайта будет выглядеть не так, как задумывалось. Но более важно то, что при этом невозможно увидеть, как будут выглядеть эти статьи на первой страницы до того, как они на ней размещены. Архитектура выпусков проста, точна, легче управляется и отвечает всем требованиям сайта.

Архитектура данных

После первой страницы сайта и страниц каналов, наиболее важными страницами являются страницы статей. Статья — это тип документов, который расширен большим количество дополнительных полей: подзаголовок, изображение, краткое содержание и других. К тому же, статьи связаны с другими типами документов с помощью поля CCK Node Reference:

  • Автор. Каждый журналист, или колумнист, имеет свой документ. Документы «Автор» отличаются от профилей пользователей, так как обычно авторы передают статью редактору, и в действительности статья добавляется на сайт редактором, а не человеком, который её написал. Соответственно автором созданной статьи станет редактор, так как именно из его аккаунта создаётся статья. Однако, в статье нужно указать не имя редактора, а имя человека написавшего статью. Каждая статья может ссылаться на одного или нескольких авторов
  • Колонки. В колонках статьи группируются вместе и начинают выглядеть как серии статей одного автора, группы статей на определённую тему нескольких авторов или любым другим логическим способом. Колонки являются документами и каждая статья может ссылаться на одну или несколько колонок
  • Выпуски. Кроме первой страницы и страниц каналов, у сайта есть выпуски, которые соответствуют выпускам печатной версии газеты. Статьи могут ссылаться на выпуски, в которых они печатаются и это делает возможным просматривать старые выпуски газеты, что реализовано через блок «В этом выпуске»
The New York Observer

Перенос данных

На новый сайт необходимо было перенести электронную версию архива газеты, который начинается с 1997 года.

В архиве содержалось около 22 000 статей в формате Microsoft Access/ASP и XML, который использовался для распространения статей в других организациях. Кроме того, имелось 6 блогов на Moveable Type, в которых было несколько тысяч документов и комментариев. Каждая из этих статей находилась в одном из каналов, имела одного или нескольких авторов, была в одной или нескольких колонках и разумеется состояла из обычных полей, таких как заголовок и содержание. Некоторые из этих статей находились в источниках в виде нескольких копий и требовалось устранение этих дубликатов.

Так как было большое количество данных в нескольких форматах, мы не могли их все обработать за один раз. Мы не могли, например, определить полный список авторов и колонок, создать эти данные, а при переносе только определять и присваивать документам авторство, так как в этом списке, нужного автора могло не оказаться. К тому же, мы хотели перенести часть данных (например, одну базу данных Access или только два XML-файла, или только три блога) для тестирования сайта.

Мы разработали мощную и гибкую систему, которая учитывала все требования и динамически создавала каждую запись и её связи (статья, автор, колонка, версия для печати, канал и так далее) если они встречались при обработке. Например, если статье требовался номер документа автора (NID), вызывалась функция get_author_nid($author_name). Если документ автора находился, то статья ссылалась на найденный документ, если нет, то запись (документ) об авторе создавалась динамически. Все записи обрабатывались таким образом, чтобы при создании статьи создавались все её связи если это было нужно, или ссылки, если информация об этих связях ещё не была записана.

В целом, при переносе было создано около 26 000 документов (статей, авторов, колонок, версий для печати и других необходимых типов документов).

Управление блоками

Обновление: теперь это возможно с помощью модуля Block Page Visibility.

На этом сайте используется большое количество блоков, которые имеют сложные параметры, влияющие на их вывод на той или ной странице. Мы начали с посещения страницы параметров каждого блока и заполнения правил видимости. Это было трудным занятием, из-за чего мы переключились на другой подход. Мы создали массив в шаблоне нашей темы, который для каждого блока определял тип документа, путь страницы и специальные правила, которые определяли, будет ли блок выводится при открытии определённой страницы. Определение специальных правил позволило использовать для блоков очень сложные правила, например «показать блок на странице статьи, но только если статья находится в колонке, которая является одной из шести колонок для блога».

Централизация управления видимостью блоков стала необычно удобным походом и позволила управлять видимостью значительно проще и быстрее.

Флеш-приложение через XML-ленту

The New York Observer

Главной возможностью первой страницы и страниц каналов стало флеш-приложение, которое выводит миниатюры или большие изображения из определённых статей. Содержание, выводимое этим флеш-приложением, отличается для первой страницы и страниц каналов. Всё необходимое ему содержание храниться в полях CCK, считывается из них и обрабатывается по определённым правилам.

На первой странице интересно выглядит облако голов. В отличие от общепринятого на сайтах облака тегов, теги в нём заменены на изображения упоминаемых в статьях людей. Модуль Statistics считает количество просмотров статей, а в облаке выводятся головы людей, статьи с упоминаниями которых наиболее популярны за последние 72 часа.

Для этого облака существует свой XML-файл — http://www.observer.com/headcloud. Для его генерации используется функция ormat_xml_elements().

Встретившиеся проблемы

Для нас не стало сюрпризом, что в процессе разработки сайта мы столкнулись с несколькими неожиданными проблемами. Как обычно, сталкиваться с ними приходилось в последнюю минуту. Вот некоторые из них:

  • Использование HTML-кода в заголовках статей. Редакторы газеты безапелляционно потребовали возможности использовать в заголовках жирный шрифт, курсив и знак ®. Друпал, однако, предполагает вывод заголовка только в виде обычного текста. Мы изменили код ядра и нескольких дополнительных модулей, чтобы разрешить использование в заголовках HTML-кода (и хотели бы обсудить, как добавить эту возможность в Друпал 6)
  • Упорядочивание в пределах CCK-поля содержащего несколько значений. Мы не имели возможности предоставить редакторам возможность упорядочивать поля CCK Node reference, которые содержали ссылки на несколько документов. Нам пришлось создать различные поля для «Новости 1», «Новости 2» и так далее. Это привело к тому, что в итоге у нас было значительно больше полей, чем мы хотели. Мы думаем, чтоб было бы очень удобным реализовать возможность упорядочивания CCK-полей, которые содержат несколько значений
  • Модуль Clone не клонировал поля модуля ImageField. Так как каждая статья может содержать оригинальное изображение и множество миниатюр, то это существенное ограничение
  • Ну и как обычно, совместимость с Internet Explorer. Мы обнаружили, что в IE 7 исправлены многие ошибки существующие в IE 6, но в основном он остался таким же неприятным браузером

Издания на Друпале

Друпал становится CMS, которую выбирают издательства. Если вам интересна эта область использования системы, то вы можете присоединиться к группе Newspapers.

Контактная информация