Архивы за месяц: марта 2009

Bug Tracker: ответы на комментарии (часть десятая)

Владимир | | CodeIgniter, HTML, JavaScript, MySQL, PHP, Web разработка.

В предыдущих частях (1, 2, 3, 4, 5, 6, 7, 8, 9) мы создали практически работоспособную систему отслеживания ошибок.

«Практически» в данном случае означает, что на данный момент у пользователя отсутствует возможность отвечать на комментарии. Т.е. можно оставить только комментарий 1-ого уровня (комментарий к багу).

Сегодня мы исправим этот недостаток.

Напомню, что на стороне сервера поддержка вложенных комментариев уже реализована. В базе данных (таблица comments) есть поле parent_id в котором хранится id родительского комментария.

Кроме того, метод addComment (модели mcomments) принимает массив с данными комментария, одним из полей которого является parent_id.

И, наконец, метод addcomment контроллера читает этот параметр из массива $_POST и передает его модели.

Таким образом, нам остается обеспечить возможность посетителю указывать на какой комментарий он хочет ответить.
Читать дальше

BugTracker: локализация (часть девятая)

Владимир | | CodeIgniter, PHP, Web разработка.

Сегодня мы продолжаем разработку собственной системы отслеживания ошибок. В предыдущих частях мы рассмотрели добавление записей о багах и комментариев к ним.

Но при этом не решенным остался вопрос локализации.

По-умолчанию CodeIgniter выводит сообщения об ошибках на английском языке. Прежде всего, это касается описаний ошибок, которые возникают при некорректном заполнении форм.

В этой части я расскажу, как перевести эти сообщения на русский язык.

Самое интересное, что часть работы мы уже сделали при создании правил для проверки полей форм.

Например, правила для проверки email выглядят следующим образом.
Читать дальше

BugTracker: авторизация и аутентификация (часть восьмая)

Владимир | | CodeIgniter, MySQL, PHP, Web разработка.

Приветствую всех читателей!

В этой части мы рассмотрим создание не сложной системы авторизации пользователей нашего баг трекера.

Для начала сформулируем задачу.

Как вы, наверное, помните, оставить сообщение о найденном баге или комментарий к нему может кто угодно. Но удалять записи и комментарии могут только администраторы.

На практике это будет выглядеть следующим образом. Администратор при входе вводит имя и пароль. Баг трекер их проверяет и, если они совпадают с записанными в базе данных, добавляет к каждому багу и комментарию ссылку «Удалить».

Кроме того, при выполнении каждой операции удаления необходимо проверить является ли текущий пользователь администратором.

Для справки. Эти проверки называются аутентификация и авторизация.
Читать дальше

Bug Tracker: добавление записей и комментариев (часть седьмая)

Владимир | | CodeIgniter, HTML, MySQL, PHP, Web разработка.

В этой части цикла статей о разработке баг трекера мы рассмотрим добавление записей о багах и комментариев к ним.

Вообще-то обе эти операции сводятся к добавлению записей в таблицы bugs и comments, т.е. их можно выполнить с помощью всего пары строк кода.

Но, как несложно догадаться, основная часть работы будет заключаться в обработке данных.

Кроме того, нужно сразу решить вопрос с тегами и защитой от XSS атак.

Проблема следующая. Если разрешить пользователям вставлять в текст описания багов любые HTML теги и не выполнять никаких проверок, то кто угодно сможет провести любую XSS атаку. Например, вставить скрипт с редиректом на свой ресурс.

С другой стороны, если фильтровать все теги, то посетители не смогут использовать жирный шрифт, курсив и т.п.

Решить проблему можно с помощью bbCodes или фильтрацией части тегов. Например, теги script удаляем, а strong – не трогаем.

Я решил выбрать второй вариант. Тем более что его не сложно реализовать с помощью библиотеки HTML Purifier. Кроме фильтрации опасных тегов, библиотека исправляет ошибки в разметке. Например, добавляет закрывающие теги.

Подключение HTML Purifier к CodeIgniter.
Читать дальше

Bug Tracker: создание страниц (часть шестая)

Владимир | | CodeIgniter, CSS, HTML, MySQL, PHP, Web разработка.

Мы продолжаем разработку собственной системы отслеживания ошибок. И сегодня подробно рассмотрим создание страниц нашего приложения.

В предыдущих частях мы определились с типами страниц. Напомню, их всего два: страницы с общим перечнем багов (главная и страницы категорий) и страницы отдельных багов с комментариями.

Т.к. общее количество записей о багах может быть большим, мы будем использовать библиотеку pagination, входящую в состав фреймворка CodeIgniter, для вывода этого списка по частям.

Количество записей на одной странице мы задаем в файле конфигурации (application\config\config.php).

$config['bugs_per_page'] = 5;

Получить значение этого параметра можно так:

$this->config->item('bugs_per_page');

Теперь определимся с названиями методов контроллера и структурой URL.

По-умолчанию, URL в CodeIgniter имеют такой вид:

sitename.domen/index.php/имя_контроллера/имя_метода/параметр1/параметр2/…

