Помощь в написании студенческих работ
Антистрессовый сервис

Разработка системы управления содержимым

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

В процессе разработки данной системы я изучил, как работать с классами и как правильно организовать взаимодействие классов. Я научился как создать проект системы с использованием 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 стр.

Показать весь текст
Заполнить форму текущей работой