1. Надо разбить html текст на: верх страницы и низ страницы, то есть создать шаблоны. В этом случае, будет меняться только центр странички, что немаловажно.
Следующий файл top.htm - верх странички <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>%title%</TITLE></HEAD><body>
Это файл zentr.htm середина странички, которая будет меняться, то есть zentr.htm.
Этот файл end.htm - низ странички </body></html>
Сам сценарий будет такой
// если нет файла top.htm, создаем его $top_htm = "top.htm"; if (! @file_exists ($top_htm)){ @touch ($top_htm); $fp = fopen ($top_htm, "w"); fwrite ($fp, ' %title% '); fclose ($fp); }
// если нет файла zentr.htm, создаем его $zentr_htm = "zentr.htm"; if (! @file_exists ($zentr_htm)){ @touch ($zentr_htm); $fp = fopen ($zentr_htm, "w"); fwrite ($fp, 'середина странички, которая будет меняться, то есть zentr.htm. '); fclose ($fp); }
// если нет файла end.htm, создаем его $end_htm = "end.htm"; if (! @file_exists ($end_htm)){ @touch ($end_htm); $fp = fopen ($end_htm, "w"); fwrite ($fp, ' '); fclose ($fp); }
// загружаем верхний шаблон в переменную $top $top = implode ( "", file ( "top.htm" ) ); // говорим, что Title равно Php-web-дизайн. $title = "Php-web-дизайн"; // меняем в верхнем шаблоне слово %title% на Php-web-дизайн. $top= str_replace ( "%title%", $title, $top ); // печатаем верхний шаблон print $top; // здесь вставляем центр странички include ("zentr.htm"); // вставляем низ странички include ("end.htm"); ?> |
При обращении к этому сценарию сервер выдаст броузеру <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE>Php-web-дизайн</TITLE></HEAD><body> середина странички, которая будет меняться, то есть zentr.htm. </body></html>
Мы добились того, что в верхней части меняем title, выводим саму меняющуюся информацию (zentr.htm) в центр html кода и добавляем низ. Итог такой, мы будем менять только центральную часть, не заботясь о шаблонах. В этом простом примере мы научились разбивать текст странички, менять его и вставлять файлы. Теперь, один раз записав файл верх, мы спокойно изменим в нем title или что-нибудь еще, вставим центральную часть и закончим нижней.
Усложним задачу: надо получить доступ к каждой части вот такой страницы и менять их. Мой логотип | Моя реклама | Меню:- моя ссылка 1
- моя ссылка 2
- моя ссылка 3
| Это мой текст, который я смогу постоянно менять. Посмотреть, как лучше организовать таблицы, можно здесь... | Это мой копирайт. |
Чтобы получить такую страницу нужен такой html код: <HTML>
<HEAD>
<TITLE>%TITLE%</TITLE>
</HEAD>
<!-- top.htm -->
<table border="1" width="100%">
<tr>
<td colspan="2">
%LOGO%
<p> </p>
</td>
<td rowspan="3" width="130" valign="top">
%REKLAMA%
</td>
</tr>
<!-- end top.htm -->
<!-- menu.htm -->
<tr>
<td rowspan="2" width="150" valign="top">
%MENU%
</td>
<!-- end menu.htm -->
<!-- body.htm -->
<td align="justify" valign="top">
%TEXT%
</td>
<!-- end body.htm -->
<!-- end.htm -->
</tr>
<tr>
<td align="center">
%COPY%
</td>
</tr>
</table>
</BODY>
</HTML>
Жирным обозначены части, которые будем менять. Чтобы правильно таблицу разделить на части, её сначала надо нарисовать, а потом делить как хотите, хоть на сто частей. В дальнейшем мы просто напечатаем её по частям. Вы видите, что мы разрезали страницу на четыре файла: top.htm, menu.htm, body.htm, end.htm. Сценарий будет такой: // если нет файла top.htm, создаем его $top_htm = "top.htm"; if (! @file_exists ($top_htm)){ @touch ($top_htm); $fp = fopen ($top_htm, "w"); fwrite ($fp, '
%TITLE%
%LOGO%
|
%REKLAMA%
|
'); fclose ($fp); }
// если нет файла menu.htm, создаем его $menu_htm = "menu.htm"; if (! @file_exists ($menu_htm)){ @touch ($menu_htm); $fp = fopen ($menu_htm, "w"); fwrite ($fp, '
%MENU%
|
'); fclose ($fp); }
// если нет файла body.htm, создаем его $body_htm = "body.htm"; if (! @file_exists ($body_htm)){ @touch ($body_htm); $fp = fopen ($body_htm, "w"); fwrite ($fp, '
%TEXT%
|
'); fclose ($fp); }
// если нет файла end.htm, создаем его $end_htm = "end.htm"; if (! @file_exists ($end_htm)){ $fp = fopen ($end_htm, "w"); fwrite ($fp, '
%COPY%
|
'); fclose ($fp); }
// загружаем "top.htm" в переменную $top $top = implode ( "", file ( "top.htm" ) );
// говорим, что переменная $TITLE равна "Моя страница" $TITLE = "Моя страница";
// говорим, что переменная $LOGO равна "Мой логотип" $LOGO = "Мой логотип";
// говорим, что переменная $REKLAMA равна "Моя реклама" $REKLAMA = "Моя реклама";
//изменяем переменную $top, на новые значения $TITLE, $LOGO, $REKLAMA $top = str_replace ( "%TITLE%", $TITLE, $top ); $top = str_replace ( "%LOGO%", $LOGO, $top ); $top = str_replace ( "%REKLAMA%", $REKLAMA, $top );
// загружаем "menu.htm" в переменную $_menu $_menu = implode ( "", file ( "menu.htm" ) ); // формируем своё меню $MENU = " Меню:
- моя ссылка 1
- моя ссылка 2
- моя ссылка 3
"; // изменяем переменную $_menu, на новые значения $MENU $_menu = str_replace ( "%MENU%", $MENU, $_menu );
// загружаем "body.htm" в переменную $body $body = implode ( "", file ( "body.htm" ) ); // формируем свой текст $TEXT = "
Это мой текст, который я смогу постоянно менять. Посмотреть, как лучше организовать таблицы, можно здесь...
"; //изменяем переменную $body, на новые значения $TEXT $body = str_replace ( "%TEXT%", $TEXT, $body );
// загружаем "end.htm" в переменную $end $end = implode ( "", file ( "end.htm" ) ); // формируем свой копирайт $COPY = "Это мой копирайт."; //изменяем переменную $end, на новые значения $COPY $end = str_replace ( "%COPY%", $COPY, $end );
// печатаем все части html страницы print $top . $_menu . $body . $end; ?> |
zip архив здесь... У нас на сайте переписывается в верху: title, статистика (левый нижний угол), затем мы вставляем сам текст в центр, а в нижней части переписывается время генерации странички сервером. В итоге, странички получаются всегда разные, хотя мы используем всего два html файла (верх и низ), центр странички разный. То же самое относится и к центральной части, в которой тоже можно создать шаблон, а сервер сам будет менять в нем данные, что придаст сайту больше интерактивности.
2. Как организовать php-ссылки. Очень просто, например, у нас весь скрипт записан в одном файле all.php. Ссылки в html коде выглядят так"all.php?act=omsk&fon=velikie". Все что стоит за знаком вопроса это и есть ссылка. Если нажать на эту ссылку, скрипту all.php автоматически методом Get будут переданы две переменные: "$act=omsk" и "$fon=velikie". Программа начнет движение по срипту сверху вниз и когда достигнет того места, где мы будем спрашивать о этих двух переменных срипт исполнится.
//если переменная $act равна "omsk" и $fon не пусто, то есть существует //выводим одну страничку в броузер //ссылка выглядит так: "all.php?act=omsk&fon=velikie" if ($act == "omsk" and $fon != "") { include ("one.htm"); } //если переменная $act равна "omsk" и $fon пусто, то есть не существует //выводим другую страничку в броузер //ссылка выглядит так: "all.php?act=omsk" if ($act == "omsk" and $fon == "") { include ("too.htm"); } ?> |
То есть, все очень просто.
3. Как работают формы? Из формы переменные передаются скрипту методом Get или Post, если мы в форме что-то пропишем и активизируем кнопку submit. Если будет использоваться метод Get, то все переменные, которые передаются скрипту будут прописаны в командной строке: all.php?1_переменная=значение&2_переменная=значение. Если будет использован метод Post, то эти же переменные будут переданы скрипту скрыто вне командной строки. То есть, метод Get нельзя использовать, если переменная большого объема, то есть в ней много букв. Например, когда вы направляете нам письмо с сайта, скрипту будут преданы три переменные: имя, email пользователя и сам текст письма. Две первые переменные маленькие, а вот последняя большая, поэтому программа будет виснуть, если в форме отсылки применить метод Get. Формы Php передают скрипту переменные, только после активации, в этом отличие от Javascript, который исполняется при загрузке, самого текста html, в броузер.
4. Как организовать Администрирование? Создаем файл, например, administr.php. Он должен быть закрыт паролем.
// если нет файла admin.log, то создаем его $admin_log = "admin.log"; if (! @file_exists ($admin_log)){ @touch ($admin_log); }
// послали ли пароль из формы if ( !empty ($_POST['p'])) {$p = $_POST['p'];} else $p = '';
// чему равен пароль $password = "pass";
// функция форма пароля function form(){ echo "
Админ
"; }
// если пароль правильный скрипт исполняется if ($p == $password){ print "зашли в админ - файл \n"; // смотрим файл с нарушителями "admin.log" $fp = fopen ( "admin.log", "a+" ); $content = fread ( $fp, filesize ( "admin.log" ) ); print str_replace ( "\n", " \n", $content); // здесь текст нашего скрипта echo ""; exit ; } // если пароль неправильный скрипт не исполняется, записываем нарушителя в базу if ($p != $password){ // определяем ip нарушителя, записываем в лог файл и выводим форму для пароля if ( empty ($log_ip) ){ if ( getenv ("HTTP_X_FORWARDED_FOR")) { $log_ip = getenv ("HTTP_X_FORWARDED_FOR"); } else { $log_ip = getenv ("REMOTE_ADDR"); } }
$log_host = @gethostbyaddr ($log_ip); $log_date = @date ("d\.m\.Y, H:i:s"); $fp = fopen ( $admin_log, "a+" ); if ($p == "") { $p = "не вводил"; } fwrite ( $fp, "$log_ip<>$log_host<>$log_date<>$p<>\n"); fclose ($fp); form(); } // если пароль совпал, то выводим что записано в лог файле else { $fp = fopen ($admin_log, "r"); $content = fread ($fp, filesize () ); fclose ($fp); print ""; print $content; print " "; }
echo " |
|