Вы здесь

Information.dk

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

Information — это ежедневная газета, распространяемая в Дании. Газета выходит 6 дней в неделю тиражом в 22 000 экземпляров и имеет около 100 000 читателей. До недавнего времени сайт бумажной газеты работал на самописном движке, но 28 августа 2007 года был запущен на Друпале. Сайт был разработан Дженсем Кристофферсеном, а реализован на Друпале Джо Вехнером. Руководил проектом Николай Тиссен, медиаруководитель газеты.

Тестирование

Разработка сайта заняла приблизительно полгода, но прежде чем начать эту работу, мы предварительно запустили на Друпале блог luftskibet.information.dk (luftskibet на датском, это то же самое, что airship на английском).

Мы начали с подсайта, чтобы получить опыт работы с Друпалом, прежде чем переводить на него основной сайт. Luftskibet был разработан на Друпале 4.7 и мы запустили его 4 октября 2006 года в качестве домашнего сайта для блогов наших журналистов. Одной из вещей которую мы выучили за запуск нашего тестового сайта, была терминология Друпала. Некоторые вещи которые мы использовали на Luftskibet, сделаны на сегодняшний день по-другому, но этот сайт был действительно хорош для старта. Наш опыт использования Luftskibet и визит (который был великодушно устроен Кеном Рикардом и Стивом Иелвингтоном) в The Savannah Morning News, убедил нас в том, что Друпал это удачный выбор и для основного сайта.

Первоначально, Luftskibet был запущен на WordPress, но благодаря модулю миграции на Друпал, переход на Друпал был очень прост.

Основной сайт

Разработка основного сайта была начата в феврале 2007 года.

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

Первоначально, больше всего нас беспокоил перенос наших архивов. Наш архив начинается с 1997 года и содержит более 180 000 статей, но как уже ясно на сегодняшний день, это было легче, чем мы ожидали. Статьи нашей старой системы также хранились в базе данных MySQL, таким образом нам потребовалось только передать нашу базу данных разработчикам. Статьи базы данных были обработаны с использованием PHP-кода, для каждой записи был создан свой документ, мы изменили соединение с базой данных и использовали node_save() для вставки всех статей в новую базу. Как только мы поняли структуру документов в Друпале, мы всё сделали значительно проще, чем боялись этого.

Ежедневный импорт

Бумажная версия Information выпускается в SaxoPress. Когда статьи готовы к печати, они экспортируются с нашего сервера в виде XML-файлов (в большинстве случаев используется NITF-формат) с изображениями. Изначально, мы хотели разработать NITF-модуль, но так как у нас был свой тип документов и потому что XML-файлы генерируемые нашей системой не совпадали полностью со стандартом NITF было невозможно было однозначно извлекать информацию и выложить модуль в общее пользование. Если вас интересует код использованный нами, вы можете связаться с Джо Вехнером.

CCK

Наши статьи — это отдельный тип документов. Мы не разрабатывали для этого свой модуль, а взяли CCK. Поля в этом типе документов первоначально полностью совпадали с информацией из печатной версии издания. Но для того, чтобы сделать подзаголовки и другую информацию более удобной для использования в сети, мы сделали дубликаты некоторых полей, чтобы представленную в них информацию было удобнее использовать на первой странице сайта и в списках, в то же время открытая страница документа представляет собой оригинальное содержание бумажной версии. Кроме дублирования некоторых полей, мы также включили в этот тип документов поля ImageField для изображений в отрытой статье и изображений, которые выводятся на первой странице.

Таксономия

Статьи первоначально имели только один словарь, который соответствовал рубрике статьи в бумажной версии. Но затем мы начали создавать различные рубрики на сайте и обнаружили, что нам требуется более интенсивное использование таксономии для того чтобы распределять и отображать содержание таким образом, как мы хотим. Так мы добавили словарь «Жанр» (с терминами «Заметка», «Обзор», «Редакционная статья», «Хроника» и так далее) и «Подрубрика» (со свободным вводом тегов). Перед самым запуском сайты мы увидели, что подзаголовки статей часто используются для тегов указывающих на другие категории, так как колонки газеты часто используют один подзаголовок. Таким образом мы заменили текстовые поля использовавшиеся для подзаголовков на таксономию.

