Техзадание для движка блога
Вот уже чуть больше трех лет этот блог крутится на 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-карты сайта, содержащей ссылки на:
- Главную
- Посты
- Статические страницы
- Страницы тегов
Итог
Требований, как оказалось, не так уж и мало, хотя далеко не все из них критичные. Поэтому в следующей заметке я уделю внимание техническим аспектам реализации движка.