PHP: Полезные приемы
Автор: Антон Орлов, orlovs.pp.ru

  Главная   Учебник   Статьи   FAQ   Книги   Ссылки  

Глава 4

PHP: выборочная загрузка

В этой главе приведен пример простого PHP-сценария.

Сайт www.harchikov.ru посвящен творчеству популярного певца-барда Александра Харчикова. На сайте должны были быть представ-лены вышедшие альбомы певца в количестве 15 штук и записи песен каждого альбома в MP3-формате. При создании сайта возникла необ-ходимость обеспечить удобную навигацию. Общепринятый способ - ссылки на страницы с описанием каждого из альбомов и песнями из него - имел тот недостаток, что посетитель, желающий просмотреть не один альбом, а сразу несколько, был бы вынужден постоянно пе-реходить со страницы на страницу, делая лишние усилия. Кроме того, в случае разрыва связи во время загрузки какого-либо файла посети-тель, ушедший на другую страницу, был бы вынужден снова возвра-щаться на ту, с которой он этот файл загружать начал, тратя время на ее поиск. Недостаток другого варианта - размещения информации о всех альбомах на одной странице - ясен: размер этой страницы полу-чился бы очень большим, а интересная посетителю информация мог-ла бы занимать лишь небольшую ее часть.

Поэтому было сделано так. На главной странице разместилась форма, а у каждого названия альбома - checkbox, внизу же страницы - кнопка перехода на список альбомов. Посетитель мог отметить заин-тересовавшие его альбомы (рис.4.1), и после нажатия кнопки перехо-да PHP-сценарий выводил ему страницу с описаниями лишь тех аль-бомов, которые посетитель выбрал (рис.4.2).


Рис.4.1. Чтобы просмотреть лишь избранные альбомы, доста-точно их отметить...


Рис.4.2. ...и вот, как на ладони - только они.

Чтобы добиться такого результата, всем checkbox'ам заглавной страницы сайта были присвоены имена: <INPUT name=pan01 type=checkbox>. Все эти checkbox'ы находятся в большой форме, па-раметром action которой является имя файла с программой на PHP, выводящей описания альбомов в соответствии с данными этой фор-мы, а для передачи данных формы используется метод get (т.е. ее за-головок имеет вид <FORM action=albm.php method=get name=forma>). Последнее приводит к тому, что в адресе страницы с выведенными описаниями альбомов присутствуют переменные (см. на рис. 4.2), т.е. если посетитель занесет этот адрес в "Избранное", то при последующих возвращениях на сайт по этой ссылке (например, для дальнейшей загрузки песен выбранных альбомов) ему не придет-ся вновь выбирать альбомы на заглавной странице, как это было бы в случае использования метода post, не помещающего имена перемен-ных и их значения в строку адреса (что, впрочем, выглядит красивее).

Кнопка, вызывающая переход на страницу, указанную в параметре action заголовка формы, должна иметь тип submit, например: <input type=submit value="Вывести оглавления отмеченных альбомов">.

Загрузив заглавную страницу сайта www.harchikov.ru, можно легко изучить структуру расположенной на ней формы, что вы и сделайте, если описание вам непонятно.

В файле же albm.php (адрес именно этого файла указан в заголовке формы заглавной страницы) помещена простая программа, выглядя-щая так:

<?php
if ($bar01==True) {include ("bar01.php"); }
if ($bar02==True) {include ("bar02.php"); }
... по строке на каждый альбом ...
?>

В файлах bar.01.php, bar02.php и т.д. находятся описания альбомов и ссылки на MP3-файлы песен. Если checkbox с соответствующим именем был отмечен на заглавной странице, то переменная его имени оказывается равной True - именно это и проверяется в сценарии.

Удивительно, что этот простейший прием в настоящее время прак-тически не применяется на сайтах Сети - используется традиционная схема размещения информации со множеством ссылок на отдельные разделы. А ведь как удобно - например, на сайте Харчикова можно выбрать альбомы, сгенерировать себе страницу со ссылками на песни из них и, заходя на нее, постепенно загружать песни или передать весь список ссылок на файлы в какую-нибудь из программ-"качалок". Или, скажем, на сайте фирмы "Экон-Профи" (www.econprofi.ru) точно так же сделан раздел "Вопросы и ответы" (рис.4.3), - отметив интере-сующие вопросы на странице раздела, можно получить подробные консультации исключительно по выбранным темам. Полученная страница и загрузится быстрее, да и при ее распечатке лишней бумаги тратить не потребуется.


Рис.4.3. Если вас заинтересовали лишь отдельные вопросы, нет надобности загружать всю страницу.

Данную схему, разумеется, можно доработать. Опыт показывает, что посетители чаще всего предпочитают просмотреть либо два-три выбранных раздела, либо все разделы сразу. В последнем случае им придется отмечать все checkbox'ы страницы, что занимает время и си-лы. Поэтому стоит поместить на страницу еще и кнопку вывода сразу всех разделов - "Просмотреть все". Ей можно назначить гиперссылку с адресной строкой, содержащей все переменные в значении on, а можно немного доработать код PHP на странице-обработчике запро-са, попросту добавив во все условия проверку значения еще одной, общей для всех условий переменной: if (($bar02==True) || ($all==True)) {... (напоминаю, что знак || означает "или"), и тогда ги-перссылка может вести всего лишь на адрес albm.php?all=True. Мож-но для решения той же задачи поместить на страницу пару сценариев на JavaScript, выполняющих соответственно отметку всех checkbox'ов и, наоборот, их очистку (см. такой, к примеру, на странице www.harchikov.ru/cass.php).

Так что простор для творчества имеется, и немалый.

Hosted by uCoz