MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« : 18-10-2004 09:17 » |
|
Создание динамического веб-сайта, с использованием ПХП(часть первая).В этой статье я опишу способ создания простейшего сайта с использованием скриптового языка программирования ПХП. В чём же преимущество этого способа перед обыкновенным созданием статических ХТМЛ страниц ? А вот в чём : ХТМЛВ ХТМЛ страницах есть много элементов, которые одинаковы на всех страницах. Например "шапка"(хедер) и низ(футер), а также пункты меню и т.д. Поэтому при увеличении количества статических ХТМЛ страниц, соответственно в каждой из них нужно копировать повторяющиеся элементы, что затрудняет и увеличивает расход времени на внесение изменений в какой-нибудь из повторяющихся элементов, потому что эти изменения надо вносить во все имеющиеся статические страницы. ПХПВ ПХП для этого можно просто отделить все повторяющиеся элементы дизайна в отдельные файлы, что существенно облегчает редактирование и внесение изменений, ведь придётся отредактировать нужный элемент дизайна всего один раз! Для начала, сделаем простенький ХТМЛ код для того, чтобы продемонстрировать то что описано выше. index.html<html> <head> <meta http-equiv="Content type" content="text/html; charset=windows-1251"> <title>::: PHP Site :::</title> </head> <body topmargin="0" leftmargin="0" bottommargin="0" rightmargin="0" bgcolor="#EFEFEF"> <table width="100%" border="0" cellpadding="2" cellspacing="2"> <tr><td width="100%" align="center" colspan="2">LOGO + BANNER</td></tr> <tr> <td width="40%" align="center" valign="top">MENU</td> <td width="60%" align="center" valign="top">DATA</td> </tr> <tr><td width="100%" align="center" valign="middle" colspan="2">FOOTER</td></tr> </table> </body> </html>
А теперь отделим редко изменяющиеся части дизайна в отдельные ПХП файлы : так как часть шапка в нашем случае не изменяется, то и вынесем её в отдельный файл также. shapka.php<html> <head> <meta http-equiv="Content type" content="text/html; charset=windows-1251"> <title>::: PHP Site :::</title> </head> <body topmargin="0" leftmargin="0" bottommargin="0" rightmargin="0" bgcolor="#EFEFEF">
header.php<?php print "LOGO + BANNER"; ?>
menu.phpdata.phpfooter.phpДалее, соответственно переименуем наш index.html в index.php и перепишем так : <?php require_once("shapka.php"); ?> <table width="100%" border="0" cellpadding="2" cellspacing="2"> <tr><td width="100%" align="center" colspan="2"><?php require_once("header.php"); ?></td></tr> <tr> <td width="40%" align="center" valign="top"><?php require_once("menu.php"); ?></td> <td width="60%" align="center" valign="top"><?php require_once("data.php"); ?></td> </tr> <tr><td width="100%" align="center" valign="middle" colspan="2"><?php require_once("footer.php"); ?></td></tr> </table> </body> </html>
В итоге получаем то что и требовалось. Если надо изменить какой то пункт меню, то изменяем его ОДИН раз в файле menu.php, соответственно то же самое и с другими файлами. Так в чём же всётаки динамичность ? А вот в чём : теперь, если нам нужно выводить в части DATA различную информацию, то нам не надо заново создавать новый файл с полностью тем же дизайном что и был. Теперь нас волнует только изменяющаяся часть. Для этого сделаем простенький "движок", который и даст нам "динамичность". Отредактируем файл menu.php, и добавим туда несколько пунктов меню : menu.php<table width="100%" border="0" cellpadding="2" cellspacing="2"> <tr> <td width="100%" bgcolor="#FFFFFF"> <a href="index.php?action=about">О Нас</a> </td> </tr> <tr> <td width="100%" bgcolor="#FFFFFF"> <a href="index.php?action=contacts">Контакты</a> </td> </tr> </table>
Поясню запись : index.php?action=contacts . Сдесь, action и будет нашей переменной, по значению которой мы и будем определять какие данные выводить в раздел DATAТеперь соответственно перепишем файл data.php так, чтобы по нажатию на нужный пункт меню выводились нужные данные : data.php<?php switch($_GET['action']) { //получаем значение переменной action case "about" : require_once("about.php"); // выводим данные О Нас break; case "contacts" : require_once("contacts.php"); // выводим данные Контакты break; default : // если значение переменной action не указано, либо её не существует, либо нет искомого значения print "Данных нет"; break; } ?>
Теперь осталось создать файлы about.php и contacts.php с соответствующими данными. about.php<?php print "Сдесь содержатся данные О Нас!"; ?>
contacts.php<?php print "Сдесь содержатся данные Контакты!"; ?>
Ну вот, мы и создали простейший динамический сайт на ПХП. В следующей статье, я покажу как это всё связать с базой данных MySQL для ещё большей автоматизации вывода данных. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Собственно САБЖ. Посмотрите и скажите достойно ли это называться вводной статьёй ? Если да, то поместим в раздел Статьи.
|
|
« Последнее редактирование: 19-12-2007 19:24 от Алексей1153++ »
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #1 : 18-10-2004 09:45 » |
|
ИМХО вполне достойно. Надо продвигать эту тему, а то мы ее совсем забросили....
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Серж
Гость
|
|
« Ответ #2 : 18-10-2004 09:55 » |
|
MOPO3, а ты не хочешь предварить курс предисловием или введением, или кратким обзором, какие средства существуют для разработки сайтов, и почему выбран именно PHP, а не ASP, ASP.NET, продукты Macromedia и т.п. А потом уже собственно про PHP. Более уместным названием для данной главы было бы, по моему мнению, "Препроцессорные возможности PHP", под динамическими свойствами, по-моему, понимается нечто другое, хотя может быть, я и ошибаюсь. А для второй, после вводной, очень достойная статья.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #3 : 18-10-2004 11:13 » |
|
Серж, Нет, не хочу Не стоит задача так То что ты предлагаеш - это отдельная обобщённая статья. Тем более что мой опыт с ASP.NET ограничивается чуть ли не "Здравствуй Мир!".
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #4 : 18-10-2004 11:14 » |
|
Серж, вот не надо о достоинствах и сравнениях - на защите дипломов слышал - очень вымученно выглядит.
MOPO3, всё это хорошо, но может начать лучше с самого языка... что собой представляет интерпретатор, как оно работает (то, что на лету преобразует код php в чмстый html, который уже выдаётся клиенту), потом основные конструкции языка и общая структура php-скрипта (что он с заголовка начинается, как код php от кода html отличается и т.п.) и только потом уже о методах проектирования в вебе вообще и с примерами.
Я, например, о php очень смутное представление имею именно как о языке, о его синтаксисе и всяких организационных моментах. Короче говоря, хотелось бы видеть "Hello world!", под которым понимается не только print("Hello world!");, но и как создать, куда загрузить, как запустить на исполнение и т.п.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #5 : 18-10-2004 11:27 » |
|
dimka, загляни в раздел "Статьи", там есть пара моих статей на тему ПХП, а в частности на тему : основные конструкции языка.
Да и есть ли смысл писать о том что такое интерпретатор и так далее ? Ведь ничего нового я не смогу написать, а всё это уже валом лежит в интернете.
ЗЫ. Ну ежели найдутся ещё желающие, тогда я обещаю над этим подумать.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #6 : 18-10-2004 11:30 » |
|
Я согласен с МОРОЗом - всего валом, а тут концептуальная статья....
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Серж
Гость
|
|
« Ответ #7 : 18-10-2004 11:48 » |
|
MOPO3, я не специалист в сайтоводстве, а всегда хочется попробовать, хотя и некогда, поэтому и интересно, почему народ пишет на PHP, а не на Pitone c Zopoм и наоборот. Хотя понимаю, что для развитого инструментария, это скорее вопрос вкуса или привычки.
|
|
|
Записан
|
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #8 : 18-10-2004 11:57 » |
|
Хотя понимаю, что для развитого инструментария, это скорее вопрос вкуса или привычки. Ты абсолютно прав. ИМХО я думаю что ПХП выбирают чаще всего из за простоты языка и быстроте обучения ему. На сегодняшний день, ПХП обладает огромным набором функций для работы практически во всех сферах веб строительства. ЗЫ. Когда то я писал и на АСП и на Колд Фьюжене, но ПХП меня увлёк гораздо сильнее.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Lex
|
|
« Ответ #9 : 18-10-2004 14:18 » |
|
Вполне приемлимая первая глава какой-нить большой книги ДЛя большей наглядности я бы добавил пример из 3-4 страниц на голом хтмл и то же самое в динамическом варианте. А в конце задание добавить еще один пунк меню в оба варианта. Или поменять шапку.
|
|
|
Записан
|
Megabyte be with you!
|
|
|
Jarlyk
Помогающий
Offline
|
|
« Ответ #10 : 18-10-2004 17:40 » |
|
П-моему это самая что ни есть лучшая статья. Даже я, почти ничего не смыслящий в РНР, понял =)
|
|
|
Записан
|
Бедные маленькие мышки плакали и кололись, но все равно продолжали жрать кактус.
|
|
|
Jarlyk
Помогающий
Offline
|
|
« Ответ #11 : 18-10-2004 19:02 » |
|
только один вопрос - почему-то когда я пытаюсь писать содержание на русском, то потом вместо русских букв на сайте отображаются вопросительные знаки. В чем дело?
|
|
|
Записан
|
Бедные маленькие мышки плакали и кололись, но все равно продолжали жрать кактус.
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #12 : 18-10-2004 19:26 » |
|
MOPO3, маленькая поправочка: ХТМЛ В ХТМЛ страницах есть много элементов, которые одинаковы на всех страницах. Например "шапка"(хедер) и низ(футер), а также пункты меню и т.д. Поэтому при увеличении количества статических ХТМЛ страниц, соответственно в каждой из них нужно копировать повторяющиеся элементы, что затрудняет и увеличивает расход времени на внесение изменений в какой-нибудь из повторяющихся элементов, потому что эти изменения надо вносить во все имеющиеся статические страницы. Есть такая штука, если не ошибаюсь называется, SSI, - позволяет, поставив определенного вида комментарий в странице, при запросе браузер сканирует страницу и подменяет эти комментарии соотв. файлами. PHP, все таки, нечто больше, чем подстановка header/footer. Правильнее было сказать, что он позволяет динамически создать (или заполнять) страницу.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #13 : 18-10-2004 19:27 » |
|
Jarlyk, не забывай прописывать <head><meta http-equiv="Content type" content="text/html; charset=windows-1251"></head>
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #14 : 18-10-2004 19:32 » |
|
Lex, дополню RXL, ну статья расчитана в принципе на чайников, и не стоит ИМХО забивать её терминами типа SSI Приму к сведению твоё замечание и перепишу эту часть статьи.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Lex
|
|
« Ответ #15 : 18-10-2004 21:13 » |
|
Есть такая штука, если не ошибаюсь называется, SSI, - позволяет, поставив определенного вида комментарий в странице, при запросе браузер сканирует страницу и подменяет эти комментарии соотв. файлами. PHP, все таки, нечто больше, чем подстановка header/footer. Правильнее было сказать, что он позволяет динамически создать (или заполнять) страницу.
RXL, почти все что писал МОРОЗ можно и на SSI сделать и будет работать. На сколько я понял МОРОЗ, он пытался показать сам принцип построения сайта, а не конкретную реализацию на PHP.
|
|
|
Записан
|
Megabyte be with you!
|
|
|
Jarlyk
Помогающий
Offline
|
|
« Ответ #16 : 19-10-2004 03:23 » |
|
Блин, все ясно, просто Dreamweawer почему-то не хочет на русском сохранять текст. Придется опять в старый добрый блокнот переходить...
|
|
|
Записан
|
Бедные маленькие мышки плакали и кололись, но все равно продолжали жрать кактус.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #17 : 19-10-2004 04:31 » |
|
Lex, да, именно сам принцип построения сайта, а точнее один из возможных вариантов.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #18 : 19-10-2004 04:32 » |
|
Jarlyk, Dreamweawer прекрасно должен понимать русский. Копайся в настройках.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Jarlyk
Помогающий
Offline
|
|
« Ответ #19 : 19-10-2004 04:46 » |
|
Буду копаться... Он при сохранении почему-то русский в вопросы переводит.
|
|
|
Записан
|
Бедные маленькие мышки плакали и кололись, но все равно продолжали жрать кактус.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #20 : 19-10-2004 05:17 » |
|
Jarlyk, посмотри в настройках редактора, в какой кодировке он сохраняет документы. Такая фишка должна быть полюбому где-нибудь в опциях
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Void
Гость
|
|
« Ответ #21 : 17-12-2004 05:02 » |
|
Нормальная статья. Напиши еще как это внедряется в шаблоны. И засилье новоиспеченных веб дизайнеров потопит интернет новыми сайтами.
А еще неплохо было бы расписать как нормально обустроить footer и header на тему размещения кодов ротации банеров. Думаю это лучше размещать в отдельных файлах.
Прикрутить редактор содержимого, чтобы уже и править на страничке. Что с глобалными переменными типа $copyright="Co. Mega Vasia Pupkin" чтобы можно было вызывать на страницах и в статьях. Наверное тоже в отдельный файл? Типа config.php Это мы плавно подходим к написанию простой CMS.
|
|
|
Записан
|
|
|
|
Jarlyk
Помогающий
Offline
|
|
« Ответ #22 : 19-12-2004 21:34 » |
|
кстати, че-то не видно второй статьи...
|
|
|
Записан
|
Бедные маленькие мышки плакали и кололись, но все равно продолжали жрать кактус.
|
|
|
nikedeforest
|
|
« Ответ #23 : 20-12-2004 16:55 » |
|
Мороз,Просьба такая, нельзя, когда будеж писать про связь с базой данных, поподробнее пожайлуста и можно поглубже, не только начальный уровень. Просто скоро очень потребуется. Кстати когда ждать выхода.
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #24 : 12-05-2005 08:30 » |
|
Исходя из того, что статья эта всё же пользуется каким то спросом, помещю её в раздел статей на сайте клуба.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
DET
Гость
|
|
« Ответ #25 : 10-08-2005 15:03 » |
|
while ($RR=mysql_fetch_array($res)) { require_once("pages/razd.php"); } Почему не работает конструкция такого вида? Те, цикл не работает с функцией require_once?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #26 : 10-08-2005 16:06 » |
|
DET, прочти свой вопрос. Ты бы понял, о чем речь? - "не работает" - слишком растяжимое понятие.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
DET
Гость
|
|
« Ответ #27 : 10-08-2005 18:52 » |
|
Эта функция должна печатать значения из бд, а она печатает только первое значение, а дольше цикл не работает с этой функцией. Те в таблице например три значения номер 1 номер 2 номер 3 while ($RR=mysql_fetch_array($res)) { print("$RR"); } Выдаёт: номер 1номер 2номер 3 а while ($RR=mysql_fetch_array($res)) { require_once("pages/razd.php"); } где в razd.php выдаёт: приме 1 а всё остального нет. Как с этим справиться?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #28 : 10-08-2005 19:13 » |
|
Уже намного лучше.
Во-первых, include_once() не ф-ия - это оператор языка, хотя внешне напоминает. Делает следующее: вставляет указанный файл в текущее место при условии, что этот файл не был подключен ранее. Чтобы файл включался более одного раза нужно использовать include(). Вот, собственно, и вся загадка. Мой совет: читай документацию и учи английский (смысл оператора понятен и без документации).
Пример, который ты привел, с практической точки зрения, не имеет смысла. Если тебе нужено вынести кусок кода в другой файл, то создай ф-ию - тогда файл нужно будет подключить один раз и работать будет быстрее. Точно такой же вопрос обсуждался где-то с месяц назад.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #29 : 10-08-2005 19:24 » |
|
В дополнение ко всему тому что тебе уже разъяснил RXL, я тебе разъясню ещё чуточку, раз у тебя проблемы с мануалом. Привожу тебе свой дословный перевод : require_once() - нужно_ единожды( один раз!) Надеюсь теперь понятней : Как с этим справиться?
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
|