CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Сервер племени апачей

Артем Cosmic ШМАНЦЫРЕВ cosmic@mail.zp.ua

(Продолжение, начало см. в МК № 38-40, 42, 44 (209-211, 213, 215))

Сегодня мы продолжаем писать наш интернет-магазин.

Итак, левый фрейм. Как много в этом слове… :-). Как мы уже договорились, левый фрейм будет содержать список отделов нашего ИМ, который он достанет из файла price.csv, находящегося на сервере. .csv — очень удобный для нас формат, так как он поддерживается и РНР, и табличным процессором Microsoft Excel, который, несомненно, установлен у подавляющего большинства юзеров нашей страны :-). Формат CSV представляет собой текстовую таблицу, в которой строки разделены знаком перевода строки, а столбцы — определенным символом. В качестве примера, в файл price.csv с помощью любого текстового редактора мы запишем следующие отделы (Рис. 1).

Эти же строки мы могли бы записать и при помощи таблицы Excel. Для этого нужно создать новую книгу и записать в ячейки перечисленные значения (по одному в каждой ячейке), как показано на Рис. 2.

Рис. 1   Рис. 2

После этого выбрать пункт меню Файл > Сохранить как…, перейти в директорию документов ИМ (f:\www\shop) в качестве типа файла указать CSV (разделители — запятые) (*.CSV)», ввести имя файла price и нажать кнопку Сохранить. Вот и вся наука :-). В дальнейшем вы сможете открывать этот файл с помощью Excel и вносить в него те или иные изменения и/или дополнения в ассортимент продукции.

Теперь перейдем к формату файла. Первая буква «о» каждой строки обозначает, что дальнейшая информация в строке представляет собой информацию об отделе. Буква «о» — это условность для наглядности :-). Можно было написать любую другую букву или несколько букв — для программы это некритично, это критично для удобочитаемости текста нашего прайса. Второй символ — точка с запятой — также не является критичным, здесь может стоять любой символ. Главное, чтобы этот символ не повторялся в строке, иначе это вызовет неправильную обработку прайса и, следовательно, неправильный вывод данных в тело левого фрейма.

После первого разделителя идет порядковый номер отдела — последовательно расположенные целые числа. Причем последовательность — необязательное условие при описании отделов ИМ. Вполне возможна ситуация, когда вам понадобится исключить один из тысячи отделов вашего ИМ — после этого совсем необязательно будет менять номера всех оставшихся отделов, дабы сохранить прежний порядок.

После второго разделителя, как вы уже догадались :-), идет название отдела. В принципе, количество отделов и продуктов в ИМ не ограничено — все зависит от вашей фантазии.

При описании структуры ИМ, как видите, я не использую тэгов форматирования, хотя они, несомненно, обеспечили бы нашему творению не только функциональность, но и красивый внешний вид. В нашем общем деле важен принцип, алгоритм написания, а не красивые менюшки и кнопочки, которые вы, без сомнения, сможете сделать в любом фотошопе :-). А у меня четкая задача — вместить максимум информации в минимальное количество символов. Поэтому если вы не знаете, как отцентрировать абзац или применить к нему шрифт с гарнитурой Times, — смело ныряйте с головой в популярное online-руководство html.manual.ru и «учитесь, учитесь и еще раз учитесь :-)».

Исходный код левого фрейма (без тэгов форматирования :-)) приведен далее:

На первый взгляд, все не так уж и страшно. Многое из этого мы уже прошли и не пугаемся, видя страшный знак доллара перед маленькой невзрачной буковкой :-). Но здесь появляются новые функции, которые мы сейчас и разберем.

Итак, первая и последняя строки — тэги соответственно начала и окончания участка РНР-кода. Во второй строке происходит открытие для чтения файла price.csv из директории f:/www/shop.

Далее в блоке if проверяется корректность открытия файла - при удачном открытии начинается, собственно, самое интересное. И начинается оно с нового для нас блока while.

Разработчики РНР обозвали операторы if…endif, while…endwhile и некоторые другие управляющими конструкциями. И это правильно :-). Действительно, if направляет интерпретатор туда, куда нам нужно, а while может повторить любой участок кода нужное нам количество раз. Итак, while — это оператор повторения. Синтаксис его следующий:

или

Здесь expr — выражение, истинность которого проверяется оператором while, а statement — оператор или блок операторов, который повторяется, пока условие expr истинно. Кстати, если оператор, который необходимо повторить, всего один, то фигурные скобки можно опустить (в смысле, не писать :-)). Это относится ко всем блокам операторов в РНР.

В качестве условия expr в нашем случае используется оператор присваивания, в котором новой переменной $data присваивается результат выполнения функции fgetcsv().

Функция fgetcsv() возвращает одномерный массив данных, взятый из текущей строки файла $fp, причем возвращаемое значение имеет длину 1 Кб. Каждый элемент массива в файле price.csv разделен символом точки с запятой (;), что мы и указываем в качестве третьего параметра функции. При каждом новом повторении функция fgetcsv() обрабатывает следующую строку файла — и так до конца файла.

Исходя из этого, переменная $data должна быть массивом. Но почему же это нигде не указано? Да потому что мы это подразумеваем —присваиваем переменной значение, не заботясь о ее типе, так как тип будет выбран в процессе работы и всегда может быть изменен.

