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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ВВЕДЕНИЕ

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

<a href='http: //". SITE_DOMAIN. «'>Активация</a></br>

Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение;

$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 («< center><h1>Критическая ошибка не найден компонент $config_file< /h1></center>»);

}

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 («< center><h1>Критическая ошибка. Дальнейшая работы системы невозможна. Не найдены $config_file. < /h1></center>»);

}

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. Шаблон для вывода страниц

< 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 ()

{

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 Для активации нажмите

<a href='http: //". SITE_DOMAIN. «'>Активация</a></br>

Вам пришло этот сообщение потому что вы регистрировались в нашем сайте. Если это не вы тогда просто удалите данное сообщение

$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 стр.

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