2.3 Выборка данных из базы
Так как файлов достаточно много, проведу обзор важнейших из них, детально опишу работу модуля по отправке письма. При обращении к любой из страниц сайта всегда открывается страница index.php, расположенная в корневом каталоге. Если же браузером будет запрошен какой-либо другой файл, то установки файла .htaccess перенаправят на файл index.php. Это действует благодаря строке RewriteRule ^.*$ index.php Здесь применяется переадресация на файл index.php, если запрошенный файл удовлетворяет шаблону ^.*$, то есть удовлетворяет любому файлу. Однако, в файле есть одна директива, которая позволяет открывать браузером иные файлы; заведомо известно, что эти файлы есть изображения. Об этом позже. Сначала разберем работу файла index.php. Первым делом запускаем механизм сессий. session_start(); Устанавливаем заголовок о том, что браузеру будет отдан html в кодировке utf-8. header("Content-Type: text/html; charset=utf-8"); Подключаем файл с настройками для конкретного сайта. Здесь содержится префикс базы данных, название сайта, временной пояс. include_once("settings.php"); Далее идет подключение файла для работы администраторской части и файла с необходимыми классами (библиотека). include_once("xpanel/settings.php"); include_once("#functions/functions.lib.php"); Затем идет создание объекта для работы с базой, выполняется два запроса, устанавливающих кодировку соединения и временную зону. $db = new DataBase(); $db->Query("SET NAMES utf8"); $db->Query("SET TIME_ZONE='+7:00'"); Затем меняет переменную окружения для корректной работы далее $_SERVER['REQUEST_URI'] = str_replace("http://".$_SERVER['SERVER_NAME'], "", $_SERVER['REQUEST_URI']); Далее создаем объект, в котором будет хранится вся информация о текущей странице $pc = new Processor($db->SelectCell("SELECT `name` FROM #q WHERE `id` = '2' LIMIT 1", DB_MFT)."/"); DB_MFT – является константой со значением названия главной таблицы. Далее дополняем глобальный массив переменными, необходимыми в дальнейшем для более логичной, удобной работы: $GLOBALS['GLOBALS_ARGS']+= array( "TITLE" => $pc->Tree['title'], "keywords" => $pc->Tree['keywords'], "description" => $pc->Tree['description'], "URL" => $pc->URL, "URL_BASE" => $pc->URL_BASE, "URL_FULL" => $pc->URL_FULL, "URL_QUERY" => $pc->URL_QUERY, "BREADCRUMBS" => breadcrumbs($pc->Tree) ); Далее создается объект «пользователь». В него заносится информация об авторизации, правах этого пользователя: $User = new User(DB_USERS); if($User->GetAuthorize(@$_SESSION['www_login'], @$_SESSION['www_password'])) { $User->id = $User->info['id']; $GLOBALS['GLOBALS_ARGS']+= $User->info; } $User->Access = $User->AccessChecking($pc->GetAccess(@DB_PREFIX."access_www", $pc->Tree)); Далее создается объект «шаблонизатор», разбирающий текст файла шаблона default.htm: $tc = new Templater(file_get_contents("#templates/default.htm")); В этом объекте идет подстановка вместо определяемых переменных типа %имя_переменной% соответствующих данных. Следующими командами определяется выбор подключаемого шаблона. Так как у нас для главной один шаблон, а для внутренних страниц другой, то имеет место следующая конструкция выбора. Здесь просматривается идентификатор запрашиваемой страницы. Если идентификатор равен 2, то есть это главная страница, то загружается шаблон content.htm. Иначе content_inner.htm. Также здесь идет установка переменной для данного шаблона, чтобы загузить его в главный шаблон default.htm. if ($pc->Tree['id']=='2') $tc->Add(file_get_contents("#templates/content.htm"), array(), "/CONTENT"); else $tc->Add(file_get_contents("#templates/content_inner.htm"), array(), "/CONTENT"); Затем идет подключение постоянных блоков. Эти блоки будут загружаться во все страницы. Поэтому они названы гаджетами. Подробнее, здесь прописывается путь к файлам, в которых идет загрузка из базы данных, а также здесь идет инициализация переменных, при подстановке которых в шаблоны, будет выдан соответствующий контент. «"/CONTENT/» говорит о том, что эти переменные будут загружаться после подстановки переменной «CONTENT». $tc->AddModul("#gadgets/menu/menu.php", "/CONTENT/MENU"); $tc->AddModul("#gadgets/menu/menu_v.php", "/CONTENT/MENU_V"); $tc->AddModul("#gadgets/tel/tel.php", "/CONTENT/TEL"); $tc->AddModul("#gadgets/adress/adress.php", "/CONTENT/ADRESS"); $tc->AddModul("#gadgets/tel_f/tel_f.php", "/CONTENT/TEL_F"); В конце файла index.php содержится код, подключающий выводимый контент для каждой страницы. $tc->AddModul($pc->Tree['mod_path'], "/CONTENT/CONTENT"); К этому моменту в $pc->Tree['mod_path'] уже содержится идентификатор подключаемого модуля (приложения). На этом обзор файла index.php закончен. Перейдем к рассмотрению файла одного из гаджетов. Например, #gadgets/menu/menu.php. В самом начале всех файлов модулей (приложений) и гаджетов рекомендуется вставлять проверку на прямой запрос этого файла. В случае прямого запроса файла выдавать заголовок 404 – страница не найдена и прекращать дальнейшую обработку скрипта. Делается это следующим кодом: if ( substr(__FILE__, strrpos(__FILE__, "/")) == substr($_SERVER['SCRIPT_NAME'], strrpos($_SERVER['SCRIPT_NAME'], "/")) ) { header("HTTP/1.0 404 Not Found"); echo "ERROR 404"; exit(); } Затем идет основная часть всех модулей (приложений), гаджетов. Естественно, основные части у всех отличны. В данном файле она такова: $select = $db->Select("SELECT `id`, `title`, `name` FROM #q WHERE `parent_id` = '1' AND (`id`=14 OR `id`=15 OR `id`=16) ORDER BY `position`", DB_MFT, 1); foreach ($select as $row) { $row['class'] = "item_top_menu"; if ($pc->Tree['id']==$row['id']) { $row['class']="item_top_menu_sel"; } $args[] = $row; } То есть идет запрос к базе за определенными страницами. В переменную $select помещается не массив result-set, а самый настоящий массив, содержащий ответ от сервера базы данных MySQL. Затем значения записываются в массив в глобальный массив $args, содержащий все значения переменных по текущей странице. В конце файла следует вывести шаблон для конкретного модуля, гаджета. echo file_get_contents(dirname(__FILE__)."/menu.htm"); В этом файле содержится html код с уже зарезервированными переменными. Файл menu.htm: %title% Вместо значений %name%, %title%, подставятся одноименные значения из массива $args.
|