Ne v kontakte Asocial programmer's blog

Техзадание для движка блога

Feature image

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

За эти три года я достаточно много работал с Drupal’ом и могу с чистой совестью подтвердить: из него можно построить сайт абсолютно любой сложности и с любым мыслимим и немыслимым функционалом. Засада лишь в том, что такая мощь мне на этом блоге не нужна, тем более, что за нее приходится платить тяжеловесностью сайта. Поэтому в качестве отправной точки я решил составить список требований которые я предьявляю к движку блога. Этому и будет посвящен пост.

Общее назначение движка

Движок предназначен для ведения (преимущественно) однопользовательских персональных блогов.

Пользовательская система

  • Движок должен поддерживать многопользовательскую модель.
  • Контроль доступа с помощью механизма ролей. Набор ролей фиксирован: админ, блоггер, комментатор.
  • Анонимный пользователь имеет роль комментатора.
  • Желательна поддержка авторизации как по логину-паролю, так и через сторонние сайты (Twitter, Google, Open ID). Оптимально, если будет возможность привязки к одной учетке нескольких методов авторизации.

Размещение постов и создание статических страниц

  • Движок должен позволять публиковать посты и статические страницы, с разметкой в HTML.

  • Пост включает в себя следующие параметры:

    • Заголовок поста
    • Тело поста
    • Дата публикации
    • Автор
    • Состояние: опубликован или черновик
    • Имя поста для URL
    • Поле для традиционного видеоролика в конце поста
    • Теги
  • Визуальный редактор CKEditor полным набором панелей инструментов.

  • Загрузка файлов и изображений через интерфейс редактирования поста. Желательна интеграция с CKEditor.

  • Создание миниатюр изображений. Желательно иметь возможность задавать размер миниатюр, если “умолчальный” размер не подходил, либо просто отключать миниатюры для конкретных изображений.

  • Планирование постов. Если у поста статус “опубликован”, но дата публикации — в будущем, то он не будет отображен до наступления даты публикации.

  • Блоггеры должны видеть неопубликованные записи, все остальные - нет.

  • Черновики и отложенные записи должны визуально отличаться от обычных постов и друг от друга.

  • Включение/отключение комментирования для конкретных постов.

  • Желательно автосохранение черновиков как в WP.

  • Посты должны быть доступны через RSS.

  • Разделение на тизер и основной текст не требуется.

  • Поддержка размещения листингов кода с соответствующей подсветкой.

Комментирование

  • Возможность комментировать посты и страницы, для которых это не было запрещено.

  • Желательна поддержка древовидных комментариев

  • Комментатор может указать свой ник, сайт и email, все, кроме ника - не обязательно.

  • Желательна возможность логиниться прямо при комментировании.

  • Комментатору доступен ограниченный набор html тегов.

  • Форма добавления комментария имеет визуальный редактор с набором инструменов, ограниченным набором разрешенных тегов.

  • В форму комментирования встроен антиспам, невидимый для пользователей со включенным JavaScript.

  • Возможна подписка на комментарии по email.

  • Для блоггеров каждого комментария должны быть дополнительные опции:

    • Редактировать
    • Удалить
    • Удалить ссылку на сайт комментатора (для упрощения выноса спамовых ссылок)
    • Удалить все ссылки из текста поста.
  • Желательно иметь возможность детектирования скрытых ссылок в комментариях.

  • Желательно экспортировать комментарии в RSS

Многоязычность

  • Интерфейс должен поддерживать как минимум два языка: английский и русский.
  • Весь контент может быть привязан к одному из языков. Если привязка не задана, он отображается для любого языка.
  • Комментарии наследуют языковую привязку от поста или страницы, к которой они относятся.

Интерфейс

  • Шаблон должен быть отделен от логики и быть максимально простым.

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

  • Сайдбар справа.

  • Следующие виджеты должны присутствовать в сайдбаре:

    • Редактируемое меню
    • Облако тегов
    • Блогролл
    • Архив по месяцам
    • Последние комментарии и посты
  • Комментарии располагаются под постом.

  • Форма добавления комментария - под всеми комментариями.

  • У каждого комментария есть кнопки “Ответить” и “цитировать выделенное”.

  • На главной и на страницах отображения тегов должно присутствовать разбиение на страницы.

  • Поддержка вида для печати

  • Желательно редактирование постов и комментариев в упрощенном режиме с помощью ajax

  • Желательно удаление комментариев через ajax

  • Интерфейс должен приемлемо вести себя при отключенном JS или CSS

Требования к ядру

  • Кэширование всего, чего можно.
  • Желательна оптимизация CSS и JavaScript.
  • Желательно правильное и автоматическое расставление мета-тегов <meta name="robots">, <link rel=”alternate” type=”application/rss+xml”> и <link rel="canonical">
  • Генерация xml-карты сайта, содержащей ссылки на:
    • Главную
    • Посты
    • Статические страницы
    • Страницы тегов

Итог

Требований, как оказалось, не так уж и мало, хотя далеко не все из них критичные. Поэтому в следующей заметке я уделю внимание техническим аспектам реализации движка.

P.S. PAIN — Dirty Woman