Структуризация
Вот теперь у нас хоть и появилось некоторое удобство в обслуживании, однако не совсем. Куча файлов в корне сайта, это тоже самое, что все файлы Вашего компьютера, если их выложить на рабочий стол. Не хватит места, не говоря уже о том, что что то можно найти. Обычно файлы группируются в каталоги. Ну и на сайте тоже должен быть порядок.
Начнем с того, что файлы HTML (их обычно называют шаблонами) нужно расположить в своей директории (templates или tpl для краткости). Соответственно нужно переписать пути в конструкциях подключения (include), добавив туда этот каталог.
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
<?php
$title = 'Главная страница';
$keywords = 'Фирма, дрова, главснабсбытдровнет';
$description = 'Ай какая хорошая у нас фирма';
include './tpl/header.html';
include './tpl/menu.html';
?>
<!-- index.php begin -->
<td><h2>САМАЯ ГЛАВНАЯ СТРАНИЦА</h2>
Ай какая хорошая у нас фирма...<br />
Ох...<br />
Ах...<br />
Ляля просто.</td>
<!-- index.php end -->
<?php
include './tpl/bottom.html';
|
Точно так же нужно поступить и с остальными файлами.
Вот теперь в корне только то, что непосредственно запрашивается пользователем.
Теперь дальше. Нам нужно как то расскрасить сайт. Добавить стилей, скриптиков для форсу, картинок. Все это должно храниться в своих папках. Так же обычно в отдельных папках хранятся серверные логи, общие библиотеки функций и классов да и мало ли чего еще приспичит. Главное чтобы было красиво.
Вот давайте к примеру поместим на него нашу гостевую книгу с прошлого урока. Чего ей пропадать зря.
Как вы помните, мы в ней уже обозначили, как можно поделить и расставить по полочкам части. Давайте вспомним.
Сначала сделаем в корне файл
config.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
<?php
/** * We establish the charset and level of errors * Устанавливаем кодировку и уровень ошибок */ header("Content-Type: text/html; charset=utf-8"); error_reporting(E_ALL); /** * Quantity of posts on page * Количество постов на странице */ define('NUM_POSTS', 5);
|
Вообще нужно отметить, что ни один порядочный сайт не обходится без конфигурационного файла. В нем находятся все настройки и не нужно лазить по скриптам, чтобы что то изменить. Пусть будет и у нас.
Дальше по порядку - набор функций. Поместим в папку с библиотеками:
libs/function.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 |
<?php
/** * Function of reading of a directory * Функция чтения директории * @param string * @return array */ function dirScan($dir) { static $files; if(empty($files)) { $files = scandir($dir); $files = array_diff($files, array('.', '..')); } $files = count($files)?$files:array('1'); return $files; } /** * Function of generation of the menu of paginal navigation * Функция генерации меню постраничной навигации * @param string * @return string */ function pageMenu($page) { $files = dirScan('data'); natsort($files);
$menu = ' | '; foreach($files as $num) if($page == $num) $menu .= '<strong>'. $num .'</strong> | '; else $menu .= '<a href="?page='. $num .'">'. $num .'</a> | ';
return $menu; } /** * Replacement function bb-tags and smilies * Функция замены bb-тегов и смайликов * @param string * @return string */ function bbTags($text) { $bb = array( '[B]', '[/B]', '[I]', '[/I]', '[S]', '[/S]', '[U]', '[/U]', '[:)]', '[:(]', '[;)]', '[:D]' );
$tag = array( '<b>', '</b>', '<i>', '</i>', '<s>', '</s>', '<u>', '</u>',
'<img src="images/1.gif" />',
'<img src="images/2.gif" />',
'<img src="images/3.gif" />',
'<img src="images/4.gif" />'
); return str_ireplace($bb, $tag, $text); }
|
Обратите внимание, что вместо папки
smiles теперь у нас
images Нужно сделать такую папку для картинок. В неё и поместить смайлики и прочие произведения искусства.
Следом идет инициализация переменных. Поместим в файл
variables.php в корне сайта, так как он может потребоваться в разных скриптах и лучше не прятать его далеко.
1
2
3
4
5
6
7
8 |
<?php
$page = !empty($_GET['page']) ? $_GET['page'] : 1; $text1 = !empty($_POST['text1']) ? $_POST['text1'] : null; $text2 = !empty($_POST['text2']) ? $_POST['text2'] : null; $info = array(); $posts = array();
|
Дальше по плану сам скрипт. Но мы его оставим на закуску, потому что он главный. А пока немного приведем в порядок отображение.
В гостевой книге у нас был свои шапка и подвал. Тут нам это не надь. Тут у нас другие красоты.
Но скрипт, который для bb-тегов, нам нужен. Сделаем для него свою папку (
js) и поместим туда:
bb_tags.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | function tag(text1, text2) {
if ((document.selection))
{
document.post.text2.focus(); document.post.document.selection.createRange().text = text1+document.post.document.selection.createRange().text + text2; } else if(document.forms['post'].elements['text2'].selectionStart != undefined) { var element = document.forms['post'].elements['text2']; var str = element.value; var start = element.selectionStart; var length = element.selectionEnd - element.selectionStart; element.value = str.substr(0, start) + text1 + str.substr(start, length)
+ text2 + str.substr(start + length); } else document.post.text2.value += text1 + text2; }
|
Ну и теперь нужно подключить его к шапке. За одно вынесем в отдельный файл (
style.css) стили. Для них тоже нужно сделать отдельный каталог
(css)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $title; ?></title> <meta name="keywords" content="<?php echo $title; ?>" /> <meta name="description" content="<?php echo $title; ?>" /> <script type="text/javascript" language="javascript" src="/js/bb_code.js"></script>
<link href="/css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td colspan="3">
<h1> OOO ГЛАВСНАБСБЫТДРОВНЕТ </h1> </td>
</tr>
<!-- header.html end -->
|
Ну вот а теперь и сам скрипт. Сначала подключаем те файлы, которые вынесли из прошлой гостевой книги. Потом сам скрипт. Потом подключаем шапку и меню, затем идет часть отображения, которая попадет в контент сайта, и завершает победный марш нижний блок с рекламой.
guest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 |
<?php
include './config.php'; include './variables.php'; include './libs/functions.php';
if(!empty($_POST['ok'])) { if(!$text1) $info[] = 'Текстовое поле не заполнено.'; if(!$text2) $info[] = 'Текстовая область не заполнена.'; if(count($info) == 0) { $file = max(dirScan('data')); if(file_exists('data/'. $file)) { $posts = unserialize(file_get_contents('data/'. $file)); $keys = array_keys($posts); $id = max($keys) + 1; $num = count($posts); } else $num = $id = 1; if($num >= NUM_POSTS) { ++$file; unset($posts); } $posts[$id]['date'] = date('d-m-Y'); $posts[$id]['name'] = $text1; $posts[$id]['mess'] = $text2; file_put_contents('data/'. $file, serialize($posts));
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] .'?page='. $file); exit(); } } else $info[] = 'Напишите что-нибудь'; $title = 'Гостевая книга'; $keywords = 'отзывы охи ахи похвальбы грубая лесть'; $description = 'самые лучшие отзывы о нашей фирме';
include './tpl/header.html'; include './tpl/menu.html'; ?> <!-- guest.php begin --> <td>
<form action="" name="post" id="post" method="post"> Логин:<br /> <input name="text1" type="text" value="<?php echo htmlspecialchars($text1) ?>"/><br /> <img style="cursor:pointer" src="/images/bold.gif" alt="Жирный" onclick="tag('[b]','[/b]')"> <img style="cursor:pointer" src="/images/italics.gif" alt="Курсив" onclick="tag('[i]','[/i')"> <img style="cursor:pointer" src="/images/underline.gif" alt="Подчеркнутый" onclick="tag('[u]','[/u]')"> <img style="cursor:pointer" src="/images/strikethrough.gif" alt="Зачеркнутый" onclick="tag('[s]','[/s]')"> <img style="cursor:pointer" src="/images/1.gif" onclick="tag('[:)]','')"> <img style="cursor:pointer" src="/images/2.gif" onclick="tag('[:(]','')"> <img style="cursor:pointer" src="/images/3.gif" onclick="tag('[;)]','')"> <img style="cursor:pointer" src="/images/4.gif" onclick="tag('[:D]','')"> <br /> Сообщение:<br /> <textarea name="text2" id="text2" cols="40" rows="10"><?php echo htmlspecialchars($text2);?></textarea><br /> <input name="ok" type="submit" /> </form> <div style="padding-left:50px"> <?php echo pageMenu($page); ?> </div> <?php echo implode('<br>', $info) .'<br>';
if(file_exists('data/'. $page)) { $posts = unserialize(file_get_contents('data/'. $page)); foreach($posts as $id => $post) { $date = $post['date']; $name = htmlspecialchars($post['name']); $mess = nl2br(bbTags(htmlspecialchars($post['mess']))); ?> <div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; padding:5px"> <?php echo $date; ?> / <strong><?php echo $name; ?></strong> <hr width="30%" align="left" /> <?php echo $mess; ?> </div> <?php } } ?> <div style="padding-left:50px"> <?php echo pageMenu($page); ?> </div> </td> <!-- guest.php end --> <?php include './tpl/bottom.html';
|
Осталось добавить в меню ссылку (правда же удобно в одном месте?):
1
2
3
4
5
6
7
8
9
|
<!-- menu.html begin -->
<tr>
<td width="200px" height="500px"> <ul>
<li><a href="/index.php">Главная</a></li>
<li><a href="/product.php">Продукция</a></li>
<li><a href="/guest.php">Гостевая книга </a></li>
<li><a href="/contact.php">Контакты</a></li> </ul> </td>
<!-- menu.html end --> |
и можно
все это хозяйство запустить.
И хотя тут есть какое то подобие структуры и даже зачатки разделения, такой сайт полноценным назвать язык не поворачивается. Уж слишком он коряв и громоздок.
Как сделать более красиво - в следующем разделе.