AGAVA partners programs http://agava.ru/partners/            

Название функции

             
Веб-курсы


Что это?

Оглавление

Основы
Основы основ

Практика
Гостевая книга
Простой сайт
Структура сайта (MVC)
Ядро (Light)
Ядро
Гостевая на SQL
Статические страницы
Модуль новостей
Система регистрации

Теория
Дебаггинг
Регулярные выражения
Введение в ООП
Паттерны проектирования

Репозитарий
BB-code
Почтовый класс
Пагинатор
Всякие полезности

Download
Полезные утилиты

Разное
Видеокурсы
Последние изменения
Вопросы и замечания сюда



Реклама

Диеты для похудения
Фреймворк Kohana. Обучение. Мануал на русском.







Структуризация

Вот теперь у нас хоть и появилось некоторое удобство в обслуживании, однако не совсем. Куча файлов в корне сайта, это тоже самое, что все файлы Вашего компьютера, если их выложить на рабочий стол. Не хватит места, не говоря уже о том, что что то можно найти. Обычно файлы группируются в каталоги. Ну и на сайте тоже должен быть порядок.

Начнем с того, что файлы 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/'$fileserialize($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 -->


и можно все это хозяйство запустить.

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

Как сделать более красиво - в следующем разделе.
Рейтинг@Mail.ru Рейтинг@Mail.ru Яндекс цитирования
irbis-team © 2009