Комментарии в блоголёте
16.11.2008Грандиозная задача - движок блога - пред запись в блоге Программы для блогов. В блоголёте я решил уже все основные задачи (по крайней мере точно знаю как), за исключением одной - комментарии. Я мог бы считать себя специалистом по комментариям (как никак моя программа - коммент клиент, дает мне на это право).
До сих пор я так и не смог придумать простую и легкую структуру (имярек алгоритм) по управлению комментариями.
Комментарий я решил сделать состоящим из двух частей: автор и контент. К данным автора можно отнести имя, почта, сайт и айпишник. К контенту - сам текст коммента, дата и статус, а также пост, который комментируется. Используя аналоги с реляционными базами завести две таблицы: с авторами и контентом. Хранить все в одном месте не вариант: у меня движок на файлах, и поэтому поднимать каждый раз абсолютно все комменты по меньшей мере глупо.
Вопрос стоит кому делегировать право управления комментами: один глобальный спецкласс, или класс по запросу, который является свойством поста, илти три класса - менеджер всех, хранитель для поста, менеджер авторов.
Также стоит вопрос кто должен обрабатывать формы отправки комментария: один глобальный класс или пост. Конкретнее какой должен быть адрес отправки коммента: либо тот же самый адрес поста, либо один спецадрес, как это сделано в Wordpress, с последующим редиректом к посту. Можно так и так. Если ставить адрес поста, то стоит вопрос о кешировании - в файл кеша придется включать специальную проверку комментирования, что в случае единого адреса не нужно. Включить проверку не сложно - прописать одну строку с include. Но тогда становится вопрос достоверности кеша в случае добавления нового коммента - файл кеша будет уже на исполнении и самому себя он может объявить недостоверным. Объявление кеша самого себя недостоверным, на мой взгляд, является ошибкой планирования: он может объявить себя недостоверным, чтобы уже следующее обращение к этому адресу вызвало полную регенерацию страницы, а в текущем исполнении отдать то, что есть. Как ни крути остается вариант только с единым адресом.
Следующий вопрос - это автозаполнение формы, то есть чтобы все поля были уже заполнены для уже отправлявших комменты. В WordPress в куках хранятся все данные комментатора: имя, урл, почта. По мне это как то небезопасно и чревато попытками атаковать сервер через подставные куки. Без кук не обойтись. .По мне можно в куке хранить хеш индификаторы юзверя, а данные для формы брать из сохраненных на сервере. Хеш уникален и его не подберешь. Далее вопрос о динамическом контенте: оставившим комменты, которые еще не были подтверждены админом, следует их показывать, а остальным нет. Эта часть никаким образом не кэшируется. Так что в кеш поста должен иметь вставку для автозаполнения и показа не апрувленных комментов.
Охота показывать вначале обычные комменты, а в конце, перед формой показывать список пингбеков, ну например только линки без маловразумительного текста в квадратных скобках. Также не забыть про фильтрование текста коммента - чистить теги, чтобы злодеи не портили дизайн страницы хитрожопыми тегами.
Вроде как излил мысли в текст, пора идти чего нибудь съесть, чтобы устаканившеся мысли легко легли прозрачный код.
Мой блог находят по следующим фразам
• где mysql хранит данные
• билайн 3g модемы
• Delphi SOAP передача XML документа
• индексирование сайта
• скачать программу для просмотров php файлов
• шелл
← Ранее Грандиозная задача - движок блога
Позже Локализация CMS →
Комментарии (10) на запись “Комментарии в блоголёте”
Пингбеки
Оставить комментарий
1. Сделать возможность отключать трэкбеки и комментирование или только по регистрации
Мм, может каменты хранить в xml? Скажем папка comments, там %post_id%.xml. Удобно парсить, не нужна БД, да и редко бывает, что коментов уж очень много.
ЗЫ: у тебя очень неприятная реклама сверху. когда захожу на твой блог приходится в Опере отключать плагины (чтобы флеш не грузился), иначе стоит открыть несколько окон и Опера виснет.
А скорость парсинга xml? Я храню данные в сериализованном виде - очень быстро (в 2 - 3 раза быстрее парсинга php файлов, а уж про xml и думать страшно). Файл действительно хранятся в папке вместе с файлом поста.
Мне за флеш банер деньги вперед заплатили - я доволен. У меня вообще флеш отключен в браузере.