Вступление
1. Для начала, определимся с инструментарием. Имеется в виду не серверная часть (PHP, Apache и MySQL, а так же средства, способствующие удобствам работы с ними, типа phpMyAdmin должны быть установленны. В крайнем случае, можно использовать Денвер Дмитрия Котерова). Рассмотрим библиотеки, которые мы будем использовать.
Шаблонизатор.
Воспользуемся простым шаблонизатором XTpl (http://sourceforge.net/projects/xtpl). Скaчать саму библиотеку (без примеров) можно прямо отсюда. Почему именно он? Потому, что он простой и шустрый.
Класс для доступа к БД.
Для удобства доступа к MySQL предлагаю воспользоваться простеньким классом, который облегчит обработку результатов SQL-запросов. Он (я надеюсь) не сложен и более-менее понятно комментирован, так что проблем с ним не должно возникнуть. Ниже я привожу его код, который надо будет сохранить в файле mysql.incl.
<?php
/*
Файл mysql.incl
Класс для упрощенной работы с MySQL
(c) Eugene Bond
*/
class DB {
var $db;
//
// Конструктор. Принимает параметры для подключения к базе и имя БД
//
function DB($host, $user, $pass, $base="") {
if ($base=="") $base=$user; // Если имя БД не задано, устанавливаем его равным имени пользователя
$this->$db = mysql_connect($host, $user, $pass) or die("Не могу подключится к MySQL");
mysql_select_db($base, $this->$db) or die('Не могу выбрать базу данных');
}
//
// Унификатор запроса к БД
//
function request($sql) {
$res = mysql_query($sql);
if ($res) return $res;
else {
$err = "<BR><FONT COLOR=#FF0000>Ошибка!!!!!! при выполнении запроса:</FONT><BR><FONT COLOR=#0000FF>".$sql."</FONT><BR><FONT COLOR=#FF0000>".mysql_error()."</FONT><BR>";
echo $err;
}
return 0;
}
//
// Запрос к БД. Текст запроса передается переметром $sql
// Если параметр $r равен 1 - возвращаем массив записей, если 0 - возвращаем массив одной записи
// Параметр $type отвечает за то, в каком виде будет вернувшийся массив. См. ман!
//
function select($sql, $r=1, $type=MYSQL_BOTH) {
if ($res = $this->request($sql)) {
if ($r) {
$i=0;
while ($res_arr = mysql_fetch_array($res, $type)) $ret_arr[$i++]=$res_arr;
return $ret_arr;
} else return mysql_fetch_array($res, $type);
}
return 0;
}
//
// Запрос к БД. Текст запроса передается переметром $sql
// Если параметр $r равен 1 - возвращаем ассоциативный массив, если 0 - возвращаем одно значение
//
function a_select($sql, $r=1) {
if ($res = $this->request($sql)) {
if ($r) {
while ($res_arr = mysql_fetch_row($res)) $ret_arr[$res_arr[0]]=$res_arr[1];
} else {
$res_arr = mysql_fetch_row($res);
$ret_arr = $res_arr[0];
}
return $ret_arr;
}
return 0;
}
//
// Изменение одной записи. Если $cur_id равен 0 - вставляем новую запись в таблицу $cur_tbl,
// Если $cur_id не равен 0 - меняем запись с id равным $cur_id.
// $osql - список изменяемых полей в формате "field1='value1', field2='value2', ..."
// Если $block==true - блокируем таблицу на время операции
//
function modify($osql, $cur_tbl, $cur_id, $block=false){
$sql=(($cur_id)?"UPDATE":"INSERT")." $cur_tbl SET ".$osql;
if ($cur_id) $sql .= " WHERE id=$cur_id";
if ($block) mysql_query("LOCK TABLES ".$cur_tbl." WRITE");
if ($res=$this->request($sql)) {
if (!$cur_id) $cur_id=mysql_insert_id();
}
if ($block) mysql_query("UNLOCK TABLES");
return $cur_id;
}
}
?>
Рабочая библиотека.
В нее мы сложим все функции и инициализации, общие для нашего портала. На первом этапе это будет подключение к базе и инициализация шаблонизатора. Приведенный ниже код сохранияем в файл work.incl подправляем, если необходимо, параметры конструктора DB (первый параметр - адрес MySQL, второй - имя пользователя, третий - пароль пользователя и четвертый - имя БД в которой лежат наши таблицы)
<?php
// Файл work.incl
// Этот файл будет подключаться ко всем рабочим файлам
// и содержать общие для всех модулей функции
include "mysql.incl"; // Подключаем библиотеку MySQL
$db = new DB("localhost", "root", "", "portal"); // Соединяемся с БД
include "xtpl.p"; // Подключаем библиотеку шаблонизатора
$tpl = new XTemplate("html/main.html"); // Инициализируем шаблонизатор и задаем базовый шаблон
?>
2. Структура проекта предлагается следующая:
В корне сайта изначально будут созданы следующие директории:
incl - сюда мы сложим библиотечные файлы (mysql.incl, work.incl и xtpl.p для начала)
html - здесь будут лежать шаблоны страниц для нашего портала
Дальше будет видно ;-)
Вот, теперь можно начинать!