Итак, обобщим. Интерпретатор должен выполнять инструкции, содержащиеся в блоке while, пока массив $data содержит значения, возвращенные функцией fgetcsv().

В блоке while при помощи оператора if мы проверяем, имеет ли первый элемент массива $data[0] значение в виде буквы «о», и если имеет, выводим третий элемент массива $data[2] (название отдела) в тело фрейма в ссылке, которая при нажатии передаст управление на средний фрейм.

Массивы в РНР не нуждаются в предварительном объявлении, их элементы, как вы уже заметили, доступны по имени массива при указании индекса в квадратных скобках. Нумерация элементов массивов начинается с нуля. Кроме того, РНР поддерживает очень интересную особенность добавления данных в массив, которая заключается в динамическом добавлении данных в конец массива без учета индексов элементов. Поясню на примере:

Кроме того, РНР унаследовал от Perl’а очень полезную конструкцию так называемого хэш-массива. В хэше данные хранятся не в виде последовательности значений, а в виде последовательности пар значений, что позволяет организовать некоторое подобие простейшей базы данных в своем проекте. Например:

Хэш-массив объявляется при помощи функции array(), в которой пары ключ-значение разделяются значком =>. Данные из хэша доступны по имени массива при указании названия ключа в фигурных скобках. Функция array(), кстати, позволяет жестко объявить и обыкновенный массив. При этом параметры функции перечисляются через запятую. Например:

Лирическое отступление закончено, давайте вернемся к нашему ИМ :-).

В блоке if внутри блока while интерпретатор проверяет, является ли текущая строка описанием отдела (первая буква «о»), и если является, генерирует ссылки на каждый отдел магазина.

Ссылки — это самый сложный момент левого фрейма, так как в них мы сталкиваемся с целым рядом новых понятий. Но давайте обо всем по порядку.

Итак, при нажатии на ссылку пользователь по логике вещей должен перейти в тот или иной отдел ИМ. Так оно и происходит, причем содержимое отдела (список продукции) будет выводиться в центральном фрейме. Чтобы при нажатии на ссылку управление передавалось именно центральному фрейму (а не новому окну), мы можем воспользоваться атрибутом target, в качестве значения которого используется имя центрального фрейма, определенное в файле сборки фреймов index.phtml. В качестве значения атрибута href в ссылке служит очень сложная (на первый взгляд) конструкция, которую мы разберем буквально по косточкам :-).

В атрибуте href тэга ссылки указывается путь, по которому должен перейти браузер при активизации ее пользователем. В нашем случае можно выделить файл central.phtml, который при нажатии на ссылку загружается в центральный фрейм интернет-магазина. При этом файлу central.phtml передаются определенные параметры, отделенные от имени файла знаком вопроса. Последний служит затем, чтобы сообщать серверу, что все следующие за ним данные являются динамическими, и их следует обработать определенным в конфигурации способом, а затем вернуть в браузер результат их обработки. Чаще всего эти данные представляют собой пару переменная-значение, разделенные знаком присваивания. Так же и здесь: скрипт передает файлу central.phtml переменную otdel, имеющую значение, соответствующее номеру отдела в нашем ИМ. Разные ссылки будут передавать разные номера, так как в ИМ имеется несколько отделов. Значение номера отдела берется из массива $data[1]. В качестве названия отдела, как мы уже договорились, используется элемент массива $data[2], и все это делается в цикле while, благодаря чему в левом фрейме мы увидим несколько ссылок на разные отделы.

Вывод ссылок я намеренно разбил операторами echo на две части - для того, чтобы показать вам, что так тоже можно делать :-). Это общее свойство для всех HTML-тэгов (в данном случае имеются в виду ссылки), состоящее в том, что браузер одинаково обрабатывает тэги, написанные в несколько строк, и тэги, написанные в одну строку. Часто, для придания тексту лучшей читаемости, приходится разбивать тэги на несколько операторов, поэтому можете не бояться :-).

Обратите внимание, что элементы массива подставляются в строку через точки, используемые в качестве оператора конкатенации (соединения) строк. В качестве примера можно написать так:

Это свойство, общее для всех строк в РНР; мы еще не раз будем использовать его при написании наших скриптов.

Все ссылки отделены друг от друга тэгом физического форматирования <br>, обозначающего перевод строки. Тот же результат в Unix-системах дает использование управляющей последовательности \n. Но в нашей Windows-системе эта последовательность используется для придания исходному тексту левого фрейма более удобочитаемого вида.

Итак, пришло время собирать камни :-). Сохраняем результаты нашей работы, запускаем браузер, в адресную строку вводим http://127.0.0.1/shop и видим примерно следующее (Рис. 3).

Теперь при наведении курсора на любую из ссылок в статусной строке браузера должно отобразиться что-то типа http://127.0.0.1/shop/central.phtml?otdel=3. При просмотре исходного текста левого фрейма вы должны увидеть следующее (Рис. 4).

Рис. 3   Рис. 4

Левым мышем щелкаем на любой ссылке - и… ничего! Не пугайтесь, так и должно быть. «Что-то» появится после следующей статьи, когда центральный фрейм научится обрабатывать поступающие в него данные и выводить список продукции выбранного отдела.

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov