Интернет-журнал 'Домашняя лаборатория', 2007 №3 - Живцов
Шрифт:
Интервал:
Закладка:
Поэтому было сделано так. На главной странице разместилась форма, а у каждого названия альбома — checkbox, внизу же страницы — кнопка перехода на список альбомов. Посетитель мог отметить заинтересовавшие его альбомы (рис. 19.2), и после нажатия кнопки перехода РНР-сценарий выводил ему страницу с описаниями лишь тех альбомов, которые посетитель выбрал (рис. 19.3).
Рис. 19.2. Чтобы просмотреть лишь избранные альбомы, достаточно их отметить,
Рис. 19.3. …и вот, как на ладони — только они.
Сделано это просто.
Все checkbox'ы заглавной страницы сайта имеют свои имена: <INPUT name=pan01 type=checkbox> и находятся в большой форме, параметром action которой является имя файла с программой на РНР, выводящей описания альбомов в соответствии с данными этой формы, а для передачи данных формы используется метод get (т. е. ее заголовок имеет вид <FORM action=albm.php method=get name=forma>). Последнее приводит к тому, что в адресе страницы с выведенными описаниями альбомов присутствуют переменные (см. рис. 19.3), т. е. если посетитель занесет этот адрес в "Избранное", то при последующих возвращениях на сайт по этой ссылке (например, для дальнейшей загрузки песен выбранных альбомов) ему не придется вновь выбирать альбомы на заглавной странице, как это было бы в случае использования метода post, не помещающего имена переменных и их значения в строку адреса (что выглядит красивее). Кнопка, вызывающая переход на страницу, указанную в параметре action заголовка формы, должна иметь тип submit:
<INPUT type=submit value="BbmecTH оглавления отмеченных альбомов">
Загрузив заглавную страницу сайта www.harchikov.ru, можно легко изучить ее структуру.
В файле же albm.php помещена простая программа, выглядящая так:
<?php
if ($bar01==True) {include ("bar01.php"); }
if ($bar02==True) {include ("bar02.php"); }
… по строке на каждый альбом…
?>
В файлах bar.01.php, bar02.php и т. д. находятся описания альбомов и ссылки на МРЗ-файлы песен. Если checkbox с соответствующим именем был отмечен на заглавной странице, то переменная его имени оказывается равной True — именно это и проверяется в сценарии.
Удивительно, что этот простейший прием в настоящее время практически не применяется на сайтах Сети — используется традиционная схема размещения информации со множеством ссылок на отдельные разделы. А ведь как удобно — например, на сайте Александра Харчикова можно выбрать альбомы, сгенерировать себе страницу со ссылками на песни из них и, заходя на нее, постепенно загружать песни или передать весь список ссылок на файлы в какую-нибудь из программ-"качалок". Или, скажем, на сайте фирмы "Экон-Профи" (www.econprofi.ru) точно так же сделан раздел "Вопросы и ответы" (рис. 19.4), — отметив интересующие вопросы на странице раздела, можно получить подробные консультации исключительно по выбранным темам. Полученная страница и загрузится быстрее, да и при ее распечатке лишней бумаги тратить не потребуется.
Рис. 19.4. Если вас заинтересовали лишь отдельные вопросы, нет надобности загружать всю страницу.
Данную схему, разумеется, можно доработать. Опыт показывает, что посетители чаще всего предпочитают просмотреть либо два-три выбранных раздела, либо все разделы сразу. В последнем случае им придется отмечать все checkbox'ы страницы, что занимает время и силы. Поэтому стоит поместить на страницу еще и кнопку вывода сразу всех разделов — "Просмотреть все". Ей можно назначить гиперссылку с адресной строкой, содержащей все переменные в значении on, а можно немного доработать код РНР на странице-обработчике запроса, попросту добавив во все условия проверку значения еще одной, общей для всех условий переменной: if (($bar02==True) || ($all==True)) {… (напоминаю, что знак ||
означает "или"), и тогда гиперссылка может вести всего лишь на адрес albm.php?all=True. Можно для решения той же задачи поместить на страницу пару сценариев на JavaScript, выполняющих соответственно отметку всех checkbox'ов и, наоборот, их очистку (см. такой, к примеру, на странице www.harchikov.ru/cass.php). Так что простор для творчества имеется, и немалый.
Интернет-магазин
2. С помощью РНР можно легко сделать мини-Интернет-магазин — т. е. установить на сайт форму заказа, которая будет отправляться вам по электронной почте. При этом почтовая программа посетителя использоваться не будет — ему даже необязательно вообще ее иметь.
К примеру, такой "виртуальный магазин" аудиокассет сделан на странице http://www.harchikov.ru/cass.php (рис. 19.5). Посетитель может просмотреть описания кассет и отметить заинтересовавшие его предложения, поставив галочку в checkbox'ах. В низу страницы расположен раздел оформления заказа — сверившись с суммой (рассчитываемой небольшим сценарием на javascript и выводимой средствами Dynamic HTML в соответствующей строке формы), посетитель должен ввести свои контактные данные и отправить заказ, нажав соответствующую кнопку.
Рис. 19.5. Интернет-магазин — выбирай и заказывай. А строили его всего 5 минут.
Страница "магазина" содержит форму с заголовком <FORM METHOD="post" ACTION="http://www.harchikov.ru/zakaz.php" NAME="mainform"> — то есть PHP-программа, обрабатывающая форму, находится в файле zakaz.php на сайте www.harchikov.ru (и именно на эту страницу произойдет переход после нажатия кнопки отправления заказа на исходной странице — "Отправить заказ"), а в адресной строке переменные отображаться не будут. Поскольку программы на РНР, чтобы быть исполненными, должны содержаться в какой-либо web-странице, то команда отправки почты содержится в файле zakaz.php. Вот как выглядит РНР-сценарий, формирующий письмо с заказом и отправляющий его администратору сайта:
<?php
$zak=" n";
if ($RNS == True){$zak="$zak Русские не сдаются! n"; }
if ($ZAR == True){$zak="$zak За Родину n"; }
if ($PRP == True){$zak="$zak Песни пролетариата n"; }
...
mail ("[email protected]", "Заказ на кассеты", "С адреса $email с контактными данными $cont пришла заявка на приобретение кассет: $zak. Отправитель пользовался браузером $HTTP_USER_AGENT, работал с IP-адреса $REMOTE_ADDR", "From: $emailnReply-To: $emailnContent-Type: text/plain; charset=windows-1251");
?>
Команда, собственно отправляющая письмо, стоит последней — это mail (описание читайте выше). Так как весьма желательно, чтобы получатель письма мог сразу начать выполнять заказ, не тратя время на расшифровку письма, то с помощью небольшого фрагмента кода на основе данных о значениях переданных переменных создается строка с построчным перечнем полных названий заказываемых товаров (чтобы не было проблем с восприятием интерпретатором кириллических символов в качестве имен переменных, имя каждого checkbox’а содержит только латинские буквы, например, PVS — <INPUT NAME=FVS TYPE=checkbox>) — и уже эта строка помещается в письмо. В результате тот, кто обрабатывает заказы, получит аккуратный список заказанных товаров и сведения о заказчике.
Имейте в виду, что для