Ne v kontakte Antisocial programmer's blog

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

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

    blog     upgrade     todo

Вот уже чуть больше трех лет этот блог крутится на 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

blog comments powered by Disqus