On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Инструменты нового поколения - счетчики

Уильям Брэдберри

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

И так, знакомтесь - флэшевый КАУНТЕР.

Каунтер - это такая штука, которая присвоит Вам порядковый номер, в тот момент, когда
Вы поимеете неосторожность заглянуть, вдруг,
на мою страничку, заблудившись в ВВВ, бескрайних просторах инета.
Тут-то я и не упущу момент ехидно потирая ручонки записать :
- АГА! Попался, будешь 13 номер... ;)=

А попросту - СЧЕТЧИК.
Ведь каждый согласится, что счетчик жизненно необходимая вещь для использования
в корыстных целях...

Почему именно флэшевый?
А почему бы и нет?

Флэш точно такой же инструмент, как и остальные, но по моему мнению
(а не по мнению какого-то там продажного Нильсена, ну и рожа на фотке, явно булки жрет, буржуй)
флэш и предоставляет именно те широкие горизонты и ВОЗМОЖНОСТИ для полета
творческой мысли, какие не предоставляет никакая другая программа на сей день.

Но какая же свобода без энергетической подпитки?
Поэтому себя всячески нужно поощрять и хвалить, например:
- О, на моем хомяке сегодня уже восьмой посетитель за этот год, УРА!
Вперед!
Не стой на месте, твори сам.

//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. ЭКИПИРОВКА

Для нашего полета нам потребуются крылья следующих моделей:
1 Графический редактор ФЛЭШ версии 5, или 6 (МХ)
2 Текстовый редактор
(любой подходящий, например БЛОКНОТ, я же юзаю УЛЬТРАЕДИТ http://www.ultraedit.com)
3 И, разумеется, сервер (подойдет даже локальный) с ФТП-доступом к нашему аккаунту и поддержкой PHP.

PHP это П-Х-П (php), а не какое-то там русское нациАнальное Ед... тьфу, меньшинство
- да, это именно тот плазменный мотор, который и будет сжигать наш керосин
во время продвижения по службе...

Если Вы все это удачно раздобыли и считаете себя готовым, то ГО-0-ГО-0-ГО-0!

- Налево, командаааа...
- в RUSH на базу "А", две гренки в проход, добиваем оставшихся СТ из 1-3, раунд наш!
- Stick together, team!

Инструктор предполагает, также, что Вы уже прошли КМБ (курс малолетнего бойскаута)
И знакомы со всеми морскими и фэлшевыми узлами, как то:

- А как мэне изменить размер рабочего по-о-оля, учитэл?
- СлушАй, Гиви, дастал, берешь саперку и мэняешь, от меня до следующего танка...

- Харашо, учител, а кнопка-то гиде рисовается?
- Гиви, в П... всо, малчу, малчу, дарагой, утри соплю...

... а также, что знакомы с тем, как пишутся скрипты внутри флэш-редактора.

//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. ИНСТРУМЕНТЫ НОВОГО ПОКОЛЕНИЯ

Откроем редактор ФЛЭШ 5, или МХ
Сохраним наш файл в какую-нибудь дирректорию, с именем "counter.fla"

Необходимые в работе элементы:
Мувиклип - 1 штука.
(рисуем черный прямоугольник, выделяем, жмем Ф-8, выбираем МУВИКЛИП, ЕНТЕР, цель уничтожена)


Текстовое поле - 1 штука, например внутри этого мувиклипа.
Заходим в режим редактирования оного по даблклику
и поверх черного квадрата рисуем текстовое поле
в свойствах поля (правый клик на поле > properties) выставляем напротив надписи

VAR: counter


и не забудьте поменять цвет текста на отличный от фона, например - белый =)

выходим из режима редактирования (например сделаем даблклик вне рабочей области)

выделив мувиклип, по правой кнопке мыши заходим в контекстное меню
и выбираем ACTIONS

вписываем в окошко только одну строчку:
#include "counter.mx"

Откроем блокнотик =).
И напишем в файле следующие строки:

//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
onClipEvent(load)
{
loadVariables("./counter.php",this,"POST");
}
onClipEvent(data)
{
this.counter = this.n;
}
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Сохранимся с именем "counter.mx" в той же дирректории что и файл 'COUNTER.FLA'.
И на этом создание нашей клиентской части завершено.
Осталось только нажать PUBLISH и скомпилировать файл.

То, что я сейчас описал настолько просто, что меня даже не сильно затруднит
это теперь растолковать ;)

onClipEvent(load) - событие, которое срабатывает при инициализации клипа.

loadVariables - функция, которая пошлет запрос на наш сервер по следующему пути:

"./counter.php"

this - означает, что ответ предназначен для СЕБЯ, т. е ответ придет в тот же объект
из которого он был вызван.

"POST" - это метод посылки нашего запроса.

onClipEvent(data) - событие, которое произойдет, когда придет ответ от сервера
вместе со всей требухой целиком и полностью и вместе с данными.

this.counter = this.n; - эта строка всего навсего
присвоит переменной "counter" (текстовое поле, помним?)
значение "n" - его мы опишем потом.

"n" - и будет содержать некое число, которое пришлет нам наш скрипт "counter.php"

хе хе. и все

Клиент готов...
И будет жить...

//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. РАСТАМАНСТВО?

ПХП...или... ПЫ-ХЫ-ПЫ?
или
... Пых Пых Пых...

