Урок 14. Движок сайта
Прислано AMD на Сентябрь 30 2011 04:48:27

Таблицы


gmenu


CREATE TABLE IF NOT EXISTS `gmenu` (

`id` smallint(3) NOT NULL auto_increment,

`name` text NOT NULL,

`mod` varchar(20) NOT NULL default '',

`por` smallint(6) NOT NULL default '0',

`lr` varchar(1) NOT NULL default 'l',

`php` int(1) NOT NULL default '0',

PRIMARY KEY (`id`),

KEY `por` (`por`)

)



INSERT INTO `gmenu` (`id`, `name`, `mod`, `por`, `lr`, `php`) VALUES

(6, 'Статистика', '', 3, 'r', 0),

(4, 'Навигация', '', 1, 'l', 0);

 


описание полей таблицы дано в уроке 14.




menu


CREATE TABLE IF NOT EXISTS `menu` (

`idm` smallint(3) NOT NULL auto_increment,

`id_rodm` smallint(3) NOT NULL default '0',

`namem` varchar(30) NOT NULL default '',

`modm` varchar(20) NOT NULL default '',

PRIMARY KEY (`idm`)

)





INSERT INTO `menu` (`idm`, `id_rodm`, `namem`, `modm`) VALUES

(1, 4, 'Новости', 'news'),

(2, 4, 'Статьи', 'stati'),

(3, 4, 'Файлы', 'file'),

(4, 4, 'Юмор', 'prikol'),

(5, 4, 'Видио', 'vidio');

 


idm - ID записи


id_rodm  - ID
главного меню к которому привязан данный пункт меню


namem - имя пункта меню, которое будет выведено на
сайт


modm - имя модуля,
который будет вызываться при выборе этого пункта






modules


CREATE TABLE IF NOT EXISTS `modules` (

`id` smallint(6) NOT NULL auto_increment,

`module` varchar(30) NOT NULL default '',

`pathm` varchar(100) NOT NULL default '',

PRIMARY KEY (`id`)

)



INSERT INTO `modules` (`id`, `module`, `pathm`) VALUES

(1, 'news', 'modules/news/index.php'),

(2, 'prikol', 'modules/prikol/index.php'),

(3, 'stati', 'modules/stati/index.php'),

(4, 'file', 'modules/file/index.php'),

(5, 'vidio', 'modules/vidio/index.php'),

(6, 'reg', 'modules/login/reg.php');

 


id - ID записи


module - имя модуля


pathm - путь к файлу модуля


Общая структура сайта


Сайт будет строится по такой структуре.


index.php основной файл сайта


inc папка в которой лежат вспомогательные
файлы


modules папка в которой лежат папки и файлы
подключаемых модулей


 


В папке inc мы положим файлы


head.php - файл в котором описан заголовок сайта с
банером


foot.php - файл в котором описан низ сайта с
копирайтом и т.д.


consait.php - файл конфигурации сайла, с насройками
для подключения к базе MySQL и стандартными функциями.


menul.php- файл вывода левой колонки блоков


menur.php - файл вывода правой колонки блоков


module.php  - файл обработки и вывода модулей
на сайт




disign


CREATE TABLE IF NOT EXISTS `disign` (

`name` varchar(20) NOT NULL default '',

`text` longtext NOT NULL

)





INSERT INTO `disign` (`name`, `text`) VALUES

('foot', '<TABLE cellSpacing=0 cellPadding=0 width=991 border=0 marginheight="0"
\r\nmarginwidth="0" topmargin="0" leftmargin="0">\r\n <TBODY>\r\n <TR>\r\n <TD
vAlign=top width=60><IMG height=41 \r\n src="img/footer_left.gif"
width=60></TD>\r\n <TD vAlign=center align=middle width="100%" \r\n background="img/footer_center.gif"><A
\r\n href=""><B><A href="mailto:allmustdie@citadelchaos.ru"><FONT \r\n color=#ffffff>AllMustDie</A>&nbsp;Progamming
2000-2009</B></FONT></A><br></font><font color=red>Использование информации с
сайта без согласия авторов запрещено</font></TD>\r\n <TD vAlign=top width=60><IMG
height=41 \r\n src="img/footer_right.gif" \r\nwidth=60></TD></TR></TBODY></TABLE>'),

('head', '<center><table border="0" cellpadding="0" cellspacing="0" >\r\n <tr>\r\n<img
src="img/logo.gif">\r\n </tr>\r\n</table>\r\n</center>');

 


Тут всего 2 записи - для верха файла и низа.


name - имя блока


text - содержимое блока


Шаблон сайт


В принципе шаблон вы можете создать свой, со своим оформлением.


В качестве шаблона сайта будем использовать таблицу вида





<table border="0" width="100%" >

<tr>

<td width="100%">&nbsp;</td>

</tr>

<tr>

<td width="16%">&nbsp;</td>

<td width="67%">&nbsp;</td>

<td width="17%">&nbsp;</td>

</tr>

<tr>

<td width="100%">&nbsp;</td>

</tr>

</table>


Вид таблицы быдет такой. Только линии таблицы будет не видиными. Для этого
указывается border="0". Т.е. ширина линии равно 0. И потому не видима.


Вывод будет осуществлятся в этик ячейках таблицы














head.php
menul.php module.php menur.php
foot.php

Для вызова вспомогательных файлов используем include.


В файле index.php теперь  пропишем все, что мы
тут напридумывали.


<table border="0" width="100%" >

<tr>

<td width="100%"><? include("head.php");</td>

</tr>

<tr>

<td width="16%"><? include("menul.php");</td>

<td width="67%"><? include("module.php");</td>

<td width="17%"><? include("menur.php");</td>

</tr>

<tr>

<td width="100%"><? include("foot.php");</td>

</tr>

</table>


Вспомогательные файлы


consite.php описание содерджимого этого
файла в Уроке 14.


$sql_host = "";

$sql_user = "";

$sql_pass = "";

$sql_db = "";





$link = mysql_connect($sql_host, $sql_user, $sql_pass)or die("Связи нет\n");

mysql_select_db($sql_db)or die("Нету связи никакой - лучше связи ....\n");

 


 


head.php


<?

require "consait.php";



$query="SELECT * FROM disign where name=\"head\"";

$result=mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$text = $row[text];

}

echo $text;



?>


Как видим из файла disign мы выбераем запись с
именем - head. И выводим содерживое поля
text на экран.


foot.php


<?

require "consait.php";



$query="SELECT * FROM disign where name=\"foot\"";

$result=mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$text = $row[text];

}

echo $text;



?>


Тоже самое, только выбираем запись "foot".


menul.php


<?

require "consait.php";



$query="SELECT * FROM gmenu where lr='l' ORDER BY por ASC ";

$result=mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$id = $row[id];

$name = $row[name];

$mod = $row[mod];

$por = $row[por];

$php = $row[php];

if($php==1)

echo "<hr><h5>",eval($name),"</h5>";

else

echo "<hr><h5>$name</h5>";



//Под меню



$query1="SELECT * FROM menu where id_rodm=$id group by namem";

$result1=mysql_query($query1);

while ($rowm = mysql_fetch_array($result1))

{

$id_rodm = $rowm[id_rodm];

$namem = $rowm[namem];

$modm = $rowm[modm];

$porm = $rowm[porm];

echo "<li><a href=\"?modul=$modm\">$namem</a><br></li>";



}

//конец подменю

}



?>


Левое меню. Из gmenu выбираем блоки имеющие
значение поля lr равное l.


Значение поля php определяет выводим ли мы просто
содерживое поля name или обрабатываем его содержимое
как PHP-код. Для этого проверяем значение. Если оно
равно 1, то значение name выполняем, как код. Для
этого используется функция eval. Эта функция вы
полняет строку текста как РНР-код. Так же по полю por
осуществляется сортировка выведеного на экран.  ORDER BY
por ASC
 сортировка в алфавитном порядке.  ORDER
BY por DESC
 - в обратном порядке.


Внутри цикла выводящего заголовки блоков, выводим пункты меню этого блока.
SELECT * FROM menu where id_rodm=$id group by namem 
- выбираем по значению ID равного
ID-
блока из gmenu.


Выводим полученные значения как ссылки вида ?modul=<имя>


menur.php


<?

require "consait.php";



$query="SELECT * FROM gmenu where lr='r' ORDER BY por ASC ";

$result=mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$id = $row[id];

$name = $row[name];

$mod = $row[mod];

$por = $row[por];

$php = $row[php];



if($php==1)

echo "<hr><h5>",eval($name),"</h5>";

else

echo "<hr><h5>$name</h5>";



//Под меню



$query1="SELECT * FROM menu where id_rodm=$id group by namem";

$result1=mysql_query($query1);

while ($rowm = mysql_fetch_array($result1))

{

$id_rodm = $rowm[id_rodm];

$namem = $rowm[namem];

$modm = $rowm[modm];

$porm = $rowm[porm];

echo "<li><a href=\"?modul=$modm\">$namem</a><br></li>";



}

//конец подменю



}



?>


 


Тоже самое, что и левое меню. Но для правой части нашего сайта.


module.php


<?

require "consait.php";

if($modul)

$query="SELECT * FROM modules where module=\"$modul\"";

else

$query="SELECT * FROM modules where module=\"news\"";

$result=mysql_query($query);

while ($row = mysql_fetch_array($result))

{

$id = $row[id];

$module = $row[module];

$pathm = $row[pathm];

}

include "$pathm";



?>


Файл обрабатывающий ссылку ?modul=<имя> 
для вывода указанного модуля.


По имени переменной modul из ссылки мы из базы
выбираем нужный файл для выполнения - include "$pathm";.
Если значения переменной modul не указано,  то
вызывается модуль news. У меня это модуль новостей.
Т.е. вы попадете автоматом на главную страницу сайта.


На следующем уроке рассмотрим регистрацию и авторизацию на сайте.


На данный момент до ума не доведено.


 


+++