[как сделать простой каталог на php]материал подготовил: Дмитрий Турецкий 06.05.2004
Одним из распространенных типов сайтов является некое подобие каталога — скажем, список продаваемых фирмой товаров или написанных вами программ. Типичным дизайном такого сайта является список названий товаров на одной странице, и по странице с (более или менее) подробным описанием каждого товара. Довольно часто у пользователя возникает желание посмотреть не один, а несколько товаров и, возможно, сравнить их между собой. И приходится ему, бедному, открывать множество окон и переключаться между ними…
В некоторых случаях это бывает оправдано — в частности, если описание товара достаточно большое. Но порой просто диву даешься — насколько неэкономно расходуется место на экране. И сегодня мы попробуем написать скрипт, который позволит пользователю самостоятельно отбирать заинтересовавшие его товары из списка и выводить их на одной странице — например, для последующей распечатки.
Как ни смешно, но сделать это совсем не сложно. Все, что потребуется — это добавить на страницу списка товаров форму и элементы управления для выбора нужных товаров. Например, создадим страницу 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>
После этого создадим страницы описания для каждого товара и сохраним их в соответствующих файлах — 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 немножко модифицировать, заключив вывод элементов внутрь еще одной формы
Естественно, при этом вам надо будет добавить и еще один цикл для вывода «окончательных элементов».
Подобный подход — сведение выбранных элементов в одну страницу — может использоваться не только для вывода информации о товарах, но и, например, для списков ответов на типичные вопросы, прайс-листов и тому подобных вещей. Отдельно можно упомянуть страницы сравнения однотипных товаров или программ — если в «конечном файле» прописать строку таблицы с характеристиками товара, а цикл вывода заключить внутрь тегов <table>, то получится очень удобный инструмент, позволяющий быстро разобраться в преимуществах и недостатках интересующих предметов. Разумеется, можно и еще много чего придумать — дело за вами.
Надеюсь, что данная технология поможет вам сделать свой сайт более интересным и удобным для посетителей. Успехов!