Тока не будем спорится и ссорить насчет того, кто круче
Перловка или Овсянка-Сээр

ПХП - круче, и точка.
Удобнее.
...Мне.. удобнее... ;)=

И вам понравится...

Создадим новый фаил в том же блокноте и скопируем нижесодержащиеся строчки,
а потом сохраним это все с "что в иииимени тебеееээээ моййооооммм"
именем файла "counter.php" снова в ту же дирректорию, что и другие файлы...

Может это несколько некорректно, но я ужасный неряха и обожжжжаю
сваливать всякие разные файлы в одну кучу вперемешку и вперепрыжку...
Всегда есть возможность нажать ctrl+F4 или F8 =)...

прим. переводчика бумаги: все, что начинается с "//" можно
в файле стереть нафиг, это просто комментарии...
и читать будет проще.

//---------------------------- САМ СКРИПТ ---------------------------
<?
$filename = "counter/counter.txt"; // зададим имя файла, который будет хранить нашу великую цифру
$testfile=file_exists($filename); // протестируем наличие этого файла в указаном месте ф-я вернет true/false
if($testfile) // если true, то файл существует, можно с ним работать
{

$fp=fopen($filename,"r+"); // откроем файл ("r+" - говорит о том, что файл открывается на чтение+запись)
flock($fp,1); // заблокируем файл, чтобы два процесса не ввязались в борьбу за обладание им

$counter=file($filename); // запомним содержимое файла в массив $counter
fputs($fp,$counter[0]+1); // и запишем это же содержимое внутрь текстового файла, но прибавив единичку
$numb = $counter[0]+1; // тут мы просто запомним "а скока их там всего этих цыфирь"
echo ("&n=$numb&"); // а вот эта строчка и пошлет нужную нам строку во флэш

// например, если мы не из флэша вызовем скрипт, а просто из браузера
// пропишем путь к нему как http://mydomen.ru/myscripts/counter.php
// То увидим страничку с числом зверя ;), например &n=155996600456& ОГО, скока посетителей.

flock($fp,3); // разблокируем файл
fclose($fp); // закроем его, он нам больше не нужен
}else{
mkdir("counter",0700); // ".. а мне плевать - уходи...я агент 007" создадим дирректорию для файла, в котором будет храниться число для счетчика (а 0700 это права доступа
$fp = fopen($filename,"w+"); // а вот если в наличии файла не оказалось, то провернем такую процедДуру
// откроем файл, но уже на "W+" ' запись, но если файла нет, то скрипт его создаст
fputs($fp, "1"); // запишем туда число 1, поскольку он еще пустой и первенький наш... =)... аж слеза прошибла...
fclose($fp); // и закроем его
} // УСЕ, ЕНЖОЙ, и пусть энвиронмент попляшет вместе с нами в диком буги-вудууу...
?>
//----------------------- конец фыльма ----------------------


//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. КАК ЖЕ ЭТО ВСЕ РАБОТАЕТ...

Теперь у нас есть все запчасти для использования, а именно:

"Клиент" - это файл "counter.swf"
"Сервер" - это наш ПыХыПы.

Чтобы все это заработало, побросайте это на сервере в одну дирректорию
(не забудьте задать права доступа для дирректории (в фаре жмем КНТРЛ+А = RWX RWX RWX))
и запустите
из браузера, сначала "counter.php"
пример: http://wb.legus.ru/test/php/counter/counter.php

потом "counter.swf"
пример: http://wb.legus.ru/test/php/counter/counter.html

и понажимайте F5, а тоскливо наблюдать одну только единичку ;)=
(правда кэш нужно-таки чистить, постоянно)

При загрузке файла
"counter.swf" он обратится, с помощью "loadVariables();" по заданному пути к скрипту "counter.php"
Скрипт же откроет файл "counter.txt" , посмотрит туда, узнает какое там лежит число,
затем прибавит еденичку, затем выдаст это в виде ответа (echo) - ФЛЭШУ
и закроет файл.

"counter.swf" примет ответ скрипта и
с помощью события (data) отобразит в текстовом поле этот ответ.

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

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

Что ж.. изучаем ПыХыПы и все получится ;)=
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


Все копирайты можно тоже удалить, все-равно скрипт, кроме вас никому не интересен,
Зато потом можно будет растопырить пальцы и сказать

function()
{
trace(Я - КРУТ) // undefined
}

//-------------------------------------------------------------------------
// Copyright © Willyam Bradberry 2002
// [flash - master] mailto:willyam@newmail.ru
// wb@3wgraphics.net
//-------------------------------------------------------------------------

ЗЫ: ФЛЭШЕР не забудь громко крикнуть ВСЛУХ "СПАСИБО УИЛЬЯМ БРЭДБЕРРИ"
это поможет немного тебе избавиться от ЧСВ (чувство собственной важности)
и чуть -чуть помолодеть...

ЗЗЫ: пояснялки::
"в фаре жмем..", это заначит открываем программу FAR
http://www.rarsoft.com
и подключаемся по ФТП к серверу (alt+F2 > FTP).
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
"создадим дирректорию для файла, в котором будет храниться число для счетчика (а 0700 это права доступа)"
скрипт устроен так, что проверит наличие файла и выполнит эту строку только один раз,
в его(файла) отсутствие
//. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
"0700" - про права доступа можно прочитать во всяких хелпах по ПХП и ЮНИКС-ос



Литература по FLASH