Information.dk

Первая страница

На первой странице мы используем панели и виды, также мы используем модуль Preempt Panels. Панели позволяют нам сделать сложной макет страницы и до того, как мы стали использовать этот модуль, загрузка первой страницы занимала достаточно продолжительное время. Спасибо Давиду Штраусу за его модуль столь эффективно кеширующий панели.

Публикация главных статей управляется модулем Nodequeue. Это очень простое и эффективное решения для обработки статей и определения приоритета новостей.

Виды

Наши рубрики (например «Культура») были первоначально сложными видами, выводящими статьи из одной или нескольких категорий, с исключением других категорий и сортировкой по дате. Это было причиной плохого быстродействия наших рубрик. Мы не знали что делать и связались с Давидом Штраусом, так как мы были под впечатлением от его работы с панелями. Следуя его советам, мы создали три новых модуля. Один для каждой рубрики с использованием Node API Hook для вставки статей в отдельные таблицы если они удовлетворяли условиям оригинального вида. Это действительно хорошо работает. Снова отличная работа Давида Штрауса.

Это не значит, что нам не нравятся виды. Мы используем их во многих местах — почти везде кроме трёх рубрик с первой страницы. Виды очень хороши для сбережения времени разработки, потому что они позволяют создавать сложные страницы без программирования и без них потребовалось бы потратить много времени на создание кода. Поэтому мы благодарим Эрла Майлса и других людей работающих над Views. Views — это очень важный модуль.

Изображения

Так как мы имеем только ограниченные права на изображения, мы используем их только две недели, а затем должны заставить изображения исчезать. Мы сделали это в теме. Если статья старше двух недель, то изображение и её подпись не показываются.

Почти для всех изображений мы используем фантастический модуль ImageCache. Этот модуль не используется только для изображений в профилях и изображений для первой страницы. Но так как наши изображения для печати получаемые от редакторской системы слишком огромны для нашего трудолюбивого веб-сервера, мы делаем предварительное масштабирование с использованием AppleScript и Image Event.

Доступ к статьям

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

Поиск

Одним из самых значительных вопросов стоявших перед нами был поиск. Использовать встроенную поисковую систему Друпала для индексирования и поиска по более чем 180 000 статьям было невозможно. С нашим количеством данных, стандартный модуль поиска не может обеспечить хорошее качество поиска. После нескольких недель проведённых в отчаянии, другая датская газета ведущая свой сайт на Друпале, показала нам Sphinx.

Sphinx — это самостоятельный поисковый движок и движок работающий с базами данных MySQL (SphinxSE). Чтобы Sphinx работал в качестве движка хранящего информацию, он должен быть скомпилирован для работы с MySQL. Мы попытались сделать это, но у нас не получилось. К счастью, нам помог наш хостер. Потребовалось около месяца для индексации нашей базы данных стандартным модулем Search, Sphinx сделал это за несколько минут. Sphinx работает очень быстро как с индексацией, так и с поиском.

Огромное спасибо Андрею Аксёнову, отцу Сфинкса. Это действительно фантастический проект!

Управление сайтом

Для внутренней работы с сайтом мы используем тему Garland. Кроме стандартных страниц управления содержанием, мы добавили виды с некоторыми действиями модуля Actions. Мы используем это для вывода всех статей за день на одной странице. Мы также сделали вид в блоке, который выводит все неопубликованные статьи. Это позволяет дать лёгкий доступ к этим статьям людям, которые занимаются их доводкой и распределением по рубрикам.

Information.dk

Другие модули

Вдохновлённые примером The New York Observer, мы используем модуль Related Links. Модуль Block Cache помогает нам увеличить быстродействие всех страниц за исключением первой. Для создания удобных поисковым машинам адресов статей и в целях сделать эти адреса более удобными для копирования, мы используем невероятный модуль Pathauto. Список дополнительных модулей можно посмотреть ниже.

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

Инфраструктура

Если вас интересует техническое обеспечение нашего сайта, то сайт работает на сервере HP D1140G3, 1,6 GHz Intel Quadcore CPU, 5 Gb RAM и два 73 Gb SAS 15 K диска (RAID 1) под управлением CentOS.

Теперь, дадим слово Дженсу, нашему дизайнеру.