Контроллер у нас будет называться bugtracker, а метод, показывающий страницы с багами – page. В результате получим URL с такой структурой:

…/bugtracker/page/номер_записи

В последнем сегменте адреса указываем номер первой записи на текущей странице. Кстати, это не id бага в базе данных, это его индекс в массиве с результатами поиска по БД.

Создаём контроллер (application\controllers\bugtracker.php)
Читать дальше

Bug Tracker: модель и страницы приложения (часть пятая)

Владимир | | Ajax, CodeIgniter, HTML, PHP, Web разработка.

В комментариях к прошлой части я получил много советов о том, в каком виде лучше получать данные из базы. Я очень признателен всем за эти замечания, т.к. они действительно помогли найти недостатки в прошлой части.

Основная проблема была в том, что я не продумал до конца, что именно будет отображаться на страницах баг трекера, но взялся за работу с базой.

В общем-то, страниц у баг трекера не много. Первоначально я вообще хотел сделать одностраничное приложение, но передумал из-за проблем с индексацией поисковиками.

Поэтому сегодня постараюсь максимально подробно осветить этот вопрос.

Т.к. индексация страниц баг трекера поисковиками очень желательна, то при разработке имеет смысл придерживаться рекомендаций от Google, а именно методики Progressive Enhancement (постепенного улучшения).

Идея следующая. Нужно сделать приложения так, чтобы без поддержки JavaScript (только с помощью обычных ссылок) можно было получить доступ к любой информации (багам и комментариям).

После этого, с помощью JavaScript вносятся различные улучшения. Например, без JavaScript при клике на заголовке бага посетитель попадет на страницу с его описанием и комментариями.

Если JavaScript включен, то после загрузки страницы обычные ссылки будут преобразованы в ajax-ссылки и вместо перехода на другую страницу будет подгужен список комментариев.

Кроме того, не правильно показывать на одной странице одновременно несколько багов вместе с комментариями (как я планировал раньше). Во-первых, если комментарии содержат рисунки, то такая страница будет долго грузиться. Во-вторых, получится, что отдельные страницы багов будут дублировать главную, а, насколько я знаю, поисковики это не любят (дублирование контента).

В результате получается, что для работы баг трекера нужны страницы двух типов.
Читать дальше

Bug tracker. Преобразуем таблицу в html список (часть 4).

Владимир | | CodeIgniter, HTML, PHP, Web разработка.

Сегодня я продолжаю рассказывать о разработке системы отслеживания ошибок. В этой части речь пойдет о создании списка багов и комментариев.

Напомню, в прошлый раз мы решили, что все для хранения записей о багах и комментариях к ним будем использовать две таблицы: bugs и comments.

Там же мы обсудили список полей и их назначение, и создали несколько внешних ключей для связи между таблицами.

Теперь переходим к созданию списка.

Чтобы лучше понять задачу рассмотрим html разметку, которую нам нужно получить.
Читать дальше

Bug Tracker: изменения в проекте (часть третья)

Владимир | | Ajax, CodeIgniter, HTML, MySQL, PHP, Web разработка.

Приветствую всех!

В этой статье продолжения рассказа о разработке собственной системы отслеживания ошибок. Предыдущие части вы найдете здесь и здесь.

В прошлый раз я обещал рассказать о формировании страницы со списком багов и комментариев. Но обсуждения предыдущих частей ясно показали, что в проект необходимо внести некоторые изменения. О них и пойдет речь сегодня.

База данных.

Первоначально я хотел максимально упростить структуру БД и перестарался. А именно: я решил хранить описания багов и комментарии к ним в одной таблице. В принципе, это возможно. Баги и комментарии имеют много одинаковых полей, и работать с такой таблицей было бы вполне реально.

Но я не учел, что при этом значительно усложняется код формирования страницы. Например, для создания списка багов с комментариями нужна рекурсивная функция с множеством проверок.

В общем, я решил, что лучше изменить базу данных сейчас, чем морочить себе голову потом 🙂

Новая структура базы данных выглядит следующим образом.
Читать дальше

Bug Tracker: установка фреймворка и создание базы данных (часть вторая)

Владимир | | Ajax, CodeIgniter, htaccess, JavaScript, MySQL, PHP, Web разработка.

Сегодня я продолжаю рассказывать о разработке собственной системы отслеживания ошибок. В прошлой статье только вкратце была описана общая идея и возможности, а также показан предварительный эскиз приложения.

Но прежде чем переходить к основной теме, хочу поблагодарить всех комментаторов и особенно AmdY, Big_Shark и Алексея Качаева за советы!

Первоначально я планировал доделать приложение полностью, и только потом опубликовать этот цикл постов. Но так получается даже лучше. Всегда есть шанс, что читатели найдут недостатки, и мне не придется переделывать все приложение чтобы их исправить 😉

В прошлый раз с инструментами мы определились (используем PHP, фреймворк CodeIgniter, MySQL и jQuery).

Сейчас нам нужно их установить и настроить.
Читать дальше