В некоторых случаях это бывает оправдано — в частности, если описание товара достаточно большое.
Но порой просто диву даешься — насколько неэкономно расходуется место на экране. И сегодня мы попробуем написать скрипт, который позволит пользователю самостоятельно отбирать заинтересовавшие его товары из списка и выводить их на одной странице — например, для последующей распечатки.
Как ни смешно, но сделать это совсем не сложно. Все, что потребуется — это добавить на страницу списка товаров форму и элементы управления для выбора нужных товаров. Например, создадим страницу selector.html:
<html>
<head><title>Выбор интересных товаров</title></head>
<body>
<form action="selector.html" method=post>
<input type=checkbox name="item1" value="item1.htm"<?php echo (isset($_POST['item1'])) ? "checked>" : ">"; ?> Описание первого товара <br>
<input type=checkbox name="item2" value="item2.htm"<?php echo (isset($_POST['item2'])) ? "checked>" : ">"; ?> Описание второго товара <br>
....
<input type=submit value="Показать товары">
</form>
<hr>
<?php
while(list($k, $v) = each($_POST))
if (file_exists($v)) readfile($v);
?>
</body></html>
После этого создадим страницы описания для каждого товара и сохраним их в соответствующих файлах — item1.htm, item2.htm и так далее. В этих описаниях надо убрать все служебные заголовки — <html>, <title> и прочие — и оставить только сами описания. Теперь посмотрим, что произойдет...
Когда страница selector.html откроется в браузере, посетитель увидит список товаров, перед каждым из которых будет стоять чекбокс. Посетитель отметит заинтересовавшие товары и нажмет кнопочку «показать». Так как в качестве значения action формы указана эта же страница, то она начнет загружаться снова, но в работу вступит PHP-код, который мы написали...
Сохранять при перезагрузке страницы значения, введенные посетителем — это «хороший тон»Прежде всего, для каждого товара из списка будет проведена проверка: передано ли соответствующее значение? В строке
<input type=checkbox name="item1" value="item1.htm"<?php echo (isset($_POST['item1'])) ? " checked>" : ">"; ?> Описание первого товара
первая часть — <input type=checkbox name="item1" value="item1.htm" — является «чистым» HTML и будет напечатана как есть, а php-вставка "<?php echo (isset($_POST['item1'])) ? " checked>" : ">"; ?> проверит, установлено ли значение элемента массива $_POST с именем item1 (что может произойти, только если посетитель отметил соответствующий чекбокс), и если да, то допишет к строке " checked<", а если нет, то допишет "<". В первом случае чекбокс будет отмечен, а во втором — нет, то есть на странице сохранятся те же отметки, которые сделал посетитель.
Довольно часто бывает проще прокрутить весь массив в цикле, чем проверять, установлены ли нужные значения по отдельностиКогда вся форма выведется, в дело вступит цикл, который последовательно просмотрит элементы массива $_POST и для каждого переданного значения проверит, есть ли на сервере файл с таким именем. Если файл обнаружится, то он будет прочитан и передан в браузер, а если нет — ничего и не произойдет. И в результате всех этих манипуляций посетитель увидит одну страницу с подробными описаниями всех заинтересовавших его товаров...
Если у вас паранойя — это еще не значит, что за вами не следят!Хочется подчеркнуть, что данный скрипт написан исключительно для иллюстрации метода — при «промышленном использовании» надо обязательно проверять корректность передаваемых посетителем данных перед их использованием. В противном случае посетитель сможет посмотреть практически любой файл, к которому веб-сервер имеет доступ — достаточно, например, передать в качестве значения POST-переменной item1 что-то вроде "/etc/passwd".
Можно делать и многуровневые выборкиВариант с включением готовых файлов в страницу будет удобен для большинства небольших корпоративных сайтов, но никто не мешает вместо чтения файла указать любые другие команды — например, выбрать требуемые данные из базы. А можно делать и многоуровневые выборки — например, если item1htm — это не товар, а раздел второго уровня, то можно в нем прописать ссылки на товары точно так же, как и в приведенном примере (но без тега <form>), а страницу selector.html немножко модифицировать, заключив вывод элементов внутрь еще одной формы
<form action="selector.html" method=post>
<?php
while(list($k, $v) = each($_POST))
if (file_exists($v)) readfile($v);
?>
<input type=submit value="Показать товары">
</form>
Естественно, при этом вам надо будет добавить и еще один цикл для вывода «окончательных элементов».
Подобный подход — сведение выбранных элементов в одну страницу — может использоваться не только для вывода информации о товарах, но и, например, для списков ответов на типичные вопросы, прайс-листов и тому подобных вещей. Отдельно можно упомянуть страницы сравнения однотипных товаров или программ — если в «конечном файле» прописать строку таблицы с характеристиками товара, а цикл вывода заключить внутрь тегов <table>, то получится очень удобный инструмент, позволяющий быстро разобраться в преимуществах и недостатках интересующих предметов. Разумеется, можно и еще много чего придумать — дело за вами.
Надеюсь, что данная технология поможет вам сделать свой сайт более интересным и удобным для посетителей. Успехов!
Статья получена: hostinfo.ru