Оформление сайта

Много внимания было уделено дизайну нового сайта. Мы быстро выяснили, что мы должны выйти за существующие шаблоны чтобы получить то, что мы хотим. А хотели мы придать сайту настоящий газетный вид и создать у посетителей ощущение чтения газеты. Особенно на первой страницы было важно уйти от блогового формата из списка новый статей появляющихся сверху (формата «потока новостей» как говорит Дэйв Винер).

Макет первой страницы

У нас было несколько идей насчёт того, как организовать статьи на первой странице и мы сделали несколько макетов. Некоторые из этих идей мы используем в текущем дизайне: разделение первой страницы на три основные области друг за другом, в каждой области используется различные макеты; организацию основных статей (отражающую важность статей) и так далее.

Одним очень важным аспектом однако, было решение использовать макет основанный на сетке. Стандартный пример такого макета, сайт NYTimes.com, такой же макет стали использовать после перезапуска Timesonline.co.uk и Guardian.co.uk.

Основной макет используемый для information.dk представляет из себя простую шестиколоночную сетку. Каждая колонка имеет ширину в 140 пикселей (+20 пикселей пространства между колонками), позволяя комбинировать все типы. В настоящий момент мы использует три различных ширины для содержания (включая рекламу) на первой странице: 140 пикселей (одна единица), 300 пикселей (две единицы + пространство) и 460 пикселей (три единицы + пространство). Основная колонка для секций и шаблон статей шириной 620 пикселей (четыре единицы + пространство).

Первая страница включает, как упомянуто выше, три основных области. Вверху, где сегодняшние самые читаемые статьи (сюрприз!) и это также одна из самых важных «свободных областей» сайта, где мы выводим некоторые из самых динамичных частей сайта (обновление блогов, последние комментарии и так далее). Центральная секция в основном содержит два списка статей только для подписчиков. Идея состоит в том, что предоставляется простой путь для обзора сегодняшнего содержания. Нижняя секция это «медленное место», с содержанием «лучшее из...» — сборники статей. Различные принципы организации собираются вместе путём использования сетки.

Решение использования макета со строгой сеткой пришло позднее, в процессе работы над сайтом. К счастью, большая часть уже проделанной работы могла быть быстро откорректирована на использование нового стиля. Одно из главных преимуществ использования сетки — это модульность. Содержание может быть легко перемещено из одного места в другое и мы нашли эту гибкость очень удобной и хорошо сочетающейся с логикой работы видов, блоков и списков документов. Когда работа связана с ежедневным управлением (редактированием статей) и продолжается работа над сайтом, дизайном и статьями, макет основанный на единицах позволяет легко работать с сайтом.

Продолжение макетов: секции и статьи

Сложность макета первой страницы заметно контрастирует с относительной простотой секций и статей. Шаблон статьи был разработан для максимального удобства чтения статьи. Это было для нас очень важным, так как содержание газеты — это длинные осмысленные статьи. Мы потратили много времени пытаясь сбалансировать шрифты, размеры, промежутки, размещение изображений, блоки внешних ссылок и тому подобное.

Проектировать один шаблон переменной длины и ширины для статей всегда сложно, а компромисс обязательно нужен. Мы продолжаем совершенствовать шаблон и я надеюсь, что мы сможем вскоре добавить ему большей гибкости, например относительно вывода изображений.

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

Information.dk

И последнее: работа с CSS

Несколько верстальщиков жаловались на способ, которым Друпал генерирует код. Такая простая вещь как добавление списка в блок, и Друпал выдаёт такие классы слоёв, которые запутают кого угодно. Как с этим справиться?

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

Переключаемся обратно на Джона.

Текущие задачи

После того, как мы справились с маленькими ошибками и глупостями, пришло время справляться большими. Одна из первых задач, в решении которой мы нуждаемся, это обновление поиска. Мы хотим увеличить количество характеристик, которые используются для поиска. Другой задачей является реализация сортировка материалов за день, мы хотели бы сделать список статей за один день отдельным списком. И наконец последним вопросом является то, что блог представляет из себя отдельный сайт. Мы хотим интегрировать его с основным сайтом и скорее всего воспользуемся для этого возможностями мультисайтинга.