Надоел Perl? Тошнит от PHP? Как насчет
сервлетов? Ладно-ладно молчу. Рвотный
рефлекс - один из первейших в арсенале
человека. А значит пора юзать что-то
новенькое. Самое верное решение, когда не
можешь разобраться с какой-либо прогой или,
не дай боже, языком программирования - найти
равноценную (а лучше еще круче) замену.
Настоящие кульные хацкеры так и поступают -
ведь всем давно известно, что успех - это
путь от меньшей неудачи к большей. Не помню,
кто это сказал, но чувак был определенно
продвинутый. Сегодня я познакомлю тебя с
новой замечательной игрушкой под названием
parser.
Ага, именно parser. Вот так скромно и со вкусом.
Прямо как Бонд. Джеймс Бонд. Помнишь такого
крутого перца? Знатный, надо отметить, чувак.
Ну ладно, ближе к теме. Создали сей продукт (это
я о parser-е, а не о Бонде) в славной Студии
Артемия Лебедева. И пока ты не успел
перевести дух и набрать в легкие побольше
воздуха, дабы сказать все, что ты думаешь о
Теме и сотоварищах, небольшая ремарка от
классика - Константина Моршнева, автора и
идеолога новоявленного средства генерации
веб-страниц: "PARSER - это средство
скриптования сайтов, оптимизирующее
процесс создания новых проектов, а также
значительно сокращающее время разработки и
затраты на поддержку. Обновление дизайна
страниц из тяжелой рутины может
превратиться в простую и приятную работу.
Изменения структуры и функциональности
сайта уже не будут пугать вас".
И как всегда ребята из Студии (обязательно с
большой буквы, обязательно ...) скромны в
оценках своего творения. Если тебе не влом
сходит на сайт Студии Самизнаетекого (а это
скромный адресок www.design.ru)
и пошастать по списку работ, то наверное
обратишь внимание, что под описанием
практически каждого гениального шедевра
есть пару слов о том, что при создания сайта
использовался этот самый parser. Сначала
студийцы использовали parser в одну харю,
затем, видимо поняв, что так негоже, а может
для придания еще более запредельного
имиджа, начали раздавать его всем, кому не
попадя. Даже сайт специальный под него
замастерили - www.parser.ru,
называется. Вот туда-то мы сейчас и
отправимся.
Как зачем? Качать. Зашел, да? Опустим
словоизлияния на первой странице сайта и
прямым ходом отправимся в раздел "скачать".
Ого! Ребята не пожмоnились и понавыпускали
версий parser-а для всех известных им
операционок.
Доступны версии для: aix, freebsd (3.5, 4.x, old), linux
(i386_redhat70, i586_2x), openbsd, solaris. Понятно дело, что
есть версия для маков. Испугался? Гы-гы!
Версия для виндов тоже есть, не тушуйся.
Итак, берем ту, которая более по душе твой
операционки и качаем. Установить parser на
тачку пара пустяков.
Сначала клинический вариант. Это ежели ты
забавляешься c Internet Information Server-ом. Ну, значит
так. Запускаешь Management Console, тащишься в Properties
и делаешь новую папку. Теперь по пунктам.
Переходим на вкладку "Home directory" и в
разделе "Application settings" жмыкаешь на
кнопку "Configuration...". В появившемся окне,
жми на кнопку "Add". Увлекательно, да? Но
не будем отвлекаться. В поле "Executable"
нужна задать полный путь к parser2.exe, в в поле
"Extension" указать ".html". Затем нужно
включить опцию "Check that file exists" и нажать
на кнопочку "OK".
Ну, все, типа. Должно работать. Если - нет, то
я не виноват. Это все происки дяди Билли и
его IIS.
Теперь установка для нормальных апачнутых
ребят.
Кидаем скаченный parser2.cgi (или parser2.exe, ежели ты
перебиваешься c Aphace-ем под гнетом виндов) в
cgi-bin и в .htaccess добавляем просто и
недвусмысленно:
AddHandler parsed-html html
Action parsed-html /cgi-bin/parser2.cgi
<Files ~ "\.cfg$">
Order allow,deny
Deny from all
</Files>
Ежели у тебя русский Apsche то надо добавить
еще и это:
CharsetRecodeMultipartForms Off
Ну вот, пожалуй, и все. Запустил сервак?
Работает? Ну, тогда давай начнем трепанацию.
Теорию мы оставим на потом, а для начала
проверим работоспособность новой примочки.
Понятно, что сначала надо что-нибудь
короткое, но вместе с тем интересное и
познавательное.
Давай сделаем, то без чего не одна перво-наперво
свайная домашняя страничка обойтись не
может. Понятно и ежу, что это счетчик
посетителей. Для этого в parser-е есть
специальный оператор. Да-да, именно так.
Тебе же сказали, что придумали эту штуку для
облегчения жизни веб-мастера. Так что смело,
ставь в текст html-файла следующее:
"Вы ^counter[^uri[]] -й посетитель моей
замечательной страницы."
Ну что же пора время кое-чего и объяснить.
Что и делаю: counter - это оператор счетчика,
который сам и создает файл со значением
количества загрузок страницы и сам
обновляет это значение при каждом
обращение. А вот uri - функция, возвращающая
имя текущей страницы. Итого, что мы имеем?
Имеем мы такую замечательную штуку. Вставив
этот код мы можем полностью расслабиться,
parser и файл с именем текущий страницы со
значением счетчика создаст, и сам будет его
обновлять.
Ну что смотришь исподлобья? Пробуй! Давай
быстренько сваляй простенький html-файлик и
вставь эту строчку. Теперь запускаем веб-сервер
и идем... Ну вообще понятно куда идем. Жмыкай
на "Обновить". Кульно, да? Еще разок. И
еще. Развлечение конечно для идиотов, но я
сам признаюсь, просидел с полчаса, пока в
броузере не прочел заслуженную похвалу: "Вы
1000-й посетитель моей замечательной
страницы."
А теперь смотри, что понаделал parcer в папке,
где лежал наш html-ский файлик. Он создал еще
один. С расширением .count и именем равным
имени html-файла. Понятно, что внутри данного
файлика мы обнаружим число, равное тому,
сколько раз ты нажал на "Обновить".
Вообще вот такой замечательный счетчик мы
сделали, можно сказать за пару секунд.
Воистину "обновление дизайна страниц из
тяжелой рутины может превратиться в
простую и приятную работу". Хе-хе.
Я догадываюсь, что ты хочешь у меня спросить.
Ты хочешь узнать, а что это за значок ^ перед
counter и uri стоит? А это мой милый друг, тот
опознавательный знак, который даст понять
parser-у, что далее следует исполняемый им код.
До того, как код html-файла будет отослан веб-сервером
браузеру (или любому другому клиенту), он
обрабатывается parser-ом. А вот как раз для
того, чтобы обнаружить в тексте файла свои
родные операторы и не перепутать их с чем то
другим, и нужна эта галочка. А остальной
текст, в том числе тэги html parser-у глубоко
безразличен. Ему можно сказать на них
наплевать с самой большой колокольни.
Кстати обзывает эту галочку можно по
разному, высокопарно и романтично - птичкой,
или по простому - гашек. Можно и просто
закорючкой, без разницы. Главное не забывай
^ перед операторами ставить.
Раз начали мы с тобой с примера со счетчиком,
то вот тебе дельный совет. Используй данную
конструкцию на всех страницах, где тебе
нужно считать посетителей:
Посещений сайта: ^counter[web] / из них, этой
страницы: ^counter[^uri[]]
Таким образом, ты в одном файле web.count будешь
суммировать количество загрузок, всех
страниц, где установишь этот код, а для
конкретной будешь создавать свои счетчики.
Просто и приятно.
Кстати, как ты думаешь, что делать в том
случае, если ты захочешь поменять некоторые
из этих операторов, но уже успел
понавставлять их в довольно большое
количество файлов? Что будешь править их
везде ручками? Ну, нет, так не пойдет. Давай-ка,
воспользуемся такой замечательной штукой,
коей обладает parser, как макрос.
Что это такое? Ну, во-первых, это одно из
самых приятных достоинств parser-а. А во-вторых...
Во-вторых, это просто чертовски удобная
штука. Хотя об этом я уже вроде, как и
говорил. Ну да ладно. Макросы в parser-е
применяются для описания чего-либо, что
имеет тенденцию, раз за разом повторятся на
одной или нескольких страницах. Что это
может быть. Это могут быть всякого рода
колонтитулы, ссылки, меню и тот же код для
счетчика, к примеру. Грех писать это каждый
раз на каждой странице, и совсем не грех (а
даже наоборот) воспользоваться для этого
макросом.
Описав макрос в отдельном файле и вставив
его вызов на страницу можно спокойно
отправляться потчевать на лаврах. Ведь в
случае чего не придется перелопачивать
весь сайт, а так подправить пару строк в
самом макросе. Еще одна из особенностей parser-овского
макроса в том, что ведет он себя точно как
функция и поэтому ему можно запросто
передавать некие переменные. В самом же
тексте макроса можно использовать
операторы и вызывать другие макросы.
Давай-ка теперь подтвердим все
вышесказанное на примере. Так-то оно
толковей будет. Но для начала правила
записи макросов. Сам макрос представляет
собой конструкцию следующего весьма
несложного вида:
@имя_макроса[аргумент1;аргумент2;...аргументN]
комментарий
текст_макроса
Перед именем макроса обязательно надо
поставить "собачку", а то с точки
зрения parser-а это будет уже не макрос, а что-то
совсем иное. Имя макроса может состоять из
латинских букв, цифр и символов
подчеркивания, но не должно начинаться с
цифры. Такие же требования к именам
аргументов. За списком аргументов можно
поместить небольшой, умещающийся в той же
строке комментарий.
Сам макрос можно поместить как в самом html-файле,
так и в любом другом файле с расширением cfg,
и черточкой _ перед названием файла, либо в
специальном "общем" файле макросов
_macro.cfg, который должен находиться в коревом
каталоге веб-сервера. Если наш макрос будет
расположен в файле _macro.cfg, то вызвать его
можно из любого html-файла, просто указав его
имя. В том случае, если создается отдельный
файл, то нужно будет при вызове макроса еще
указать путь к нему.
Итак, что мы сделаем с нашим счетчиком
страниц. Для начала создадим файл _macro.cfg, и
напишем в нем небольшой макрос с счетчиком
и некоторыми другими прибамбасами:
@my_end_html[]
На сегодня ^date[%d.%m.%Y] посещений сайта: ^counter[web]-й
раз, из них, этой страницы: ^counter[^uri[]]
Как видишь тут мы еще влепили один оператор
- date, с помощью которого, как нетрудно
догадаться, выводим текущею дату в
привычном русским хлопцам формате "день-месяц-год".
Теперь после создания макроса просто
вставляем в файлы оператор ^macro[my_end_html]. И
делов-то.
Понятно, что всего про parser рассказать я тебе
не смогу. А ведь, сколько еще всего
интересного там есть. И подключения к базам
данным в наличие, и работа с cookie и
графическими файлами, и ... Короче много чего
есть в этом parser-е.
Ну что, понравилась тебе новая игрушка? То-то
и оно. И самое поразительное, что не ты один
такой. Сама темина Студия не поленилась
использовать parser для сайтов следующих
организаций: Альфа-Банк, МТС, Samsung, Netscape,
Северсталь и ... практически всех своих
остальных проектов. А после того, как parser
стал доступен всем страждущим им успело
воспользоваться немало знатных веб-мастеров.
Среди успевших подсесть на parser: Андриан
Буданцов и его "Коммунистическая
баннерная сеть" (http://www.komban.com.ua/),
сайт для бухгалтеров "Бухгалте.ру" (http://www.buhgalte.ru/),
замечательный по своей актуальности Центр
исследования проблем компьютерной
преступности (http://www.crime-research.org/),
Государственный Комитет Туркменистана по
туризму и спорту (http://www.tourism-sport.gov.tm/)
и многие-многие другие.
Если хочешь приобщиться к этой славной
когорте, то - вперед. На сайте www.parser.ru
ты найдешь много замечательной инфы как для
начинающих, так и вполне продвинутых, есть
FAQ и уникальная возможность перемолвиться
парой слов в форуме с самими разработчиками.
Так, что флаг тебе в руки и parser на веб-сервер.
Ну а чтобы ты совсем не "опарсел" и не
забыл, что изначально ты хакер, то в
качестве домашнего задания - поиск
всяческих дырок и багов в parser-е. Для чего?
Естественно для общего развития. 🙂