[как сделать простой каталог на 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>, то получится очень удобный инструмент, позволяющий быстро разобраться в преимуществах и недостатках интересующих предметов. Разумеется, можно и еще много чего придумать – дело за вами.
Надеюсь, что данная технология поможет вам сделать свой сайт более интересным и удобным для посетителей. Успехов!