Мой компьютер Weekly, № 48 (167), 03.12.2001.
http://www.mycomp.com.ua
http://www.mycomp.com.ua/article.php?id=1223
Одежда для скрипта
Весь смысл нашей разработки теряется, если мы ее не облачим в web-оболочку, или иначе говоря, не создадим для нее web-интерфейс. В первую очередь нас интересует список категорий. В предыдущей статье «Работа с MySql. Введение» был рассмотрен пример с SQL-запросом, который выводит список категорий на консоль. Теперь нам надо вывести это все в HTML-страницу.
Значит, установим цель: вывести в две колонки список категорий, слегка облагородив его. Поступим так: изготовим любую HTML-страницу с необходимым нам дизайном и в то место, где нам нужен список категорий, вставим комментарий:
Это для того, чтобы не перегружать текст программы избыточным кодом оформления HTML страницы. Итак, приступим:
• вывести заголовок типа данных;
• выполнить SQL запрос;
• разобрать результат;
• вставить результат в шаблон HTML страницы;
Использование шаблонов.
Как вставлять результат в шаблон? Очень просто:
• открыть файл шаблона;
• перебирать строки файла по порядку и выводить их в print;
• встретив строку <!-- CATEGORIES_HERE -->, начинать выводить результат;
Когда процесс закончится, продолжать перебор строк файла с последующим их выводом:
• попросту пишем код;
Код
Итак, план действий составлен, можно кодировать.
В результате вы должны получить таблицу (рамки включены умышленно).
Вставка ссылок
Все хорошо, только толку от нашей таблицы нет никакого. Нужно, чтобы, щелкнув по названию, открывалась страница со ссылками этой категории. Для этого нужно немного дописать код нашей программы. Введем переменную $scr_name, содержащую имя файла со скриптом, который будет выводить страницу со ссылками. После строки use DBI; вставим строку
Далее, внутри цикла while заменим все параметры функции print .... $ln->{'name'} на
Должно получиться что-то типа:
После этой процедуры все имена категорий в вышеприведенной таблице в результате выполнения окажутся ссылками — правда, неработающими, так как сам скрипт нам предстоит только написать.
Заполнение таблицы links
Продолжим создание каталогизатора ссылок.
Мы создали две таблицы в базе данных на сервере MySql:
Кроме того, мы внесли в таблицу category данные, импортировав их из текстового файла. Во второй статье мы «одели» результат запроса из списка категорий в web-интерфейс. Теперь нам нужно заполнить таблицу links, написать скрипт getlinks.pl для вывода списка ссылок с соответствующими категориями. Поступим с заполнением таблицы links так же, как и с таблицей categories: импортируем ссылки из текстового файла. Если вами движет академический интерес, то возьмите нижеприведенные данные и сформируйте из них текстовый файл:
Если вы хотите создать свою базу, то придется поработать, собирая и систематизируя свои ссылки, или повыдирать их из каталогизаторов в Интернете.
Формат файла прост: первое поле — наименование ссылки, заключенное в кавычки, второе поле — сама ссылка (URL), заключенная в кавычки, третье поле — номер категории, в которой эта ссылка будет хранится. Номер категории, понятно, должен совпадать с существующей категорией в таблице category. Поля разделены символом «;».
Сохраним файл, скажем в c:\MyDocs\links.txt. Теперь нужно эти данные поместить в таблицу links. Мы такую операцию уже делали с категориями, теперь с помощью запроса
заполним таблицу ссылок из текстового файла. Обратите внимание, что перед кавычками стоит знак ‘\’. Perl выдаст сообщение об ошибке, если не использовать обратную косую черту перед кавычками, ибо все спецсимволы вводятся в переменные таким образом — сначала обратная косая черта, затем собственно символ.
Запрос можно выполнить как из скрипта, так и из программы администрирования SQL сервера.
Запрос для выбора ссылок
Теперь можно писать скрипт, который будет выводить список ссылок из выбранной категории. В предыдущей статье мы написали скрипт, в котором выводятся категории и ссылки:
Значит, в качестве параметра мы передаем скрипту номер (id) категории под именем page. Чтобы вывести ссылки только из данной категории, нужно выполнить SQL-запрос
Скрипт для вывода ссылок
Скрипт будет выполнять следующие действия:
• разбор параметров, переданных в скрипт;
• выполнение SQL-запроса;
• вывод результата в указанное место в шаблоне.
Подготовим шаблон в виде HTML-документа с необходимым нам оформлением, и в том месте, где должны быть ссылки, вставим комментарий:
Программа на языке Perl будет иметь следующий вид:
В результате исполнения этого скрипта будет выведен список ссылок, оформленный как Немаркированный список, причем каждая ссылка будет открываться в новом окне.
Усовершенствования
Надеюсь, принцип работы данной программы понятен, и каждый волен ее дорабатывать на свой вкус. Я , например, в рабочей версии каталогизатора (http://www.lubny.net.ua/, она, правда, написана на PHP), добавил в таблицу links еще и описание ресурса и счетчик, куда записывается каждый клик по ссылке. Чтобы это сделать, нужно добавить поле counter типа int в таблицу links для подсчета кликов, а заодно и поле comment типа varchar(255) для хранения краткого описания ссылки.
Для того чтобы считать клики, нужно написать небольшой скрипт-редиректор, строку же вывода ссылки переписать следующим образом:
(было):
(стало):
Скрипт redir.pl должен открывать страницу с переданным ему URL и записывать в таблицу links значение счетчика с увеличением на 1.
Изменение данных
Изменение данных в таблицах производится инструкцией UPDATE:
Мой вариант скрипта:
Если будете использовать этот скрипт, то скорее всего, вам захочется выводить список ссылок, отсортированный по количеству посещений. Для этого нужно в скрипте getlinks.pl поменять запрос, добавив в него сортировку по полю count по убыванию:
Подсчет содержимого полей
Кроме этого, при открытии страницы категорий можно делать подсчет ссылок в категории, подсчет кликов в категории. Подсчет обычно осуществляют агрегатной функцией count(field_name) в инструкции SELECT:
В данном случае результату работы функции count(*) присваиваем псевдоним totlinks для удобства дальнейшего использования результата.
Подсчет же количества кликов в категории можно подсчитать, используя агрегатную функцию sum(fieldname):
Так что, если приложить немного фантазии, можно из своего скрипта написать настоящий каталогизатор .
Статья из электронного представительства Пензенского Государственного Университета КАФЕДРЫ "ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА".