Вот уже чуть больше трех лет этот блог крутится на Drupal, но последнее время в все чаще задумываюсь о том, чтобы отказаться от него в пользу самописного движка. Причина этого желания состоит не в том, что в своей жизни я изобрел мало велосипедов, а в том, что Drupal — слишком мощный движок для моих целей.
За эти три года я достаточно много работал с Drupal'ом и могу с чистой совестью подтвердить: из него можно построить сайт абсолютно любой сложности и с любым мыслимим и немыслимым функционалом. Засада лишь в том, что такая мощь мне на этом блоге не нужна, тем более, что за нее приходится платить тяжеловесностью сайта. Поэтому в качестве отправной точки я решил составить список требований которые я предьявляю к движку блога. Этому и будет посвящен пост.
Общее назначение движка
Движок предназначен для ведения (преимущественно) однопользовательских персональных блогов.
Пользовательская система
Движок должен поддерживать многопользовательскую модель.
Контроль доступа с помощью механизма ролей. Набор ролей фиксирован: админ, блоггер, комментатор.
Анонимный пользователь имеет роль комментатора.
Желательна поддержка авторизации как по логину-паролю, так и через сторонние сайты (Twitter, Google, Open ID). Оптимально, если будет возможность привязки к одной учетке нескольких методов авторизации.
Размещение постов и создание статических страниц
Движок должен позволять публиковать посты и статические страницы, с разметкой в HTML.
Пост включает в себя следующие параметры:
Заголовок поста
Тело поста
Дата публикации
Автор
Состояние: опубликован или черновик
Имя поста для URL
Поле для традиционного видеоролика в конце поста
Теги
Визуальный редактор CKEditor полным набором панелей инструментов.
Загрузка файлов и изображений через интерфейс редактирования поста. Желательна интеграция с CKEditor.
Создание миниатюр изображений. Желательно иметь возможность задавать размер миниатюр, если "умолчальный" размер не подходил, либо просто отключать миниатюры для конкретных изображений.
Планирование постов. Если у поста статус "опубликован", но дата публикации — в будущем, то он не будет отображен до наступления даты публикации.
Блоггеры должны видеть неопубликованные записи, все остальные - нет.
Черновики и отложенные записи должны визуально отличаться от обычных постов и друг от друга.
Включение/отключение комментирования для конкретных постов.
Желательно автосохранение черновиков как в WP.
Посты должны быть доступны через RSS.
Разделение на тизер и основной текст не требуется.
Поддержка размещения листингов кода с соответствующей подсветкой.
Комментирование
Возможность комментировать посты и страницы, для которых это не было запрещено.
Желательна поддержка древовидных комментариев
Комментатор может указать свой ник, сайт и email, все, кроме ника - не обязательно.
Желательна возможность логиниться прямо при комментировании.
Комментатору доступен ограниченный набор html тегов.
Форма добавления комментария имеет визуальный редактор с набором инструменов, ограниченным набором разрешенных тегов.
В форму комментирования встроен антиспам, невидимый для пользователей со включенным JavaScript.
Возможна подписка на комментарии по email.
Для блоггеров каждого комментария должны быть дополнительные опции:
Редактировать
Удалить
Удалить ссылку на сайт комментатора (для упрощения выноса спамовых ссылок)
Удалить все ссылки из текста поста.
Желательно иметь возможность детектирования скрытых ссылок в комментариях.
Желательно экспортировать комментарии в RSS
Многоязычность
Интерфейс должен поддерживать как минимум два языка: английский и русский.
Весь контент может быть привязан к одному из языков. Если привязка не задана, он отображается для любого языка.
Комментарии наследуют языковую привязку от поста или страницы, к которой они относятся.
Интерфейс
Шаблон должен быть отделен от логики и быть максимально простым.
Должна быть поддержка управления верхним меню и меню в сайдбаре.
Сайдбар справа.
Следующие виджеты должны присутствовать в сайдбаре:
Редактируемое меню
Облако тегов
Блогролл
Архив по месяцам
Последние комментарии и посты
Комментарии располагаются под постом.
Форма добавления комментария - под всеми комментариями.
У каждого комментария есть кнопки "Ответить" и "цитировать выделенное".
На главной и на страницах отображения тегов должно присутствовать разбиение на страницы.
Поддержка вида для печати
Желательно редактирование постов и комментариев в упрощенном режиме с помощью ajax
Желательно удаление комментариев через ajax
Интерфейс должен приемлемо вести себя при отключенном JS или CSS
Требования к ядру
Кэширование всего, чего можно.
Желательна оптимизация CSS и JavaScript.
Желательно правильное и автоматическое расставление мета-тегов , и
Генерация xml-карты сайта, содержащей ссылки на:
Главную
Посты
Статические страницы
Страницы тегов
Итог
Требований, как оказалось, не так уж и мало, хотя далеко не все из них критичные. Поэтому в следующей заметке я уделю внимание техническим аспектам реализации движка.
Я бы сам движок не писал, просто потому, что не вижу как эти трудозатраты могут окупиться.
Взял бы какой-нибудь старенький и не прожорливый ВордПресс, например 2.3.3 или 2.7.1, настроил плагинами чего не хватает. И спал бы себе спокойно.
Ну, я еще не до конца уверен, что буду писать движок. Однако, если буду, то явно не с нуля. Скорее всего, я буду пользоваться Yii Framework, а отталкиваться от Yii Blog Demo, который базовый функционал блога реализует. А там уже интерационно наращивать фитчи.
Кроме того, из этого я извлеку массу свежего опыта и восстановлю старые навыки, поскольку большая часть моей работы сейчас связана с программированием бекендов и API, и в ней практически нет места для человеческих интерфейсов :-)
Я бы сам движок не писал, просто потому, что не вижу как эти трудозатраты могут окупиться.
Взял бы какой-нибудь старенький и не прожорливый ВордПресс, например 2.3.3 или 2.7.1, настроил плагинами чего не хватает. И спал бы себе спокойно.
Ну, я еще не до конца уверен, что буду писать движок. Однако, если буду, то явно не с нуля. Скорее всего, я буду пользоваться Yii Framework, а отталкиваться от Yii Blog Demo, который базовый функционал блога реализует. А там уже интерационно наращивать фитчи.
Кроме того, из этого я извлеку массу свежего опыта и восстановлю старые навыки, поскольку большая часть моей работы сейчас связана с программированием бекендов и API, и в ней практически нет места для человеческих интерфейсов :-)
Аааа ))
Что-то про программирование для удовольствия и наращивания потенциала я не подумал :)
Отправить комментарий