| Июль 2008 | ||||||
| ПН | ВТ | СР | ЧТ | ПТ | СБ | ВС |
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||
Information является ежедневной независимой газетой, распространяемой по всей Дании, а также в Европе. Она выходит шесть дней в неделю с тиражом 22 000 экземпляров и имеет около 100 000 читателей. До недавнего времени сайт газеты, information.dk, был основан на самостоятельно написанной CMS. С 28 августа 2007 года сайт работает на Drupal. Дизайн и CSS были сделаны Йенсом Кристофферсеном, а всевозможные хаки Drupal были сделаны Йохсом Венером. Проектом руководил Николай Тиссен, директор нового медиа.
Сайт information.dk является результатом разработки, длившейся примерно полгода, но, прежде чем мы начали эту работу, мы запустили блог, luftskibet.information.dk ("luftskibet" переводится с датского как "дирижабль"), разработанный на Drupal.
Мы сделали это, чтобы набить руку и получить определённый опыт в разработке Drupal-сайтов, до погружения в разработку основного сайта. "Luftskibet" был разработан в Drupal 4.7, запущен 4 октября 2006 года и с этого времени является родиной для блогов наших журналистов. Одной из вещей, которых мы достигли в результате нашего тестового исследования, было изучение полной терминологии Drupal. Некоторые вещи, которые мы сделали для "Luftskibet", сегодня будут сделаны в несколько другом стиле, но тем не менее, это был действительно хороший способ, чтобы начать. Наш опыт с "Luftskibet", а также визит - любезно организованный Кеном Рикардом и Стивом Йелвингтоном - в The Savannah Morning News, убедил нас в том, что Drupal это тут путь, по которому пойдёт и наш главный сайт.
Первоначально "Luftskibet" был основан на WordPress, но его было довольно легко портировать на Drupal благодаря модулю миграции с Wordpress на Drupal. Это означает, что мы не имели представления о том, насколько сложным будет портирование главного сайта.
Разработка главного сайта началась в феврале 2007 года.
Импорт нашего архива первоначально была одной из наших самых серьёзных трудностей. Наш архив восходит к 1997 году и состоит из более чем 180 000 статей, но, как выяснилось, это было гораздо проще, чем мы ожидали. Статьи в нашей старой системе также хранились в MySQL, так что мы просто сделали базу данных MySQL на нашем рабочем сервере, выделенном для разработки, прошлись по статьям в базе данных, используя php, и создали документ (ноду) для каждой статьи, сменив подключение к базе данных, и использовав функцию Drupal'а node_save(), чтобы вставить все статьи в базу данных. После того, как мы поняли, как построена структура документа (ноды) в Drupal, импорт оказался не столь болезненным, как мы опасались.
Бумажный вариант газеты Information производится в SaxoPress. Как только статьи готовы к печати, они экспортируются на наш веб-сервер как xml-файлы (почти NIFT-формат, но не совсем) с изображениями в формате jpg. Первоначально мы надеялись разработать NIFT-модуль, но поскольку у нас есть собственный тип документов, и потому что xml, генерируемый нашей системой не является совместимым со стандартным форматом NIFT (требующий много разного рода уродливых хаков), невозможно было сделать достаточно абстрактный код, чтобы выложить действительно полезный модуль в общий доступ. Если Вы заинтересованы в этом коде, вы можете связаться с Йохсаном Венером.
Наши статьи имеют свой собственный тип материалов. Мы не разрабатывали новый модуль, мы просто используем CCK. Первоначально тип материалов точно отражал структуру печатных статей. Но для того, чтобы сделать подзаголовки и другие текстовые форматы более подходящими для использования в Интернет, мы продублировали некоторые из полей, так что ими теперь можно манипулировать и использовать на главной странице и при формировании списков, в то время как на странице просмотра можно сохранить исходное содержание. Кроме дублирования текстовых полей (используя поле CCK типа textfield), мы также включили поля для вставки изображений (поле CCK типа imagefield) для альтернативных изображений и изображений только для главной страницы.
Первоначально тип материалов, предназначенный для размещения статей, имел лишь один словарь, отражающий редакционные столы газеты. Но когда мы приступили к разработке других разделов сайта, мы выяснили, что нам необходимо более широко использовать таксономию, чтобы публиковать и отображать содержимое так, как мы хотели. Поэтому мы сделали словарь "Жанр" ("Genre" по-английски, в этом словаре были такие термины, как, например, "Заметка" ("Note"), "Обзор" ("Review"), "Редакционная колонка" ("Editorial"), "Хроника" ("Cronicle") и т.д.) и словарь "подразделов", содержащий документы наиболее общих тем, для него мы сделали свободный ввод тегов. Незадолго до старта мы выяснили, что подзаголовки статей можно использовать в качестве ещё одной категории со свободным вводом тегов, поскольку колонки часто использовали одни и те же подзаголовки в течении всего времени. Поэтому мы преобразовали его из обычного текстового поля в таксономию.
Наша главная страница сделана при помощи модулей
Публикация лучших статей сделана с помощью удобного модуля Node Queue. Это очень простой, но эффективный способ обработки и расстановки приоритетов новостей.
Наши разделы сайта (например, раздел "Культура") первоначально были сложными элементами модуля Views, которые показывали статьи из одной или более категорий, при этом исключая статьи из других категорий, сортируя выводимые статьи по дате. Это в конце концов привело к низкому быстродействию наших разделов. Мы не знали, что делать, поэтому мы связались с Дэвидом Страусом, потому что мы были очень впечатлены его работой - модулем PressFlow Preempt Panels. Последовав его совету, мы создали три новых модуля, по одному для каждого раздела, используя хуки API нод, чтобы вставить статьи в отдельную таблицу, если они удовлетворяют условиям, которые мы первоначально задали для элемента модуля Views. Он назвал это materialized views - вдохновившись примером Oracle. Это работает очень хорошо. Снова замечательная работа Дэвида Страуса.
Это не означает, что нам не нравится модуль Views. Мы используем его во многих других разделах сайта - почти везде, кроме трёх вышеперечисленных разделов и главной страницы. Использовать модуль Views означает для нас сэкономить много времени, потраченного на разработку, потому что не-программисты могут довольно легко построить нужные страницы, для построения которых в другом случае потребовалось бы время для написания кода. Поэтому большая от нас благодарность Эрлу Майлсу и другим специалистам, работающими над Views. Views - это очень важный вклад.
Поскольку у нас есть только цифровые права на изображения, которые мы используем в работе в течении двух недель, мы вынуждены были сделать изображения исчезающими. Мы реализовали это в теме. Если статья старше двух недель, картинка и её подпись не отображается.
Мы используем фантастический модуль Imagecache практически для всех наших изображений, за исключением изображений в профиле пользователя и изображений, сделанных специально для главной страницы. Но поскольку мы выяснили, что огромные по размеру, подготовленные для печати картинки, поступающие из нашей редакционной системы, слишком большие для нашего загруженного веб-сервера, мы предварительно масштабировали их с помощью applescript и "Image Event".
Для контроля доступа мы используем самостоятельно доработанный вариант модуля Premium. Этот модуль работает прекрасно, но потому, что у нас есть несколько видов подписки, нам нужно было доработать его, чтобы обеспечить для подписчиков, которые подписываются на всю неделю, несколько других привилегий, чем для тех подписчиков, кто подписывается только на выходные.
Одной из наших самых серьезных задач являлся поиск. Использование встроенного в Drupal модуля поиска, чтобы проиндексировать 180 000 статей, оказалось невозможным. С нашими объемами данных, стандартный поисковый модуль просто не в состоянии был это сделать. Поэтому, после нескольких недель отчаяния, другая датская газета делает Drupal-проект, ориентированный на
Большое спасибо отправляется Андрею Аксёнову, отцу-основателю проекта Sphinx. Это действительно фантастический проект!
Мы используем тему Garland для администрирования. Помимо встроенных администрационных страниц, мы сделали страницу, позволяющую осуществить некоторые действия, с помощью модуля Actions. Мы используем её, чтобы показать все статьи одного дня на одной странице. Мы также сделали небольшой блок (сгенерированный с помощью модуля Views), показывающий все неопубликованные материалы. Эта страница даёт людям возможность помечать статьи, и расширяет возможности предварительного обзора и восприятия наших статей.
Следуя примеру газеты The New York Observer, мы используем модуль Related Links. Модуль blockcache помогает нам улучшить производительность почти всех страниц, за исключением главной.
Чтобы сделать дружественные к SEO и пригодные для быстрого копипаста короткие ссылки, мы используем сказочный Pathauto.
Также мы используем:
Мы создали около 15 собственных модулей для обработки импорта, пользователей (мы используем электронную почту в качестве имени пользователя, а также нам необходимо отдельное имя пользователя, которое отображалось бы на сайте), пользовательских страниц (как для подписчиков, так и для журналистов и обычных Drupal-пользователей, поэтому мы нуждались в некоторых настройках), привилегий для подписчиков, веб-трекера, поиска, интеграции с сайтами-блогами т.д.
В случае если кого-либо это заботит, наш сайт работает на операционной системе CentOS сервера HP dl140g3 с четырёхъядерным процессором частотой 1,6 ГГц от Intel, сервер имеет 5 Гб памяти и два жёстких диска SAS 15 K по 73 Гб каждый, объединенённых в дисковый массив RAID1.
Теперь мы передаём слово Йенсу, нашему дизайнеру и верстальщику:
Немало внимания было уделено разработке дизайна нового сайта. Мы быстро поняли, что должны отойти от простого изменения уже существующих шаблонов, чтобы получить то, что хотим, чтобы придать сайту газеты хороший вид. Особенно важно было отойти от шаблонов на главной странице, блогоподобного формата записи статей "новейшие в начале" (формата "река новостей", как Дэйв Винер бы назвал его).
На раннем этапе у нас было множество идей о том, как организовать новости на главной странице, и мы сделали несколько прототипов с более или менее подробными выкладками. Многие из этих идей используются и в текущем дизайне: разделение главной страницы на три основные области с заголовком на каждой, каждая область имеет собственный принцип разметки; различные способы структурировать популярные новости (с учетом важности этой новости) и т.д.
Одним из очень важных аспектов, однако, было решение об использовании разметки на основе сетки. Типичный пример использования сеточной разметки - сайт NYTimes.com, но обновлённый сайт Timesonline.co.uk и, недавно, Guardian.co.uk являются заметными примерами другого подхода.
Основной разметкой, используемой для information.dk, является достаточно простая шестиколоночная сетка. Каждая колонка имеет ширину 140px (+ 20px промежуток между колонками), и они комбинируются всевозможными методами. На данный момент мы используем три различных ширины для содержания (в том числе для рекламы) на главной странице: 140px (один информационный модуль), 300px (два модуля + интервалы), и 460px (три модуля + интервалы). Основная колонка шаблона для раздела сайта и статьи имеет ширину 620px (четыре модуля + интервал).
Таким образом, как показано выше, главная страница состоит из трёх основных областей. В самом верху идут свежие статьи за сегодня (сюрприз!), и эта зона также является важной для всех и всего "свободной зоной", где мы показываем некоторые из наиболее динамичных разделов сайта (обновления блога, последние комментарии и т.д.) Средний раздел в основном предназначен для показа двух списков статей только для подписчиков. Идея здесь заключается в том, чтобы обеспечить наиболее простой обзор сегодняшних материалов. Нижний раздел в гораздо большей степени является "медленным" разделом, включающим в себя "Лучшее" - сборник луших статей. Разные принципы организации материалов существуют совместно на одной сетке.
Решение о применении более плотной сеточной разметки пришло довольно поздно в процессе разработки дизайна. К счастью, большая часть работы, которую мы уже сделали, могла быть скорректирована без особых хлопот. Одним из основных преимуществ использования сетки является модульность, которую она предлагает. Материалы можно легко перенести из одного места в другое, и мы обнаружили, что эта гибкость работает очень хорошо с логикой видов представления материалов, блоков и последовательностей документов в Drupal. Когда речь заходит о повседневном обслуживании (редакционном, а не техническом), последовательная разработка сайта, дизайна и типов материалов, помодульная разметка позволяет проще работать с различными вещами.
Сложность разметки главной страницы контрастировала с относительной простотой страниц основных разделов сайта и статей. Шаблон статьи был разработан таким образом, чтобы повысить удобочитаемости. Это было важно для нас, поскольку газета известна своими длительными углубленными статьями. Мы тратим много времени для нахождения правильного баланса шрифтов, размеров, различных выделений, а также на размещение изображений, внешних ссылок и т.д.
Разработка шаблона статей в формате "фиксированный размер для всего", это всегда сложно, и компромиссы были достигнуты. Мы будем продолжать совершенствовать шаблон, и я надеюсь, что мы сможем в скором времени добавить больше гибкости, например, в том, что касается представления изображений.
Разделы были довольно простыми (списки с разбивкой на страницы в нижней части), но требовали определенного внимания к тому, как статья представляется в качестве элемента списка. Мы используем автоматически обрезанные квадратные эскизы (когда доступно изображение), которые дают неожиданно хорошие результаты. С квадратной формой очень легко работать, и придаёт странице непротиворечивый вид, то, что в ином случае было бы трудно достигнуть, захоти мы интегрировать эскизы пейзажев и портретов в дизайне. Первоначально успешного использование Flickr'ом (и другими сайтами обмена фотографиями) квадратных эскизов натолкнул нас в этом направлении, и я подсчитал, что более 80% этих автоматически обрезанных изображений полностью пригодны к использованию. Что касается остальных, менее элегантно обрезанных эскизов, так было бы хорошо иметь простую встроенную функцию редактирования.
Некоторые дизайнеры и составители CSS-файлов жаловались на то, как Drupal генерирует код. Такая простая вещь, как добавление списка в блок, и Drupal выплёвывает DIV-классы способные запутать кого угодно. Как избавиться от этого?
С моей точки зрения, есть две проблемы, связанные со стилем выходного кода Drupal. Одной из них является элегантность: множество разработчиков CSS хотят оставлять вещи достаточно простыми и чистыми, и Drupal со своим подходом "чем больше тем лучше" может вызвать немало разочарований. Ещё большее раздражение (О да, я еще до сих пор раздражён :-) вызвывает тот факт, что Drupal в некоторых отношениях заставляет вас отказаться от контроля. Вы не можете свободно определять имена идентификаторов и классов, вы не всегда можете контролировать, как именно будут организованы классы и суб-классы и, в некоторой степени, это может повлиять на иерархию классов, которую вы запланировали. В конце концов, эта относительная потеря контроля над кодом требует некоторого времени чтобы адаптироваться, особенно, если вы идете от простого образца к конечной вёрстке. На более практическом уровне, в силу того, что зачастую количество генерируемых идентификаторов DIV'ов и классов часто поражает, становится труднее правильно использовать иерархии, когда вы применяете стили к элементам. Это может привести к потере вида, что, конечно, очень разочаровывает, увеличивает ошибки и т.д. Это также делает такие вещи, как кросс-браузерность требующими больше времени.
Вначале мы пытались решить эту проблему с помощью программирования. Если генерируемый Drupal'ом код был или "слишком подробным", или "слишком отвратительным", чтобы работать с ним, мы хотели упростить код. Это, конечно же, не могло долго хорошо работать. Не только потому, что мы потратили бы слишком много времени на работу таким образом, мы также получили бы в конечном итоге систему, трудную в обновлении.
Единственным правильным решением этой проблемы было просто учиться и жить в стиле Drupal. Это не всегда может быть приятно, но если вы потратите достаточно времени, разрабатывая темы, вы в конечном итоге поймёте, как работать с кодом.
Передаём слово обратно Йохсу:
После того как мы успешно разрешили свои первоначальные мелкие ошибки и глупости, мы готовы взять на себя новые задачи.
Первое, что нам необходимо улучшить "Поиск". Мы нуждаемся в более развитых функциях поиска. Прямо сейчас поиск не заботится о скобках. Было бы неплохо иметь такую же, или, может быть, даже большую функциональность а-ля модуль Faceted Search.
Еще одна задумка заключается в том, чтобы предоставлять определенный тип дневного просмотра, так что вы сможете увидеть все статьи на определенный день в одном списке. Статьи имеют дату публикации (используется модуль Date), но сегодня на самом деле у нас нет "редакций". Это то что нам нужно будет сделать.
Наконец наш блог-сайт "luftskibet" установлен отдельно от основного сайта. Мы хотели бы - как графически, и не в последнюю очередь из-за пользователей - интегрировать эту установку с нашим главным сайтом, используя мультисайтинг.
Комментарии
И все-таки
Спасибо за столь большой труд, я прочитала с интересом. Хотелось только поправить - нет модуля facetted_search, зато есть http://drupal.org/project/faceted_search. Вот. И еще осталось загадкой - что же такое разметка на основе сетки. Не мог бы ты своими словами объяснить?
И вопрос по твоему блогу - как сделать кнопку "найти и заменить"?
Разметка на
Разметка на основе сетки - я думаю, здесь авторы имели в виду просто колоночно-табличную разметку (сама вёрстка на их сайте сделана с помощью DIV'ов). Т.е. визуально получается сетка (grid, в оригинале на английском использовалось это слово), в ячейках которой лежат материалы.
> как сделать кнопку "найти и заменить"?
Посмотри вот здесь - BUEditor: Библиотека поиска
Кстати, совсем
Кстати, совсем забыл поблагодарить тебя за уточнение про Faceted Search - я в тексте статьи уже исправил. (В оригинале, кстати, было написано именно с ошибкой - facetted_search)
Всегда пожалуйста
А тебе спасибо за разъяснение про bueditor - однажды слышала про такую кнопочку, но не знала где ее брать. Установила и работает!