Разработка плагина голосовалки
26.02.2010Пишу плагин голосовалки, который оказывается гораздо сложнее, чем постановка задачи. Во первых я отказался от версии на файлах для этого плагина - он будет только для бд. Для плагина потребовалось 3 таблицы: само голосование (название, пункты), пользователи (их куки), и результаты (1 юзверь = 1 голос). Делать все это на файлах мне не хочется, к тому же его использование предполагается только на бд версии. Далее парсинг псевдокода голосования и сравнение данных после редактирования - нуждаются ли они в обновлении. Плагин будет преобразовывать простую форму записи данных голосования в расширенную.
Возникла еще проблема теоретических утечек ресурсов: когда пост будет удален, то данные о голосовании могут остаться. С другой стороны одно голосование можно использовать в неограниченном количестве мест (постов). Как быть с утилизацией неизвестно, так во время создания поста его id неизвестен (точнее = 0, что не является реальным значением). id поста можно получить после его повторного редактирования, а так на этапе создания поста он как бы еще не существует. Единственное, что пока приходит в голову это поиск во всех постах всех голосований, а потом удаление не существующих голосований, но на мой взгляд это экстремальный путь. С другой стороны можно придумать решение с сигнатурой голосования - кроме id голосования добавить уникальную строку (в блоголёте есть функция md5uniq для генерации случайных длинных строк), и эту сигнатуру можно будет добавлять в данные голосования. Потом можно будет делать полнотекстовый поиск по базе сигнатур и если сигнатура не найдена, то удалять голосование. Это решит проблему множественного использования одного голосования в разных постах. Запускать проверку сигнатур раз в неделю будет более чем достаточно.
← Ранее Отказ от использованияPDO
Позже Динамические данные без php →
Комментарии (19) на запись “Разработка плагина голосовалки”
Оставить комментарий
[Sat Feb 27 13:35:20 2010] [error] PHP Fatal error: Call to a member function redir301() on a non-object in /home/clients/ххх/html/lib/tags.common.class.php on line 328
[Sat Feb 27 14:33:41 2010] [error] PHP Fatal error: Call to a member function lock() on a non-object in /home/clients/ххх/html/lib/admin.widgets.class.php on line 253
Столкнулся с проблемой на старой версии Блоголета 2.8, перенес свой блог на другой хостинг, все работает, но как захожу в админку - ступор, ничего не открывается, только пароль запрашивается и все... в логах апача ошибок нету, а только строчки типа:
27/Feb/2010:20:12:00 +0300] "GET /admin/ HTTP/1.1" 401 354 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1)"
каждую секунду =(
Что делать?
Проблемы при авторизации бывают из за того, что один (или несколько) файлов .php были отредактированы и в них появились лишнии символы в начале (навример сигнатура utf8), либо в конце (перевод строки) и авторизация ломается. Спсоб лечения - файлы надо было перемещать в бинарном режиме, либо через установку и последующее востановление из бекапа, либо через tar архив (он сохраняет права), либо настроить свой ftp клиент в бинарный режим, вместо текстового.
А про клик с сворачиванием я даже не подумал - надо будет это дело везде прикрутить, в том числе и для аяксовых виджетов
Я не знаю, с какой версии блоголета изменился вариант авторизации, но если в старой версии всплывающее окно просит заполнить логин и пароль, то это http авторизация не будет работать под cgi модулем.
Уточните у хостера, как запущен апач.
Для старой версии это будет файл lib/adminpage.php строку
if ($s = $this->Auth()) return $s;
закомментировать
//if ($s = $this->Auth()) return $s;
это полностью отключит авторизацию