Разработка системы управления содержимым
В процессе разработки данной системы я изучил, как работать с классами и как правильно организовать взаимодействие классов. Я научился как создать проект системы с использованием UML, так как для того чтобы начать разработку данной системы мне пришлось создать его проект. Больше узнал о возможностях PHP, которые еще не изучил. Разработке программного продукта дает возможность от написания кода… Читать ещё >
Разработка системы управления содержимым (реферат, курсовая, диплом, контрольная)
Процесс разработки сайта является очень сложным и делом, который требует больше времени и внимания. Сайт должен быт простым, красивым и понятным. Данный продукт является системой, который можно создать простые блоги, сайты визитки или сайт новостей. Он создан в принципе MVC системы. Данный принцип является очень популярным и простым при разработке подобных систем.
В этом документе приведены все классы основные классы системы и функции с описанием. Он состоит из четырех разделов.
На первом разделе названием Регулярные выражении приведено описание функций, которые работает с регулярными выражениями.
Раздел Отправка писем содержит описание классов и функций который работает с отправкой электронных писем в системе.
Описание функций раздел который является самым большим и имеющий содержание о всех функциях классах и модулях системы.
1. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Ранее для поиска в строке подстроки использовались строковые функции, ограничиваясь при этом случаями точного соответствия строк и подстрок. Для работы со строками можно использовать также регулярные выражения, представляющие собой, по сути, мини-язык описаний для поиска в строках информации по заданному шаблону. С помощью регулярных выражений можно найти в строке подстроку, удовлетворяющую заданному шаблону и извлечь ее, проверить существует ли заданная строка и т. д.
1.1 Класс для работы с регулярными выражениями
Ниже приведено листинг класса для работы с регулярными выражениями. Название класса regular имеющий функции Activate, getResult, checkRegular.
Данная функция позволяет автоматически загрузить список всех регулярных выражений который используется в системе.
Листинг 1.1. Функция Activate
public static function Activate ()
{
include DIR_MODULES." regulars/regulars.php" ;
if (isset ($regs))
{self:$regulars = new params ($regs);}
else
{ self:$regulars = new params ();}
}
Функция chekRegular проверят на существования регулярного выражения в системе.
Листинг 1.2. Функция checkRegular
public static function checkRegular ($name)
{
return 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;}
else
{return preg_match (self:$regulars->getValue ($type),$object);}
}
elseif ($filter_type=="preg_match_all")
{if (!self:$regulars->is_isset ($type))
{return false;}
else
{$l = preg_match_all (self:$regulars->getValue ($type),$object,$mass);
return $mass;
}
}
}
1.2 Класс для проверки данных при регистрации
Данный класс позволяющий выполнить проверку данных пользователя. В классе создано функции login ,password, mail, dateage.
Данная функция позволяет сделать проверку логина на существования и корректность с использованием регулярного выражения.
Листинг 1.4. Функция login
public static function login ($l)
{
if (!isset ($l))
{
self:$log['login'] = XATO_LOGIN_YOQ;
return false;
}
elseif (strlen ($l)<6 and strlen ($l)>12)
{
self:$l['login'] = XATO_LOGIN_KK;
return false;
}
elseif (!regular:getResult ($l,'login'))
{
self:$log['login'] = XATO_LOGIN_NOTOGRI;
return false;
}
elseif (data:$user->getValue («login» ," user_login='$l'"))
{
self:$log['login'] = XATO_LOGIN_MAVJUD;
}
else
{
return true;
}
}
Password - функция который проверятся с использованием регулярных выражений, сравнивает две пароли на правильность и возвращает данные шифрованный методом md5.
Листинг 1.5. Функция password
public static function password ($p1,$p2)
{
if (!isset ($p1) or! isset ($p2))
{
self:$log['password'] = XATO_PAROL_YOQ;
}
elseif (strlen ($p1)<6 and strlen ($p2)>12)
{
self:$log['password'] = XATO_PAROL_KK;
return false;
}
elseif ($p1==$p2)
{
self:$log['password'] = XATO_PAROL_OXSHASHMAS;
return false;
}
elseif (!regular:getResult ($p1,'password'))
{
self:$log['password'] = XATO_PAROL_NOTOGRI;
return false;
}
else
{
return true;
}
}
Функция mail проверят на корректность заданного электронного адреса.
Листинг 1.6. Функция mail
public static function mail ($m)
{
if (!isset ($m))
{
self:$log['mail'] = XATO_EMAIL_YOQ;
return false;
}
elseif (!regular:getResult ($m,'email'))
{
self:$log['mail'] = XATO_EMAIL_NOTOGRI;
return false;
}
elseif (strlen ($m)<6 and strlen ($m)>255)
{
self:$log['mail'] = XATO_EMAIL_KK;
return false;
}
else
{
return 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){
if (empty ($reply)){
$reply = $from;
}
$reply = «Reply-To: $replyrn» ;
$headers = «MIME-Version: 1.0rn» .
" Content-Type: text/html; charset=UTF-8rn" .
" From: $fromrn" .
$reply.
" X-Mailer: PHP/" .phpversion ();
$subject = mb_encode_mimeheader ($subject, 'UTF-8', 'B', «rn», 9);
if (self:$delay){
self:$mail[] = array ($to, $subject, $message, $headers);
}else{
try{
mail ($to, $subject, $message, $headers);
}catch (Exception $e){
}
}
}
Функция Delay — включает задержку отправки писем.
Листинг 2.2. Функция Delay
static function Delay (){
self:$delay = true;
}
Функция Abort — отключает задержку отправки писем и очищает очередь писем.
Листинг 2.2. Функция Delay
static function Abort (){
self:$delay = false;
self:$mail = array ();
}
Complete — данная функция отправляет все письма из очереди и очищает очередь писем в конце отключая задержку писем.
Листинг 2.21. Функция Complete
static function Complete (){
try{
foreach (self:$mail as $m){
mail ($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 Для активации нажмите
Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение;
$reply = settings: getValue («reply_email»);
Mail:Send ($mail,$subject,$message,$from,$reply);
Mail:Complete (); }
3. ОПИСАНИЕ КЛАССОВ
Данный сайт создан в принципе MVC и все его классы разделяются на три вида:
· Модель — классы, которые обеспечивает ввод и вывод данных
· Контроль — классы, которые обеспечивает за управлением, проверкой данных
· Просмотр — классы которые обеспечивает за отображением данных после обработки.
3.1 Классы типа модель
Классы данного типа являются data, db, getData.
· data - Данный класс позволяет обеспечить наследование класса getData.
· db - Это единственный класс который напрямую работает с БД. Он позволяет выполнить соединение, отключение, генерирования запросов и их выполнения.
· getData - данный класс является абстрактным. Он обеспечивает ввод и вывод данных.
3.2 Класс DB
Данный класс является единственным классом, который напрямую работает с БД. Созданы функции, которые обеспечивает соединение, отключение, генерирование и выполнение запросов.
Данная функция позволяет вводить настройки подключения к БД Он используется функцией connect для подключения.
Листинг 3.1. Функция db_conf
static function db_conf ($host,$dbase,$uid, $pwd, $connection_charset)
{
self:$config['host'] = $host;
self:$config['dbase'] = $dbase;
self:$config['pass'] = $pwd;
self:$config['user'] = $uid;
self:$config['charset'] = $connection_charset;
}
Функция который выполняет подключение к БД.
Листинг 3.2. Функция connect
public static function connect ()
{
self:$conn['con_desc']=mysql_connect (self:$config['host'], self:$config['user'], self:$config['pass']);
if (!self:$conn['con_desc'])
{
return false;
}
else
{
self:$conn['select_db']=mysql_select_db (self:$config['dbase'], self:$conn['con_desc']);
self:$conn['character']=mysql_query («SET NAMES «.self:$config['charset'], self:$conn['con_desc']);
}
return true;
}
Данная функция выполняется при загрузки класса и обеспечивает автоматическое подключение к БД.
Листинг 3.3. Функция Activate
public static function Activate ()
{
include DIR_CONFIG." data.config.php" ;
self:db_conf (DB_HOST, DB_BASE, DB_USER, DB_PASSWORD, DB_CHARSET);
}
Функция который выполняет отключение от БД.
Листинг 3.4. Функция disconnect
static function disconnect ()
{
mysql_close (self:$conn['con_desc']);
return true;
}
Функция который обеспечивает выполнение генерированных запросов.
Листинг 3.5. Функция query
static function query ($sql)
{
if (empty (self:$conn['con_desc']))
{
self:connect ();
}
if (!$result = mysql_query ($sql, self:$conn['con_desc']))
{
return false;
}
else
{
return $result;
}
}
Функция который на основе полученных данных генерирует запрос SQL для удаления.
Листинг 3.6. Функция delete
static function delete ($from,$where='', $field='')
{
if (!$from)
return false;
else
{
$table = $from;
$where = ($where ≠'')? «WHERE $where»: «» ;
return self: query («DELETE FROM $table $where»);
}
}
Функция для генерирования запроса SQL для вывода данных. После генерирования, используя, функцию query выполняет запрос и возвращает результат.
Листинг 3.7. Функция select
static function select ($from,$fields ='*', $where='',$orderby='',$limit='')
{
if (!$from)
return false;
else
{
$table = $from;
$where = ($where ≠"")? «WHERE $where»: «» ;
$orderby = ($orderby ≠"")? «ORDER BY $orderby »: «» ;
$limit = ($limit ≠"")? «LIMIT $limit»: «» ;
return self: query («SELECT $fields FROM $table $where $orderby $limit»);
}
}
Функция для генерирования SQL запроса обновления на основе полученных данных. Возвращает результат работы генерированного запроса.
Листинг 3.8. Функция select
static function update ($fields, $table, $where = «») {
if (!$table)
return false;
else {
if (!is_array ($fields))
$flds = $fields;
else {
$flds = '';
foreach ($fields as $key => $value) {
if (!empty ($flds))
$flds .= «,» ;
$flds .= $key. «=»;
$flds .= «'». $value. «'» ;
}
}
$where = ($where ≠ «»)? «WHERE $where»: «» ;
return self: query («UPDATE $table SET $flds $where»);
} }
Функция для генерирования SQL запроса который выполняет ввод данных. После генерирования используя функцию query выполняет генерированный запрос и возвращает номер добавленной строки.
Листинг 3.9. Функция insert
static function insert ($table,$params)
{
if (!isset ($table))
{
return false;
}
else
{
if (!is_array ($params))
{
$sql = «INSERT INTO $table $params» ;
}
else
{
$keys = array_keys ($params);
$vals = array_values ($params);
$fields = «(„.implode (“ ,» ,$keys).")" ;
$values = «('» .implode («','» ,$vals)." ')" ;
$sql = «INSERT INTO $table $fields VALUES $values» ;
}
}
$r = self: query ($sql);
return self: getInsertId ();
}
3.3 Функции класса getData
Данный класс является абстрактным. В нем имеется функции для ввода и вывода данных. Отличие от класса DB в том что при наследовании нужно указать таблицу который он должен работать.
Функция __construct автоматически работает при загрузки или наследовании класса. При наследовании нужно указать имя таблицы.
Листинг 3.10. Функция construct
public function __construct ($table_name)
{
if (isset ($table_name))
{
$this->table = $table_name;
}
else
{
return «EXIST_PARAMETERS» ;
}
}
Ниже приведенная функция позволяет выводить данные из таблицы. Имеется 4 параметра:
· $field — данном параметре можно указать поля таблицы
· $where — данный параметр позволяет выводить данные по условию
· $order_by — можно указать поля для сортировки и тип сортировки
· $limit — количество выводимых данных
Листинг 3.11. Функция getValue
public function getValue ($field,$where="" ,$order_by="" ,$limit="")
{
if (isset ($field))
{
if (isset ($this->table))
{
$result = db: select ($this->table,$field,$where,$order_by,$limit);
if (!$result)
{
return array ();
}
elseif (mysql_num_rows ($result)==1)
{
return mysql_fetch_assoc ($result);
}
else
{
$res = array ();
while ($e = mysql_fetch_assoc ($result))
{
$res[] = $e;
}
return $res;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
Функция для ввода данных. Имеет один параметр который принимает тип массив.
Листинг 3.12. Функция addValue
public function addValue ($params)
{
if (is_array ($params))
{
return db: insert ($this->table,$params);
}
else
{
return false;
}
}
Функция setValue выполняет обновление данных таблицы. Здесь нужно указать имя поля таблицы и условие обновления.
Листинг 3.13. Функция addValue
public function setValue ($params,$where)
{
if (is_array ($params))
{
if (isset ($where))
{
return db: update ($params,$this->table,$where);
}
else
{
return «EXIST_PARAM_WHERE» ;
}
}
else
{
return «NOT_IS_ARRAY» ;
}
}
Функция delValue который имеет параметр $where позволяющий удалить данные. Для удаления надо указать имя значения. Функция принимает параметр where и тут можно указать имя значения и после значения удаляется.
Листинг 3.11. Функция addValue
public function delValue ($where)
{
if (isset ($where))
{
return db: delete ($this->table,$where,$field);
}
else
{
return «EXIST_PARAMS» ;
}
}
3.4 Функции класса data
Данный класс имеет одну функцию Activate который при загрузки выполняет наследование класса getData.
Листинг 3.12. Функция addValue
public static function Activate ()
{self:$user = new getData («user»);
self:$user_info = new getData («user_info»);
self:$rights = new getData («rights»);
self:$comments = new getData («comments»);
self:$pages = new getData («pages»);
self:$file = new getData («files»);
self:$type = new getData («types»);
self:$settings = new getData («settings»);
self:$online = new getData («online»);
self:$poseshenie = new getData («poseshenie»);
self:$templates = new getData («templates»); }
3.5 Классы типа контроллер
Данная система создано полностью строится из классов. Это позволяет обеспечить гибкость системы. Любое время можно изменять классы или, добавлять классы, расширяя возможности системы. С целью достижения гибкости системы и простоты взаимодействия классов необходимо было достичь минимальных действий для использования классов любым компонентом системы без необходимости создания жестких связей, а также сделать возможность легкого расширения действий классов с помощью других классов.
3.6 Класс Eagle
Eagle - системный класс который включается в index.php. выполняет автоматическую загрузку классов системы. Классе созданы следующие функции
Start - функция который запускает все необходимые модули системы и проверяет установлена ли система. Если система не установлено то он запускает установку системы.
Листинг 3.13. Функция start
public static function Start ()
{
проверка на установки системы
self:$is_install = is_file (DIR_CONFIG." data.config.php");
настройка PHP
ini_set ('magic_quotes_gpc', 0);
ini_set ('magic_quotes_runtime', 0);
ini_set ('magic_quotes_sybase', 0);
ini_set ('url_rewriter.tags', '');
ini_set ('register_globals', 0);
регистрация метода обработчика завершения системы
register_shutdown_function (array («eagle» ," Stop"));
загрузка модуля управления модулями
include_once (DIR_CORE." system/module.php");
Актиация модулья
module:Activate («module»);
if (self:$is_install)
{
module:Activate («errors»);
module:Activate («events»);
module:Activate («params»);
module:Activate («db»);
module:Activate («session»);
module:Activate («dbget»);
events:Execute («START»);
}
else
{
Начало установки системы
}
}
3.7 Класс Events
Events - класс который предоставляет возможность классам системы генерировать события. В данном классе реализованы следующие функции
Activate - функция для активации модуля. Он автоматически запускается модулем Module.
Листинг 3.13. Функция start
public static function Activate ()
{
self:LoadHandlers (DIR_CONFIG.self:FILE_HANDLERS);
self:LoadHandlers (DIR_CONFIG.self:FILE_HANDLERS_MODULE);
}
LoadHandlers - функция который загружает реестр событий из конфигурационного файла.
Листинг 3.14. Функция LoadHandlers
public static function LoadHandlers ($config_file)
{
if (is_file ($config_file))
{
include $config_file;
}
else
{
exit («
Критическая ошибка не найден компонент $config_file
«);}
if (isset ($events))
{
self:$handlers = array_merge (self:$handlers, $events);
$ev_name = array_keys ($events);
foreach ($ev_name as $key=>$name)
{
$cnt = sizeof ($events);
for ($i=$cnt;$i<$cnt;$i++)
{
$tmp1 = $events[$name][$i];
$class_name = $tmp1[0];
self:actClass ($class_name);
}
}
}
}
addHandler - служить для создания события который любому модулю системы генерировать события.
Листинг 3.15. Функция LoadHandlers
public static function addHandler ($event_name, $handler_module, $handler_method)
{
self:$handlers[$event_name][] = array ($handler_module,$handler_method);
}
Execute - функция который обработает события. Все событии сохраняется в реестре событий.
Листинг 3.16. Функция Execute
public static function Execute ($event_name,$params=array ())
{
$r = new result ();
if (isset (self:$handlers[$event_name]))
{
$cnt = sizeof (self:$handlers[$event_name]);
for ($i=0;$i<$cnt;$i++)
{
if (!is_array ($params))
{
$params = array ($params);
}
$tmp1 = self:$handlers[$event_name][$i];
$tmp2 = $tmp1[0];
self:actClass ($tmp2);
$r->value = call_user_func_array (self:$handlers[$event_name][$i],$params);} }
return $r;
}
Remove - функция который удаляет указанного события. Для этого нужно указать лишь имя события и он удаляется из системы.
Листинг 3.17. Функция Remove
public static function remove ($name)
{ unset (self:$handlers[$name]);}
actClass - проверка на добавляемого класса. Если класс обрабатывающий данного события не активирован то активирует его.
Листинг 3.18. Функция actClass
public static function actClass ($class_name)
{
if (!module:is_activated ($class_name))
{
module:Activate ($class_name);
}
}
3.8 Класс Session
Session - у данного класса нет ничего особого, он загружается при инициализации класса Eagle, определяет идентификатор сессии пользователя. У класса существует следующие функции:
Activate - этот функция выполняет активацию данного класса т. е. создает условие для работы его функций.
Листинг 3.19. Функция Activate
public static function Activate ()
{
if (empty ($_SESSION[" session" ]))
{
$_SESSION[" session" ] = new params ();}}
getValue - функция который возвращает элемент сессии.
Листинг 3.20. Функция getValue
static function getValue ($name)
{
return $_SESSION[" session" ]->getValue ($name);
}
setValue - функция для добавления элемента к сессии
Листинг 3.21. Функция setValue
static function setValue ($name,$value)
{
return $_SESSION[" session" ]->setValue ($name, new params ($value));
}
delValue - функция для удаления элемента сессии
Листинг 3.22. Функция delValue
static function delValue ($name)
{
return $_SESSION[" session" ]->delValue ($name);
}
endSession - данная функция завершает работу сессии
Листинг 3.23. Функция endSession
static function endSession ()
{
session_destroy ();
}
getHash - функция для получения идентификатора сессии
Листинг 3.23. Функция endSession
static function getHash ()
{
return session_id ();}
3.9 Класс Request
Request - класс запросов, собирает все поступившие данные от пользователя в «контейнер», из которого они будут доступны любому классу системы. У данного класса имеется следующие функции:
Process - функция который собирает все полученные данные от пользователя.
Листинг 3.24. Функция Process
static public function Process ()
{
if (strlen ($_GET[" q" ])<>0)
{
self:$q = explode («=»,$_GET[" q" ]);
if (isset ($_POST))
{
self:$post = new params ($_POST);
}
self:$result = Execute: Process (self:$q);
}
else
{
self:$result=new result (Page:GetPages («page_title='» .settings:getValue («default_page»)." '"));}
events:Execute («VIEW»);}
3.10 Класс Settings
Settings - класс настроек системы, позволяет определять, установить и изменить настройки системы.
Activate - активация класса, функция создает условии для работы остальных функций данного класса
Листинг 3.25. Функция Activate
public static function Activate ()
{
self:GetSettings ();
}
getValue - данная функция позволяет получить настройки системы. Чтобы получить настройку нужно указать имя настройки.
Листинг 3.26. Функция getValue
public static function getValue ($name)
{
return self:$setting->getValue ($name);
}
setValue — функция который изменяет настройку системы
Листинг 3.27. Функция setValue
public static function setValue ($name,$value)
{
$arr[" key" ] = $name;
$arr['value'] = $value;
data:$settings->setValue ($arr," key='$name' and value='$value'");
self:GetSettings ();
}
addValue - функция для добавления новых настроек системы
Листинг 3.28. Функция addValue
public static function addValue ($name,$value)
{
$arr[" key" ] = $name;
$arr['value'] = $value;
return data:$settings->addValue ($arr);
self:GetSettings (); }
GetSettings - функция который получает настройки системы при загрузке класса
Листинг 3.29. Функция GetSettings
private static function GetSettings ()
{self:$setting = new params;
$k = data:$settings->getValue («*»);
foreach ($k as $key=>$value)
self:$setting->setValue ($value[" key" ],$value['value']);}
3.11 Класс Execute
Execute - один из системных классов который определят тип полученных запросов и запускает модули обрабатывающий данный запрос.
Activate - функция который создает условие для работы функций класса.
Листинг 3.30. Функция Activate
public static function Activate ()
{
self:$types = new getData («module_types»);
}
Process - функция который определяет обработчик запроса который получено от пользователя и генерирует нужную событию. После чего выполняет и возвращает.
Листинг 3.31. Функция Process
public static function Process ($value)
{
if (isset ($value))
{
$m = $value[0];
self:$type= new params (self:$types->getValue («*» ," type='" .$value[0]. «'»));
if (!self:$type)
{
request:$q = array («page»);
self:$type = new params (self:$types->getValue («*» ," type='page'"));
}
if (module:is_install (self:$type->getValue («module_name»)))
{
module:Activate (self:$type->getValue («module_name»));
}
else
{
if (file_exists (DIR_MODULES.self:$type->getValue («file»)))
{
module:addModule (self:$type->getValue («name»), DIR_MODULES.self:$type->getValue ('file'));
module:Activate (self:$type->getValue («name»));
}
}
unset ($value[0]);
events:addHandler («EXECUTE», self:$type->getValue («module_name»), self:$type->getValue ('function_name'));
$result = events: Execute («EXECUTE» ,$value);
return $result;
}
}
}
3.12 Класс Params
Params - класс используется как «контейнер» для хранения данных и для передачи внутри системы. Все функции реализованные в классе является статическими Класс имеет следующие функции:
__construct - функция который запускается при загрузки и наследовании. Он позволяет вводит данные при загрузке и наследовании.
Листинг 3.32. Функция __construct
function __construct ($value=array ())
{
$this->list = $value;
}
setValue - функция который добавляет данные. Для добавления нужно указать два параметра первый указывает имя входящих данных, второй значение.
Листинг 3.33. Функция setValue
public function setValue ($name,$value)
{
if (isset ($name) and isset ($value))
{
$this->list[$name] = $value;
}
else
{
return «EXIST_PARAMS»; } }
getValue - функция который возвращает данные. Указывается имя возвращаемого значения. Функция проверяет если значение является массивом то его преобразует в класс Params, если скалярное значение то возвращает его.
Листинг 3.34. Функция getValue
public function getValue ($name)
{
if (isset ($name))
{
if (is_array ($this->list[$name]))
{
$this->list[$name] = new params ($this->list[$name]);
}
if ($this->list[$name] instanceof params)
{
return $this->list[$name];
}
if (is_scalar ($this->list[$name]))
{
return $this->list[$name];
}
}
}
delValue - функция удаляет указанное значение
Листинг 3.35. Функция getValue
public function delValue ($name)
{
unset ($this->list[$name]); }
getArray - преобразует все данные в ассоциативный массив
Листинг 3.36. Функция getArray
public function getArray ()
{return $this->list;
}
3.13 Класс Module
Module — модуль для управления модулями системы. Выполняет автоматически запуск функций Activate который имеют все модули.
Activate - данная функция позволяет автоматическую загрузки модулей (классов) системы.
Листинг 3.37. Функция Activate
static function Activate ($class_name)
{
if ($class_name=="module")
{
// активация самого модулья
self:$activated = array ();
self:$classes = array ();
self:LoadConfig (DIR_CONFIG." config.core.php", DIR_CORE);
self:LoadConfig (DIR_CONFIG." config.modules.php", DIR_MODULES);
// регистрация метода обработчика автозагрузки модулей
spl_autoload_register (array («module» ,'Activate'));
}
else
{
if (!isset (self:$classes[$class_name]))
{
обработчик ошибок
}
else
{
include_once (self:$classes[$class_name]);
self:$activated[$class_name][] = $class_name;
if (eagle:$is_install && method_exists ($class_name," Activate"))
{
call_user_func (array ($class_name,'Activate'));
}
}
}
}
LoadConfig - функция загружает конфигурационные файлы, который содержит данные о модулях и классах системы.
Листинг 3.38. Функция LoadConfig
public static function LoadConfig ($config_file, $base_dir){
if (is_file ($config_file))
{
include $config_file;
}
else
{
exit («
Критическая ошибка. Дальнейшая работы системы невозможна. Не найдены $config_file.
«);}
if (isset ($modules)){
foreach ($modules as $name => $path)
{
self:$classes[$name] = $base_dir.$path;
}
}
}
листинг данные сообщение почта
3.14 Классы типа просмотр
Классы данного типа отвечают за внешний вид и выводом обработанных данных. Все классы приведенные наверху являются системными, они обеспечивают работоспособность других классов. Кроме этих классов имеется классы который называется модулями. Модуль в терминах данной системы — это статический класс, имя которого определяется именем модуля. Все функции классов является статическими и использование статических функция позволяет их использовать во всех местах системы т. е. классах.
3.15 Класс Templates
Templates - модуль для работы с шаблонами, обеспечивает ввод и вывод данных шаблонов системы. Классе имеется следующие функции.
LoadTemplateList - функция загружает список всех шаблонов системы.
Листинг 3.39. Функция LoadTemplatesList
private static function LoadTemplateList ()
{
if ($result=data:$templates->getValue («*»))
{
self:$tpls = new params ();
foreach ($result as $key=>$vaue)
{
self:$tpls->setValue ($value («template_name» ,$value));
}
}
else
{
return false;
}
}
GetTemplatePath - функция который позволяет получить шаблог который установлен по умолчанию.
Листинг 3.40. Функция GetTemplatePath
public static function GetTemplatePath ()
{
return DIR_TEMPLATES.settings:getValue («default_template»);
}
addTemplate - функция для добавления шаблона в систему.
Листинг 3.41. Функция addTemplate
public static function addTemplate ()
{
$templates = request:$post;
if (isset ($templates))
{
$k['template_name'] = $templates->getValue («name»);
$k[" template_path" ] = $templates->getValue («path»);
$k[" template_author" ] = $templates->getValue («author»);
data:$templates->addValue ($k);
}
else
{
return false;
}
}
setDefaultTemplate - данная функция позволяет установит выбранный шаблон для системы.
Листинг 3.42. Функция setDefaultTemplate
public static function setDefaultTemplate ($name)
{
self:LoadTemplateList ();
$t = self:$tpls->getValue ($name);
settings:setValue («template_name» ,$t->getValue («template_path»));
}
LoadTemplate - функция загружает шаблон который установлен по умолчанию.
Листинг 3.43. Функция LoadTemplate
public static function LoadTemplate ()
{includeDIR_TEMPLATES.settings:getValue («default_template»)." index. php" ;
}
Ниже показано пример работы класса template. Данный класс включает шаблон системы который установлен. Если шаблон не существует то включается шаблон который системе имеется по умолчанию. В этом случи показано шаблон который установлен по умолчанию.
Рис. 3.1 Главная страница
3.16 Класс Render
Render - модуль который генерирует html страницу на основе шаблонов и заданных данных.
HTML - функция генерирует html страницу методом подстановки используя регулярных выражений.
Листинг 3.44. Функция HTML
public static function HTML ($arrays,$tpl)
{
$html = «» ;
if (file_exists ($tpl))
{
$handler = fopen ($tpl," r");
$text = fread ($handler, filesize ($tpl));
fclose ($handler);
if (is_array ($arrays))
{
if (isset ($arrays[0]))
{
foreach ($arrays as $key=>$value)
{
$html.=self:replace ($value,$text);
}
}
else
{
$html = self: replace ($arrays,$text);
}
return $html;
}
else
{
return false;
}
}
else
{
return false;
}
}
Replace - функция который заменяет все ключевые слова заданный в шаблоне на обработанные данные.
Листинг 3.45. Функция replace
public static function replace ($array,$text)
{
$rtext="" ;$stext="" ;
foreach ($array as $key=>$value)
{
$text = preg_replace («/{» .$key." }/" ,$value,$text);
}
return $text; }
Ниже показано пример шаблона, который используется в системе. Шаблон сохраняется в формате *.tpl. Чтобы вывести нужную информацию надо написать поля таблицы из БД в фигурных скобках
Листинг 3.46. Шаблон для вывода страниц
{page_title}
{page_content}
Дата добавления: {page_created_time}
Данном изображении показано результат работы функции Render и шаблона content. tpl
Рис. 3.2. Пример работы функции Render и шаблона content. tpl
3.17 Класс Magazine
Magazine - модуль магазина для данной системы. Позволят ввод и вывод данных, покупку, позволяет управлять корзиной пользователя.
Activate - функция который выполняет наследование класса getData для переменных.
Листинг 3.47. Функция Activate
public static function Activate ()
{
self:install ();
self:$tovari = new getData («eagle_tovar»);
self:$manufacturer = new getData («eagle_manufacturers»);
self:$basket = new getData («eagle_basket»);
self:$catalog = new getData («catalog»);
}
LoadLastNews - функция который загружает все товары который добавлен последними.
Листинг 3.48. Функция LoadLastNews
public static function LoadLastNews ()
{
self:$LastNewsList=self:$tovari->getValue («*» ," publication_date='" .date («Y-m-d H: m:s»)." ' and status ='1'" ," addition_date desc" ," 10″);
return self:$LastNews;
}
LoadListTovar - данная функция позволяет загрузить список товаров из определенной категории.
Листинг 3.49. Функция LoadListTovar
public static function LoadListTovar ($id_catalog)
{
$k = self:$tovari->getValue («*» ," id_type=$id_catalog");
return $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
eagle_tovar.id_tovar
catalog.name
eagle_tovar.price
eagle_tovar.count
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
FROM
eagle.eagle_tovar
eagle. eagle_manufacturers
eagle. eagle_basket
eagle. catalog
WHERE (eagle_tovar.id_type=catalog.id_catalog
AND eagle_tovar.id_manufacturer=eagle_manufacturers.id_manufacture $id_tovar) $sort $count;" ;
$results = mysql_query ($sql);
if (!$results)
{
return false;
}
else
{
while ($res = mysql_fetch_assoc ($result))
{
self:$ListTovar[] = $res;
}
}
}
LoadCatalog — загрузка списка каталога.
Листинг 3.51. Функция LoadCatalog
public static function LoadCatalog ()
{
self:$ListKatalog = self:$catalog->getValue («*»);
return self:$ListKatalog;
}
LoadBasketUser - функция который выполняет загрузку списка производителей.
Листинг 3.52. Функция LoadListmanufacturers
public static function LoadListManufacturer ()
{
self:$ListManufaturer = self:$manufacturer->getValue («*»);
return self:$ListManufaturer;
}
LoadBasketUser - функция который, позволяет загрузить данные корзины указанного пользователя.
Листинг 3.53. Функция LoadBasketUser
public static function LoadBasketUser ($user_id)
{
self:$ListBasket=self:$basket->getValue («*» ," user_id=$user_id" ," purchasing date DESC");
}
DeleteBasket - функция для удаления данных из корзины. При использовании данной функции данные удаляется из корзины текущего пользователя.
Листинг 3.54. Функция DeleteBasket
public static function DeleteBasket ()
{
if (user:rights ()<>0)
{
if (isset (request:$post))
{
if (request:$post->is_isset («delete_basket»))
{
return self:$basket->delValue («id_basket='» .request:$post->getValue («delete_basket»)." '");
}
}
}
}
Addbasket - данная функция добавляет данные в корзину текущего пользователя.
Листинг 3.55. Функция AddBasket
public static function AddBasket ()
{
if (user:rights ()<>0)
{
if (isset (request:$post))
{ $post = request:$post;
if ($post->is_isset («submit»))
{
$post->delValue («submit»);
$post->setValue («user_id», user: id ();)
return self:$basket->addValue ($post->getArray ());
}
}
}
}
3.18 Класс Page
Page - Данный модуль позволяет вывести страницы и выполнять поиск страниц.
GetPages - Функция для вывода страниц. Этот функция имеет 3 параметра и с помощью этих можно определят количество, порядок и страницу.
Листинг 3.56. Функция GetPages
public static function GetPages ($where,$orderby="" ,$limit="")
{
if (!$result = data:$pages->getValue («*» ,$where,$orderby,$limit))
{
return $result[0] = data:$pages->getValue («*» ," page_id='" .settings:getValue («default_page»)." '");
}
else
{
return $result;
}
}
Load - функция который загружает страницу по названию
Листинг 3.57. Функция Load
public static function Load ($title)
{
$result = data:$pages->getValue («*» ," page_title='$title'");
if (!$result)
{
echo mysql_error ();
return data:$pages->getValue («*» ," page_id='" .settings:getValue («default_page»)." '");
}
else
{
return $result;
}
}
GetArrayPages - функция тоже аналогично к функцию GetPages. Отличие в том у него есть еще один параметр, который позволяет выполнить поиск по сайту.
Листинг 3.58. Функция GetArrayPages
public static function GetArrayPages ($text,$orderby="" ,$limit="" ,$groupby="")
{
self:$p = new params ();
self:$a = new params ();
$where = ($where ≠"")? «WHERE page_title LIKE '*$text*' OR page_subtitle LIKE '*$text*'
OR 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);
if (!$res)
{
while ($result = mysql_fetch_assoc ($res))
{
$r[] = $result;
}
}
return $r;
}
3.19 Класс Auth
Auth - модуль который, обеспечивает авторизацию и выход пользователя из системы.
Authenticate - функция для авторизации пользователя.
Листинг 3.59. Функция Authenticate
public static function Authenticate ()
{
if (!isset (request:$post))
{
return false;
}
else
{
$login = request:$post->getValue («login»);
$password = request:$post->getValue («password»);
if (!isset ($login) or! isset ($password))
{
return false;
}
else
{
$result = data:$user->getValue («*» ," user_login='$login' and user_password='$password'");
if (!$result)
{
session: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 ()
{
self:GetDefaultUser ();
}
GetDefaultUser - функция который загружает данные пользователя установленный по умолчанию.
Листинг 3.62. Функция GetDefaultUser
private static function GetDefaultUser ()
{
if (!session:is_isset («user»))
{
session:setValue («user», data:$user->getValue («*» ," user_login='guest'"));
self:$u = session: getValue («user»);
$uid = self:$u->getValue («user_id»);
session:setValue («user_info», data:$user->getValue («*» ," user_id='$uid'"));
self:$ui= session: getValue («user_info»);
}
}
Login - функция который возвращает логин текущего пользователя.
Листинг 3.63. Функция Login
public static function login ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_login»);
}
Password - функция который возвращает пароль текущего пользователя.
Листинг 3.64. Функция Password
public static function password ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_password»);
}
Hash - функция который возвращает хеш-код текущего пользователя.
Листинг 3.65. Функция hash
public static function hash ()
{self:GetDefaultUser ();
return self:$u->getValue («user_hash»); }
Auth_time - функция который возвращает дата и время который пользователь вошел в систему.
Листинг 3.66. Функция auth_time
public static function auth_time ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_auth_time»);
}
Status - возвращает значение 0 или 1. 0 означает что текущий пользователь не активирован, 1 означает что текущий пользователь активирован.
Листинг 3.67. Функция status
public static function status ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_status»);
}
Rights - функция который можно определить права доступа текущего пользователя.
Листинг 3.68. Функция rights
public static function rights ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_rights»);
}
Email - функция который возвращает адрес электронной почты текущего пользователя.
Листинг 3.69. Функция ip
public static function email ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_mail»);
}
RegistratedDate - данная функция возвращает дату регистрации текущего пользователя.
Листинг 3.70. Функция RegistratedDate
public static function RegistratedDate ()
{
self:GetDefaultUser ();
return self:$u->getValue («user_reg_date»);
}
Img - функция который возвращает путь к картинке пользователя.
Листинг 3.71. Функция img
public static function img ()
{
self:GetDefaultUser ();
if (!self:$ui->is_isset («user_img»))
{
return settings: getValue («user_img»);
}
else
{ return self:$ui->getValue («user_img»); } }
3.21 Класс Registration
Registration — модуль для регистрации нового пользователя. Данный модуль обработается событием register при регистрации нового пользователя.
Process - функция который выполняет проверку данных полученные от пользователя и если все данные правильны то сохраняет в БД.
Листинг 3.72. Функция Process
public static function Process ()
{
self:$newuser[" user_login" ]= check: login (self:$post->getValue («login»));
self:$newuser[" user_password" ] = check: password (
self:$post->getValue («password1»),
self:$post->getValue («password2»)
);
self:$newuser[" user_hash" ] = session: getHash ();
self:$newuser[" user_auth_time" ] = date («Y-m-d H: m:s»);
self:$newuser[" user_pol" ] = self:$post->getValue («pol»);
self:$newuser[" user_rights" ] = «1» ;
self:$newuser[" user_status" ] = «0» ;
self:$newuser[" user_mail" ] = check: mail (self:$post->getValue («mail»));
self:$newuser[" user_ip" ] = $_SERVER[" REMOTE_ADDR" ];
self:$newuser[" user_reg_date" ] = date («Y-m-d H: m:s»);
foreach (self:$newuser as $key=>$value)
{
if ($value==false)
{
return implode («, rn», check:$log);
exit;
}
}
data:$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 Для активации нажмите
Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение
$reply = settings: getValue («reply_email»);
Mail:Send ($mail,$subject,$message,$from,$reply);
Mail:Complete ();
}
3.23 Класс Search
Search - класс позволяет осуществит поиск по страницам сайта. Он выполняет поиск по названию, ключевым словам и содержимым. Классе созданы две функции:
Activate — создает необходимые условия для выполнения функции run
Листинг 3.74. Функция Activate
public static function Activate ()
{
if (isset (request:$post))
{
self:$post = request:$post;
}
else
{
self:$post = false;
}
}
Run - функция который выполняет поиск по страницам сайта.
Листинг 3.75. Функция Run
public static function run ()
{
if (self:$post)
{
request:$q[0] = «page» ;
self:$search_result = Page: GetArrayPages (self:$post->getValue («search_text»)," page_created_date DESC" ," 10″);
if (!is_array (self:$search_result[0]))
{
self:$search_result = data:$pages->getValue («*» ," page_id='" .settings:getValue («default_page»)." '");
}
return self:$search_result;
}
else
{
return false;
}
}
Ниже приведено результат работы класса Search
Рис. 3.3 Результат работы поиска
ЗАКЛЮЧЕНИЕ
В процессе разработки данной системы я изучил, как работать с классами и как правильно организовать взаимодействие классов. Я научился как создать проект системы с использованием UML, так как для того чтобы начать разработку данной системы мне пришлось создать его проект. Больше узнал о возможностях PHP, которые еще не изучил. Разработке программного продукта дает возможность от написания кода несколько раз и сэкономит время.
Поэтому я создал данную систему на уровне ООП, и я больше узнал о возможностях использования классов для создания программных продуктов. Научился как работать с статическими функциями и возможности их использования. Кроме этих во время разработки я использовал веб — сервер Apache и СУБД MySQL. После этого я научился как пользоваться веб — сервером Apache, как настраивать и как работают файлы.htaccess.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Г. Кен, М. Гильберт «Программирование на Visual Basic и VBA», Киев, 2000 г. — 410 стр.
2. Хомоненко А. Д., Цыганков В. М., Мальцев М. Г. Базы данных: Учебник для высших учебных заведений /Под ред. Проф.А. Д Хоменко. СПб.: КОРОНА, 2000 г.- 416 стр
3. Е. Петрусос «Visual Basic 6.0». СПб. 2000 г. — 250 стр.
4. С. В. Глушаков, А. С. Сурядный «Программирование на VB6» СПб. 2002 г — 497 стр.
5. Т. С. Карпова, «Базы данных: модели, разработка, реализации», СПб. 2002 г. — 304 стр.
- Сессия? Спокойно!
- Цены
- Оставить заявку
- Мы
- Контакты