Итак, с этого урока мы начнем программировать на Flash и PHP. Для того, чтобы
вы поняли то, что здесь будет описываться, у вас должны быть базовые знания
по Flash и PHP. Но если вы не хотите ничего понимать, и вам нужно просто воспользоваться
приведенными здесь примерами, то вам достаточно уметь открывать программу Macromedia
Flash и Блокнот =). Я постараюсь описать каждое действие так, чтобы вам все-таки
было понятно, и вы не закидывали меня глупыми вопросами. Итак-с... приступим...
Текстовые поля во Flash
Давайте сначала как следует разберем текстовые поля во Flash, чтобы потом не
возникало вопросов. Существует 3 типа текствоых полей:
- Static Text - обычный текст. Имеет два модификатора:
- Use Devise Fonts - включить использование шрифтов устройств пользователя
(желательно применять только для латиницы).
- Selectable - возможность выделения и копирования текста.
- Dinamic Text - динамический редактируемый текст. Позволяет изменять
содержимое текствого поля в процессе всего выполнения ролика. Чаще всего используется
для вывода текста через ActionScript. Имеет следующие модификаторы:
- Sing Line - однострочное текстовое поле.
- MiltiLine - многострочное текстовое поле. При
включении данного режима появляется возможность автоматического переноса
текста по словам Word Wrap.
- Variable - имя текстового поля, которое становится глобальной
переменной, значением которой является текст, содержащийся в текстовом
поле.
- HTML - режим поддержки html-тэгов.
- Border/Bg - отображение фона поля и границы текстового поля в
виде тонкой рамки.
- Selectable - возможность выделения и копирования текста.
- Embed Fonts - возможность ограничения вводимых в текстовое поле
символов: все символы, только прописные или только строчные, цифры, знаки
препинания. Можно указать символы самостоятельно.
- Input Text - текстовое поле для ввода информации пользователем. Помимо
всех тех же модификаторов, что и Dinamic Text, имеет еще два:
- Password - визуальная замена звездочками всех символов, вводимых
в текстовое поле.
- Max Chars - максимальное допустимое количество символов для
ввода.
Вот мы и разобрали все типы текстовых полей и их модификаторы. Теперь у вас
не должно возникать никаких вопросов по этому поводу.
Отсылка данных скрипту
Сейчас перейдем, если не к самой главной, то к важной теме - отсылки данных
скрипту. Итак, как мы уже знаем, при создании динамического или вводного поля
для его идентификации нужно вводить в поле "Variable" имя этого поля,
которое будет являться глобальной переменной со значением текста, содержащегося
в этом текстовом поле. Вот как раз и эти переменные с их значениями нужно отослать
скрипту. А это делается довольно-таки легко: нам просто нужно создать в том
же фрэйме, где и текстовые поля, кнопку с таким ActionScript:
- on
(press) {
- getURL("send.php","_blank","POST");
- }
|
[AS.1] |
или
- on
(press) {
- loadVariablesNum("send.php",
0, "POST");
- }
|
[AS.2] |
В первом случае мы открываем скрипт "send.php" в новом окне и передаем
ему наши данные с помощью метода "POST". Во втором случае мы тоже
отсылаем данные скрипту "send.php" методом "POST", но никаких
новых окон не появляется и страница с Flash-роликом "остается на месте",
т.о. данные отсылаются скрипту, но незаметно для человека, просматривающего
ролик... Можно отсылать данные и функцией "loadVariables", и с помощью
метода "GET", но я привык использовать эти два скрипта, так что будем
пользоваться ими. Небольшой пример. У нас есть в одном фрэйме два вводных текстовых
поля [первое с именем "name", второе с именем "email"] и
одна кнопка с ActionScript "AS.2". Введем в текстовое поле "name"
- Vasya Pupkin, а в текстовое поле "email" - vasya@pupkin.ru. Теперь
при нажатии на кнопку скрипту передадутся переменная "name" со значением
"Vasya Pupkin" и переменная "email" со значением "vasya@pupkin.ru".
Вот так все просто. Давайте перейдем к более серьезным примерам.
Отсылаем сообщение из Flash-ролика на заданный e-mail
Способ 1.
Скачать исходник
Итак перед нами стоит такая задача: сделать Flash-ролик, в котором будет форма,
состоящая из текстовых полей ["Ваше имя", "Ваш email", "Тема
письма", "Текст письма"] и кнопки, которая будет отсылать данные
скрипту, который нам тоже нужно написать, чтобы отправить введенное сообщение
на наш e-mail. Итак-с... начнем-с...
Сначала создадим два фрэйма и в каждый из них добавим команду "stop();".
Затем добавим в первый фрэйм 3 текстовых поля типа "Input Text" с
модификаторами Single Line и Border/Bg. Расположим их вертикально, одно текстовое
поле над другим. Самое верхнее назовем "name" и слева него напишем
"Ваше имя", в это поле человек, пожелавший отослать нам письмецо,
будет вводить свое имя. Текстовое поле, расположенное ниже, назовем "email"
и слева него напише "Ваш email", для чего оно, думаю, понятно. Самое
нижнее поле назовем "subj" и слева него напишем "Тема письма",
тоже вопросов не должно быть. Теперь создадимм еще одное текстовое поле типа
"Input Text" с модификаторами MultiLine, WordWrap и Border/Bg. С помощью
мыши растянем его по вертикали, чтобы было видно, что это многострочное поле
и сюда надо вводить много текста =). Назовем это поле "text" и слева
него напишем "Текст письма". Пришла пора сделать "мостик"
между Flash и PHP - кнопку. Нарисуем какую-нибудь фигуру произвольной формы
[я нарисовал прямоугольник с закругленными улами :o] и напишем на ней "Отправить".
Затем преобразуем все это в символ "button" и добавим этой свеженькой
кнопке такой ActionScript:
- on
(press) {
- if
(length(email) < "5" || length(text) < "5")
{
-
- getURL("javascript:alert('Вы
заполнили не все об\xFFзательные пол\xFF');");
- }
else {
-
- loadVariablesNum("send.php",
0, "POST");
- play();
- }
- }
|
Здесь мы применили полученные знания из прошлого урока "Взаимодействие
Flash, Html и JavaScript". Что же мы делаем: при нажатии кнопки идет проверка,
если длина email'a или текста письма меньше, чем 5 символов, то выводим диалоговое
окно Alert с сообщением "Вы заполнили не все обязательные поля" [т.к.
Flash 5 не понимает маленькую букву "я", мы заменяем ее шестнадцатеричным
кодом "\xFF"], иначе, если все ОК, то тихо и незаметно передаем данные
скрипту "send.php" методом "POST" и проигрываем ролик дальше,
ну а так как у второго кадра стоит action "stop();", то комада "play()"
равносильна команде "gotoAndStop(2);". Во втором кадре напишем сообщение,
что письмо успешно отправлено на наше мыло. Желательно еще и сделать кнопочку
для перехода к первому кадру, чтобы пользователь мог еще отправить нам свое
заветное письмо [ой, ой, ой... а если злостный спамер или флудер попадет на
нашу страницу =) ]. Дальше экспортируем ролик с именем "mailfriend.swf".
Итак, Flash-ролик готов! Еще раз проверьте, все ли вы сделали правильно. Если
все ОК, то можно идти дальше!
Осталось нам написать скрипт на самом ИМХО рулезном языке web-программирования
- PHP [фанатов Perl и ASP прошу не спамить мне на мыло =) ]. Особо вдаваться
в фунции PHP не буду, т.к. это не входит в рамки нашей рассылки, но все же постараюсь
дать комментарий каждой строке. Итак, откроем Блокнот или любой другой текстовый
редактор, создадим файл "send.php" и начнем писать в нем скрипт.
Начинаем php-блок и создаем переменную, в которой будет содержаться e-mail,
на который нужно отсылать сообщение:
<?
$my_email = "keeper@flashteacher.ru";
|
Проверяем с помощью оператора "if()", были ли отправлены данные из
Flash-ролика, и если были, то отсылаем сообщение с помощью функции "mail();"
:
-
if ($email
&& $text) {
- @mail("$my_email",$subj,$text,"FROM: "."$name<$email>");
|
Иначе, если данные не были отправлены, то закрываем php-блок...
...и выводим сам Flash-ролик:
- <html><body
bgcolor="#7A7B78"><center><br>
<table width="402" border="0" cellspacing="1"
cellpadding="0" bgcolor="#000000">
<tr><td><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0" width="400" height="250">
<param name=movie value="mailfriend.swf">
<param name=quality value=high>
<param name=menu value=false>
<embed src="mailfriend.swf" quality=high menu=false pluginspage="http://www.macromedia.com/shockwave/download/
index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/
x-shockwave-flash" width="400" height="250">
</embed>
</object></td></tr>
</table>
</center></body></html>
|
Затем открываем php-блок, закрываем оператор "if()" и закрываем php-блок:
Вот и весь скрипт! И, как вы видите, почти всю его часть занимает вывод нашего
Flash-ролика! Думаю, вы найдете, где применить данный урок. Кстати, работать
скрипт будет, конечно же, только, если в услуги вашего хостинга входит поддержка
PHP, так что ни на каком narod.ru и by.ru даже не пытайтесь пробовать, лучше
используйте нижеследующий пример.
Способ 2.
Скачать исходник
Сейчас речь пойдет тоже об отсылке сообщений на e-mail, но без использования
PHP, а просто через почтовый клиент пользователя. Дело в том, что много мне
писем приходит с этим вопросов, ну а так как мы как раз и говорили сейчас об
отсылке сообщения на мыло, то и самое время поговорить еще об одном способе.
Сначала создадим в первом фрэйме два текстовых поля типа "Input Text":
1) с модификаторами Single Line, Border/Bg и 2) с модификаторами MultiLine,
WordWrap и Border/Bg. Расположим первое текстовое поле поверх второго, назовем
его "subj" и слева напишем "Тема письма", второе текстовое
поле назовем "text" и слева напишем "Текст письма". Теперь
создадим в этом же фрэйме кнопку и добавми ей такой ActionScript:
- on
(press) {
- email
= "keeper@flashteacher.ru";
eml = mailto:"+email+"?subj="+subj+"&body="+text;
getURL(eml);
- }
|
Переменная "email" содержит e-mail, на который нужно отослать письмо.
А в переменную "eml" мы формируем запрос "mailto", который
содержит у нас два атрибута: "subj" - тема письма по умолчанию и "body"
- текст письма по умолчанию. Ну а функцией "getURL()" мы отсылаем
запрос почтовому клиенту пользователя. Вот так легко решается проблема, которая
волнует очень многих.
Отсылаем из Flash-ролика сообщение на номер icq
Скачать исходник
Вы никогда не думали сделать в своем Flash-ролике форму для отсылки сообщения
на ваш номер аськи? Нет? Тогда самое время подумать и реализовать это.
Нам понадобится Flash-ролик, который мы делали вначале для отсылки письма на
e-mail способом №1. Если вы не делали этот Flash-ролик, то придется сделать.
Ну а если лень, то можете скачать готовый исходник.
Оставьте все те же текстовые поля с их именами и модификаторами, все надписи
и кнопку. ActionScript кнопки измените на такой:
- on
(press) {
- if
(length(name) < "5" || length(email) < "5"
|| length(subj) < "5" ||length(text) < "5")
{
-
- getURL("javascript:alert('Вы
заполнили не все пол\xFF');");
- }
else {
-
- loadVariablesNum("icq_send.php",
0, "POST");
- play();
- }
- }
|
Здесь мы добавили проверку на наличие у каждого текстового поля не менее 5
символов, так как для сообщения на icq желательно заполнить все поля. Также
мы изменили название скрипта на "icq_send.php". Во втором фрэйме напишите
"Ваше сообщение было успешно отправлено на мой номер icq!", чтобы
пользователь не гадал, было ли отправлено сообщение или нет. Экспортируйте этот
Flash-ролик с именем "icq_send.swf". Теперь займемся скриптом. Откройте
Блокнот, создайте новый файл "icq_send.php" и начните в него записывать
php-скрипт.
Начинаем php-блок и создаем переменную, в которой будет содержаться номер icq,
на который нужно отсылать сообщение:
Проверяем с помощью оператора "if()", были ли отправлены данные из
Flash-ролика, и если были, то формируем заголовок:
-
if ($name
&& $email && $subj && $text) {
- $submit = "Send Message";
$ref = "http://wwp.icq.com/$to";
- $PostData =
"from=".urlencode($name)."&".
"fromemail=".urlencode($email)."&".
"subject=".urlencode($subj)."&".
"body=".urlencode($text)."&".
"to=".urlencode($icq)."&".
"submit=".urlencode($submit);
$len = strlen($PostData);
$nn = "\r\n";
$zapros =
"POST /scripts/WWPMsg.dll HTTP/1.0".$nn.
"Referer: $ref".$nn.
"Content-Type: application/x-www-form-urlencoded".$nn.
"Content-Length: $len".$nn.
"Host: wwp.icq.com".$nn.
"Accept: */*".$nn.
"Accept-Encoding: gzip, deflate".$nn.
"Connection: Keep-Alive".$nn.
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".$nn."".$nn."$PostData";
|
Открываем сокет, шлем заголовок и закрываем сокет:
-
- $fp
= fsockopen("wwp.icq.com", 80, &$errno, &$errstr,
30);
if(!$fp) { echo "$errstr ($errno)<br>\n"; exit; }
fputs($fp,$zapros);
fclose($fp);
|
Если данные из Flash-ролика не были отправлены, то закрываем php-блок и...
...и выводим сам Flash-ролик:
- <html><body
bgcolor="#7A7B78"><center><br>
<table width="402" border="0" cellspacing="1"
cellpadding="0" bgcolor="#000000">
<tr><td><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0" width="398" height="248">
<param name=movie value="icq_send.swf">
<param name=quality value=high>
<param name=menu value=false>
<embed src="icq_send.swf" quality=high menu=false pluginspage="http://www.macromedia.com/shockwave/download/
index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/
x-shockwave-flash" width="398" height="248">
</embed>
</object></td></tr>
</table>
</center></body></html>
|
Затем открываем php-блок, закрываем оператор "if()" и закрываем php-блок:
Скрипт готов! Опять же, работать все это будет только на хостинге с поддрежкой
php. Если нет поддержки php, то можете просто взять урок по отправке письма
на мыло вторым способом и заменить переменную "email" на "xxx@pager.icq.com",
где xxx - ваш номер icq! Т.о. пользователь просто отправит письмо на e-mail,
в зависимости от вашего номера аси, и вы получите текст этого письма уже в аське.
Разница этих двух способов в том, что в первом случае сообщение вы получите
сразу после отправки, а во втором сообщение может доходить некоторое время.
Так что если у вас хостинг поддерживает php, то используйте только первый способ.
ЗЫ: Скрипт для отправки сообщения на icq был взят с сайта web-apteka.km.ru
Подводим итоги
Итак, мы изучили все типы текстовых полей и их модификаторы, научились отсылать
данные скрипту, и разобрали очень полезные примеры, которые могут вам пригодиться,
например, для возможности обратной связи на вашем Flash-сайте.
Все замечания и пожелания по поводу этого урока присылайте на keeper@flashteacher.ru
. Удачи!
|