Разработка системы управления содержимым
ВВЕДЕНИЕ
Процесс разработки сайта является очень сложным
и делом, который требует больше времени и внимания. Сайт должен быт простым,
красивым и понятным. Данный продукт является системой, который можно создать
простые блоги, сайты визитки или сайт новостей. Он создан в принципе MVC
системы. Данный принцип является очень популярным и простым при разработке
подобных систем.
В этом документе приведены все классы основные
классы системы и функции с описанием. Он состоит из четырех разделов.
На первом разделе названием Регулярные
выражении приведено описание функций, которые работает с регулярными
выражениями.
Раздел Отправка писем содержит описание
классов и функций который работает с отправкой электронных писем в системе.
Описание функций раздел
который является самым большим и имеющий содержание о всех функциях классах и
модулях системы.
1.
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Ранее для поиска в строке подстроки
использовались строковые функции, ограничиваясь при этом случаями
точного соответствия строк и подстрок. Для работы со строками можно
использовать также регулярные выражения, представляющие собой, по сути,
мини-язык описаний для поиска в строках информации по заданному шаблону. С
помощью регулярных выражений можно найти в строке подстроку, удовлетворяющую
заданному шаблону и извлечь ее, проверить существует ли заданная строка и т.д.
1.1
Класс для работы с регулярными выражениями
Ниже приведено листинг класса для работы с
регулярными выражениями. Название класса regular
имеющий
функции Activate,
getResult,
checkRegular.
Данная функция позволяет автоматически загрузить
список всех регулярных выражений который используется в системе.
Листинг
1.1. Функция
Activate
public static function Activate()
{DIR_MODULES."regulars/regulars.php";(isset($regs))
{self::$regulars = new
params($regs);}
{ self::$regulars = new params();}
}
Функция chekRegular
проверят на существования регулярного выражения в системе.
Листинг 1.2. Функция
checkRegular
public static function
checkRegular($name)
{self::$regulars->is_isset($name);
}
Функция выполняет проверку заданных данных с
используя регулярных выражений и возвращает результат. Данная функция имеет два
параметра первый object
это значение который надо проверит и второй это filter_type
который указывает тип фильтра.
Листинг
1.3. Функция
getResult
public static function
getResult($object,$type,$filter_type="preg_match")
{ if(isset($object) and
$filter_type=="preg_match")
{
if(!self::$regulars->is_isset($type))
{return false;}
{return
preg_match(self::$regulars->getValue($type),$object);}
}($filter_type=="preg_match_all")
{if(!self::$regulars->is_isset($type))
{return false;}
{$l =
preg_match_all(self::$regulars->getValue($type),$object,$mass);
$mass;
}
}
}
1.2
Класс для проверки данных при регистрации
Данный класс позволяющий выполнить проверку
данных пользователя. В классе создано функции login
,password,
mail,
dateage.
Данная функция позволяет сделать проверку логина
на существования и корректность с использованием регулярного выражения.
Листинг
1.4. Функция
login
public static function login($l)
{(!isset($l))
{::$log['login'] =
XATO_LOGIN_YOQ;false;
}(strlen($l)<6 and
strlen($l)>12)
{::$l['login'] =
XATO_LOGIN_KK;false;
}(!regular::getResult($l,'login'))
{::$log['login'] =
XATO_LOGIN_NOTOGRI;false;
}(data::$user->getValue("login","user_login='$l'"))
{::$log['login'] =
XATO_LOGIN_MAVJUD;
}
else
{
return
true;
}
}
Password
- функция
который проверятся с использованием регулярных выражений, сравнивает две пароли
на правильность и возвращает данные шифрованный методом md5.
Листинг
1.5. Функция
password
public static function
password($p1,$p2)
{(!isset($p1) or !isset($p2))
{::$log['password'] =
XATO_PAROL_YOQ;
}(strlen($p1)<6 and
strlen($p2)>12)
{::$log['password'] =
XATO_PAROL_KK;false;
}($p1==$p2)
{::$log['password'] =
XATO_PAROL_OXSHASHMAS;false;
}(!regular::getResult($p1,'password'))
{::$log['password'] =
XATO_PAROL_NOTOGRI;false;
}
{true;
}
}
Листинг
1.6. Функция
mail
public static function mail($m)
{(!isset($m))
{::$log['mail'] =
XATO_EMAIL_YOQ;false;
}(!regular::getResult($m,'email'))
{::$log['mail'] =
XATO_EMAIL_NOTOGRI;false;
}(strlen($m)<6 and
strlen($m)>255)
{::$log['mail'] =
XATO_EMAIL_KK;false;
}
{true;
}
}
2.
ОТПРАВКА ПИСЕМ
Самый простой способ отправить письмо
при помощи PHP - воспользоваться стандартной функцией mail. Она имеет
следующий синтаксис:
bool mail (string
to, string subject, string message [, string additional_headers [, string
additional_parameters]])
2.1
Класс для отправки сообщений
Данный класс позволяет отправлять электронные
письма в PHP и имеет
опции задержки писем. В классе Mail
имеется следующие функции Send,
Delay,
Abort,
Complete.
С помощью функции Send
задается данные отправляемого письма и он имеет следующие параметры:
· $to -
электронная почта получателя
· $subject -
тема отправляемого письма
· $message - текст
отправляемого письма
· $from - адрес
электронной почты отправителя
· $reply
- адрес электронной почты который должен отправляется ответ.
Листинг
2.1. Функция
Send
static function Send($to, $subject,
$message, $from, $reply = null){(empty($reply)){
$reply = $from;
}
$reply = "Reply-To:
$reply\r\n";
$headers = "MIME-Version:
1.0\r\n".
"Content-Type: text/html;
charset=UTF-8\r\n".
"From: $from\r\n".
$reply.
"X-Mailer: PHP/".phpversion();
$subject =
mb_encode_mimeheader($subject, 'UTF-8', 'B', "\r\n",
9);(self::$delay){::$mail[] = array($to, $subject, $message, $headers);
}else{{($to, $subject, $message,
$headers);
}catch (Exception $e){
}
}
}
Функция Delay
- включает задержку отправки писем.
Листинг
2.2. Функция
Delay
static function Delay(){::$delay
= true;
}
Функция Abort
- отключает задержку отправки писем и очищает очередь писем.
Листинг
2.2. Функция
Delay
static function Abort(){::$delay =
false;::$mail = array();
}
Complete
- данная функция отправляет все письма из очереди и очищает очередь писем в
конце отключая задержку писем.
Листинг
2.21.
Функция
Complete
static function
Complete(){{(self::$mail as $m){($m[0], $m[1], $m[2], $m[3]);
}
}catch (Exception $e){}
Очищаем состояние задержки
self::Abort();
}
2.2
Отправка ссылки для активации на почту пользователя
Данная функция отправляет письмо на почту нового
пользователя с ссылкой активации его профиля.
Листинг
2.2. Функция
Complete
public static function
SendActivate($mail,$login,$activation)
{
$subject = "Добро пожвловать в
".settings::getValue("site_name");
$message
= "Здраствуйте $login
Для активации нажмите
<a
href='#"656699.files/image001.gif">
Рис. 3.1 Главная страница
.16
Класс Render
Render
- модуль
который генерирует html
страницу на основе шаблонов и заданных данных.
HTML
- функция
генерирует html страницу
методом подстановки используя регулярных выражений.
Листинг
3.44. Функция
HTML
public static function
HTML($arrays,$tpl)
{
{
$handler =
fopen($tpl,"r");
$text =
fread($handler,filesize($tpl));($handler);(is_array($arrays))
{(isset($arrays[0]))
{($arrays as $key=>$value)
{
$html.=self::replace($value,$text);
}
}
{
$html =
self::replace($arrays,$text);
}$html;
}
{false;
}
}
else
{
return
false;
}
}
Replace
- функция
который заменяет все ключевые слова заданный в шаблоне на обработанные данные.
Листинг
3.45. Функция
replace
public static function
replace($array,$text)
{
$rtext="";$stext="";($array
as $key=>$value)
{
$text =
preg_replace("/{".$key."}/",$value,$text);
}
return $text;
}
Ниже показано пример шаблона, который
используется в системе. Шаблон сохраняется в формате *.tpl.
Чтобы вывести нужную информацию надо написать поля таблицы из БД в фигурных
скобках
Листинг 3.46. Шаблон для вывода
страниц
<div
class='form'
align='left'>
<h3>{page_title}</h3>
<h4>
{page_content}
</h4>
<h5>Дата добавления: <a
href='#'>{page_created_time}</a></h5>
</div>
Данном изображении показано результат работы
функции Render
и
шаблона content.tpl
Рис. 3.2. Пример работы функции Render
и шаблона content.tpl
3.17
Класс Magazine
Magazine
- модуль
магазина для данной системы. Позволят ввод и вывод данных, покупку , позволяет
управлять корзиной пользователя.
Activate
- функция
который выполняет наследование класса getData
для переменных.
Листинг
3.47. Функция
Activate
public static function Activate ()
{::install();::$tovari = new
getData("eagle_tovar");::$manufacturer = new
getData("eagle_manufacturers");::$basket = new
getData("eagle_basket");::$catalog = new
getData("catalog");
}
LoadLastNews
- функция
который загружает все товары который добавлен последними.
Листинг
3.48. Функция
LoadLastNews
public static function
LoadLastNews()
{::$LastNewsList=self::$tovari->getValue("*","publication_date='".date("Y-m-d
H:m:s")."' and status ='1'","addition_date
desc","10"); self::$LastNews;
}
LoadListTovar
- данная
функция позволяет загрузить список товаров из определенной категории.
Листинг
3.49. Функция
LoadListTovar
public static function
LoadListTovar($id_catalog)
{
$k =
self::$tovari->getValue("*","id_type=$id_catalog");
$k;
}
LoadTovar
- функция
позволяет загрузит данные определенного товара.
Листинг 3.50. Функция
LoadTovar
public static function
LoadTovar($id_tovar)
{
$id_tovar = ($id_tovar
!="") ? $id_tovar = "AND
eagle_tovar.id_tovar=$id_tovar":"";
$sort = "ORDER BY name
ASC";
$count = "LIMIT 10";
/*self::$ListKatalog=self::
$catalog->getValue ("*",$id_catalog, $sort,$count);*/
$sql =
"SELECT_tovar.id_tovar.name
, eagle_tovar.price
, eagle_manufacturers.name
, eagle_tovar.addition_date
, eagle_tovar.publication_date
, eagle_tovar.status
, eagle_tovar.quantity_of_sales
, eagle_tovar.quantity_of_views
, eagle_tovar.image.eagle_tovar
, eagle.eagle_manufacturers
, eagle.eagle_basket
,
eagle.catalog(eagle_tovar.id_type=catalog.id_catalogeagle_tovar.id_manufacturer=eagle_manufacturers.id_manufacture
$id_tovar) $sort $count;";
$results = mysql_query($sql);(!$results)
{false;
}
{($res = mysql_fetch_assoc($result))
{::$ListTovar[] = $res;
}
}
}
LoadCatalog - загрузка
списка
каталога.
Листинг
3.51. Функция
LoadCatalog
public static function LoadCatalog()
{::$ListKatalog =
self::$catalog->getValue("*");
self::$ListKatalog;
}
LoadBasketUser
- функция
который выполняет загрузку списка производителей.
Листинг
3.52. Функция
LoadListmanufacturers
public static function
LoadListManufacturer()
{::$ListManufaturer =
self::$manufacturer->getValue("*");
self::$ListManufaturer;
}
LoadBasketUser
- функция
который, позволяет загрузить данные корзины указанного пользователя.
Листинг
3.53. Функция
LoadBasketUser
public static function
LoadBasketUser($user_id)
{::$ListBasket=self::$basket->getValue("*","user_id=$user_id","purchasing
date DESC");
}
DeleteBasket
- функция
для удаления данных из корзины. При использовании данной функции данные
удаляется из корзины текущего пользователя.
Листинг
3.54. Функция
DeleteBasket
public static function
DeleteBasket()
{(user::rights()<>0)
{(isset(request::$post))
{(request::$post->is_isset("delete_basket"))
{self::$basket->delValue("id_basket='".request::$post->getValue("delete_basket")."'");
}
}
}
}
Addbasket
-
данная функция добавляет данные в корзину текущего пользователя.
Листинг
3.55. Функция
AddBasket
public static function AddBasket()
{(user::rights()<>0)
{(isset(request::$post))
{ $post =
request::$post;($post->is_isset("submit"))
{
$post->delValue("submit");
$post->setValue("user_id",user::id();)self::$basket->addValue($post->getArray());
}
}
}
}
3.18
Класс Page
Page
- Данный
модуль позволяет вывести страницы и выполнять поиск страниц.
GetPages
- Функция
для вывода страниц. Этот функция имеет 3 параметра и с помощью этих можно
определят количество, порядок и страницу.
Листинг
3.56. Функция
GetPages
public static function
GetPages($where,$orderby="",$limit="")
{(!$result =
data::$pages->getValue("*",$where,$orderby,$limit))
{$result[0] =
data::$pages->getValue("*","page_id='".settings::getValue("default_page")."'");
}
else
{
return $result;
}
}
Листинг
3.57. Функция
Load
public static function Load($title)
{
$result =
data::$pages->getValue("*","page_title='$title'");(!$result)
{mysql_error();data::$pages->getValue("*","page_id='".settings::getValue("default_page")."'");
}
{$result;
}
}
GetArrayPages
- функция
тоже аналогично к функцию GetPages.
Отличие в том у него есть еще один параметр, который позволяет выполнить поиск
по сайту.
Листинг
3.58. Функция
GetArrayPages
public static function
GetArrayPages($text,$orderby="",$limit="",$groupby="")
{::$p = new params();::$a = new
params();
$where = ($where !="") ?
"WHERE page_title LIKE '*$text*' OR page_subtitle LIKE '*$text*'
page_keywords LIKE '*$text*' OR page_content='*$text*' AND
page_status='public'":"";
$groupby = ($groupby !="")
? "GROUP BY $groupby":"";
$sql = "SELECT * FROM pages
$where $orderby $limit $groupby";
$res = db::query($sql);(!$res)
{($result = mysql_fetch_assoc($res))
{
$r[] = $result;
}
}$r;
}
3.19
Класс
Auth
- модуль
который, обеспечивает авторизацию и выход пользователя из системы.
Authenticate
- функция
для авторизации пользователя.
Листинг
3.59. Функция
Authenticate
public static function
Authenticate()
{(!isset(request::$post))
{false;
}
{
$login =
request::$post->getValue("login");
$password =
request::$post->getValue("password");(!isset($login) or
!isset($password))
{false;
}
{
$result =
data::$user->getValue("*","user_login='$login' and
user_password='$password'");(!$result)
{::setValue("user",$result);
}
}
}
}
ExitUser
- функция
осуществляет выход из системы. Он заверщает сессию текущего пользователя.
Листинг
3.60. Функция
ExitUser
public static function ExitUser()
{
session::endSession();
}
3.20
Класс User
User
- модуль
который позволяет выводит данные текущего пользователя.
Activate
- функция
который автоматически запускается при загрузке класса и вызывает функцию GetDefaultUser
Листинг
3.61. Функция
Activate
public static function Activate()
{::GetDefaultUser();
}
GetDefaultUser
- функция
который загружает данные пользователя установленный по умолчанию.
Листинг
3.62. Функция
GetDefaultUser
private static function
GetDefaultUser()
{(!session::is_isset("user"))
{::setValue("user",data::$user->getValue("*","user_login='guest'"));::$u
= session::getValue("user");
$uid =
self::$u->getValue("user_id");::setValue("user_info",data::$user->getValue("*","user_id='$uid'"));::$ui=
session::getValue("user_info");
}
}
Login
- функция
который возвращает логин текущего пользователя.
Листинг
3.63. Функция
Login
public static function login()
{::GetDefaultUser();self::$u->getValue("user_login");
}
Password
- функция
который возвращает пароль текущего пользователя.
public static function password()
{::GetDefaultUser();self::$u->getValue("user_password");
}
Hash
- функция
который возвращает хеш-код текущего пользователя.
Листинг
3.65. Функция
hash
public static function hash()
{self::GetDefaultUser();self::$u->getValue("user_hash");
}
Auth_time
- функция
который возвращает дата и время который пользователь вошел в систему.
Листинг
3.66. Функция
auth_time
public static function auth_time()
{::GetDefaultUser();self::$u->getValue("user_auth_time");
}
Status
- возвращает
значение 0 или 1. 0 означает что текущий пользователь не активирован, 1
означает что текущий пользователь активирован.
Листинг
3.67. Функция
status
public static function status()
{::GetDefaultUser();self::$u->getValue("user_status");
}
Rights
- функция
который можно определить права доступа текущего пользователя.
Листинг
3.68. Функция
rights
public static function rights()
{::GetDefaultUser();self::$u->getValue("user_rights");
}
Email
- функция
который возвращает адрес электронной почты текущего пользователя.
Листинг
3.69. Функция
ip
public static function email()
{::GetDefaultUser();self::$u->getValue("user_mail");
}
RegistratedDate
- данная
функция возвращает дату регистрации текущего пользователя.
Листинг
3.70. Функция
RegistratedDate
public static function
RegistratedDate()
{::GetDefaultUser();self::$u->getValue("user_reg_date");
}
Img
- функция
который возвращает путь к картинке пользователя.
Листинг 3.71. Функция
img
public static function img()
{::GetDefaultUser();(!self::$ui->is_isset("user_img"))
{settings::getValue("user_img");
}
{ return
self::$ui->getValue("user_img"); } }
3.21
Класс Registration
Registration
-
модуль для регистрации нового пользователя. Данный модуль обработается событием
register при регистрации
нового пользователя.
Process
- функция
который выполняет проверку данных полученные от пользователя и если все данные
правильны то сохраняет в БД.
Листинг
3.72. Функция
Process
public static function Process()
{::$newuser["user_login"]=
check::login(self::$post->getValue("login"));::$newuser["user_password"]
=
check::password(::$post->getValue("password1"),::$post->getValue("password2")
);::$newuser["user_hash"]
= session::getHash();::$newuser["user_auth_time"] = date("Y-m-d
H:m:s");::$newuser["user_pol"] =
self::$post->getValue("pol");::$newuser["user_rights"] =
"1";::$newuser["user_status"] =
"0";::$newuser["user_mail"] =
check::mail(self::$post->getValue("mail"));::$newuser["user_ip"]
= $_SERVER["REMOTE_ADDR"];::$newuser["user_reg_date"] =
date("Y-m-d H:m:s");(self::$newuser as $key=>$value)
{($value==false)
{implode(",\r\n",check::$log);;
}
}::$user->addValue(self::$newuser);
self::SendActivate($newuser["user_mail"],$newuser["user_login"],session::getHash());
}
SendActivate
- функция,
который отправляет ссылку активации на почту нового регистрированного
пользователя.
Листинг
3.73. Функция
Process
public static function
SendActivate($mail,$login,$activation)
{
$subject = "Добро пожвловать в
".settings::getValue("site_name");
$message
= "Здраствуйте $login
Для активации нажмите
<a
href='#"656699.files/image003.gif">
Рис. 3.3 Результат работы поиска
ЗАКЛЮЧЕНИЕ
В процессе разработки данной системы я изучил,
как работать с классами и как правильно организовать взаимодействие классов. Я
научился как создать проект системы с использованием UML
, так как для того чтобы начать разработку данной системы мне пришлось создать
его проект. Больше узнал о возможностях PHP,
которые еще не изучил. Разработке программного продукта дает возможность от
написания кода несколько раз и сэкономит время.
Поэтому я создал данную систему на уровне ООП, и
я больше узнал о возможностях использования классов для создания программных
продуктов. Научился как работать с статическими функциями и возможности их
использования. Кроме этих во время разработки я использовал веб - сервер Apache
и СУБД MySQL. После
этого я научился как пользоваться веб - сервером Apache,
как настраивать и как работают файлы .htaccess.
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Г.
Кен, М. Гильберт «Программирование на Visual Basic и VBA», Киев, 2000 г. - 410
стр.
. Хомоненко
А.Д., Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высших учебных
заведений /Под ред. Проф.А. Д Хоменко. СПб.: КОРОНА, 2000г.- 416 стр
. Е.
Петрусос «Visual Basic 6.0». СПб. 2000 г. - 250 стр.
. С.В.
Глушаков, А.С. Сурядный «Программирование на VB6» СПб. 2002 г - 497 стр.
. Т.С.
Карпова, «Базы данных: модели, разработка, реализации», СПб. 2002 г. - 304 стр.