Система CMS

Автор: Пользователь скрыл имя, 13 Марта 2012 в 21:41, дипломная работа

Описание работы

Процесс создания сайта требует от разработчика определённого набора знаний в области программирования, проектирования дизайна, если цель – создание оригинального продукта со спектром оригинальных функций.

Работа содержит 1 файл

Записка CMS.doc

— 1.70 Мб (Скачать)
gin:12pt 0pt 3pt">3.1 Язык программирования

PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста») — скриптовый язык программирования, созданный для генерации HTML-страниц на веб-сервере и работы с базами данных. В настоящее время поддерживается подавляющим большинством хостеров. Входит в LAMP — «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)).

В области программирования для Сети PHP — один из популярнейших скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. PHP отличается наличием ядра и подключаемых модулей, «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и т. п. Любой желающий может разработать своё собственное расширение и подключить его. Существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Интерпретатор PHP подключается к веб-серверу либо через модуль, созданный специально для этого сервера (например, для Apache или IIS), либо в качестве CGI-приложения.

Кроме этого, он может использоваться для решения административных задач в операционных системах UNIX, GNU/Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript.

Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.

Ныне PHP используется сотнями тысяч разработчиков. Несколько миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета.

3.2 База данных

MySQL — это система управления реляционными базами данных. Работа с данными в базах осуществляется при помощи запросов, написанных на языке SQL (Structured Query Language) — структурированном языке запросов. MySQL обеспечивает удобный интерфейс к связанным данным и позволяет проводить с информацией операции, недоступные с обычными файлами, например поиск, сортировка, агрегирование. MySQL получил распространение в основном как быстрая, надежная база данных для web-ресурсов. Гостевые книги, форумы, интернет-магазины и многие другие задачи решаются с помощью MySQL. Распространяется под GNU General Public License или под собственной коммерческой лицензией. Помимо этого разработчики создают функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.

Перечислю основные приятные стороны пакета MySQL.

      Многопоточность. Поддержка нескольких одновременных запросов.

      Оптимизация связей с присоединением многих данных за один проход.

      Записи фиксированной и переменной длины.

      ODBC драйвер в комплекте с исходником

      Гибкая система привилегий и паролей.

      До 16 ключей в таблице. Каждый ключ может иметь до 15 полей.

      Поддержка ключевых полей и специальных полей в операторе CREATE.

      Поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени.

      Интерфейс с языками C и perl.

      Основанная на потоках, быстрая система памяти.

      Утилита проверки и ремонта таблицы ( isamchk).

      Все данные хранятся в формате ISO8859_1.

      Все операции работы со строками не обращают внимания на регистр символов в обрабатываемых строках.

      Псевдонимы применимы как к таблицам, так и к отдельным колонкам в таблице.

      Все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей.

      Легкость управления таблицей, включая добавление и удаление ключей и полей.

3.3 Веб-сервер

Apache HTTP-сервер  — свободный веб-сервер.

Apache является кроссплатформенным ПО, поддерживает операционные системы Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS.

Основными достоинствами Apache считаются надёжность и гибкость конфигурации. Он позволяет подключать внешние модули для предоставления данных, использовать СУБД для аутентификации пользователей, модифицировать сообщения об ошибках и т. д. Поддерживает IPv6.

Система конфигурации Apache основана на текстовых конфигурационных файлах. Имеет три условных уровня конфигурации:

      Конфигурация сервера (httpd.conf).

      Конфигурация виртуального хоста (httpd.conf c версии 2.2 extra/httpd-vhosts.conf).

      Конфигурация уровня директории (.htaccess).

Apache HTTP Server поддерживает модульность. Существует более 500 модулей, выполняющих различные функции. Модули могут быть, как включены в состав сервера в момент компиляции, так и загружены динамически, через директивы конфигурационного файла. В модулях реализуются такие вещи, как:

Поддержка языков программирования.

Добавление функционала.

Исправление ошибок или модификация основных функций.

Усиление безопасности.

Существует множество модулей, добавляющих к Apache поддержку различных языков программирования и систем разработки.


4. Разработка программного комплекса для управления контентом сайта

Основная задача дипломного проекта создание системы, которая упростит создание сайта в целом, БД для него, его редактирование, а так же внешнее оформление.

Задачи, решенные при создании системы:

–             инсталлятор системы, с формированием БД;

–             шаблон вывода контента из базы данных на страницу;

–             панель для добавления этого самого контента;

–             панель редактирования контента;

–             поддержка рассылки новостей(RSS-канал);

–             поддержка комментариев;

–             шаблонизатор;

–             сепаратор рубрик;

–             присутствие капчи для неавторизованных пользователей;

–             загрузка файлов на сервер;

–             редактор пользователей;

–             чпу для страниц, статей и компонентов;

–             многоязычность;

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

Схема работы CMS изображена на рис.4.1. Шаблон первичен, он является активной структурой, подключает необходимые программные компоненты по мере надобности, а те в свою очередь, извлекают нужную информацию из базы данных.

Рис.4.1 Схема работы CMS

 

Талицы БД в системе формируются в скрипте install.php, их структура представлена на рис.4.2

Рис.4.2 Таблица categories

 

Поле Category_id в в таблице категорий имеет флаги AUTO_INCREMENT и PRIMARY, уникальные идентификаторы используются для сортировки.

Описание основных элементов системы:

1.      Модули

Для расширения базового функционала я добавил систему модулей, они являются мини-компонентами и используются основным шаблоном по его усмотрению.

Рис.4.3 Таблица Modules

 

Модули хранятся в базе данных в таблице modules (рис.4.3), подключаются они по средствам функции get_module_list:

function get_module_list() {

// Открываем каталог и выходим в случае ошибки.

  chdir("mod");

  $d = @opendir(".");

  if (!$d) return;

  while (($e=readdir($d)) !== false) {

    // Игнорируем элементы .. и .

    if ($e=='.' || $e=='..') continue;

    // Нам нужны только подкаталоги.

    if (!@is_dir($e)) continue;

    $mod[] = $e;

    flush();

  }

closedir($d);

chdir("..");

return $mod;

}

И в index.php это выглядит так:

$mod = get_module_list();

              foreach ($mod as $module) {

                            $path = 'mod/'.$module.'/view.php';

                            if (file_exists($path)) require_once ($path);

              }

Таким образом мы подключили программную основу, функции и обработчики.

2.      Сепаратор рубрик

Для создания системы новостей на сайте требуются отдельная таблица в БД, отдельный редактор и отдельные функции. В моем случае уже все есть в системе статей. Осталось создать отдельную рубрику для новостей и выводить ее где надо и когда надо. Сначало добавляем в таблицу рубрик (categories) новое поле type. По умолчанию все категории имеют тип <> - пустая строка. Далее пишем модуль separator, который будем обрабатывать типизированные категории и затем их сепарировать по признаку type:

<?php

*              $cat_id - идентификатор категории;

*              $start - столько статей пропустить;

*              $stop - столько взять.

* * * * * */

$mod_separator = true; //модуль подключен

 

### Функция возвращает список записей

### определенной категории.

 

function separator_list ($cat_id, $start, $stop){

              $result = mysql_query('

              SELECT *, UNIX_TIMESTAMP(stamp) AS stamp

              FROM '.PREFIX.'article

              WHERE category_id = "'.intval($cat_id).'" AND approve=1

              ORDER BY stamp DESC LIMIT '.$start.', '.$stop.'

              ') or die(mysql_error());

              for ($db=array(); $row2=mysql_fetch_assoc($result); $db[]=$row2);

              return $db;

}

 

### Функцмя возвращает список

### уникальных идентификаторов (category_id)

### категорий определенного типа.

 

function separator_type ($type){

              $result = mysql_query('

              SELECT category_id FROM '.PREFIX.'categories

              WHERE type = "'.$type.'"

              ORDER BY category_id

              ') or die(mysql_error());

              for ($db=array(); $row2=mysql_fetch_assoc($result); $db[]=$row2);

              return $db;

}

?>

3.      Система комментариев

Структура таблицы comment выглядит следующим образом (рис.4.4):

Рис.4.4 Таблица comment

 

К определенной статье мы привязываемся по средствам ее идентификатора (поле article_id). Сам модуль:

<?php

if (

                            (isset($_REQUEST['new_comment'])) &&

                            (isset($_SESSION['login'])) &&

                            ($_REQUEST['my_comment'] !== '') &&

                            ($_REQUEST['sid'] == $_SESSION['sid'])

              )

              {

                            $_REQUEST['my_comment'] = mysql_escape_string(htmlspecialchars($_REQUEST['my_comment']));

                            $sql = mysql_query('INSERT  into te_comment (article_id, author_id, author, content, date)

                                          values (

                                                        "'.$_REQUEST['id'].'",

                                                        "'.$_SESSION['author_id'].'",

                                                        "'.$_SESSION['name'].'",

                                                        "'.$_REQUEST['my_comment'].'",

                                                        "'.date("d.m.Y H:i").'"

                                                        );

                                          ')or die(mysql_error());

                            $_REQUEST['my_comment'] = '';

              }

 

//функция формирует список комментариев для данной статьи

function get_comments (){

              $result = mysql_query('

              SELECT * FROM te_comment WHERE article_id = "'.intval($_REQUEST['id']).'"

 

              ORDER BY id

              ') or die(mysql_error());

              for ($db=array(); $row2=mysql_fetch_assoc($result); $db[]=$row2);

              return $db;

}

?>

Функция get_comments() используется в шаблоне, а именно в том месте, где выводим одиночную запись. Т.е. у нас есть $_REQUEST[‘id’] − переданный в адресной строке идентификатор статьи – функция его получает и делает выборку комментариев. Остается только Шаблону получить список комментариев и вывести его по своему вкусу.

4.      Загрузка файлов на сервер

Для решения этого вопроса требуется multipart-форма в Шаблоне и функция-обработчика этой формы:

<?php

 

function upload_file($max_size=3145728) {

              if ($_FILES)

              {

                            switch ($_FILES['filename']['type'])

                            {

                                          case 'image/jpeg':              $ext='jpg'; break;

                                          case 'image/pjpeg':              $ext='jpg'; break;

                                          case 'image/png':              $ext='png'; break;

                                          default:                                          $ext='';

                            }             

                            if ($ext == true && $_FILES['filename']['size'] < $max_size)

                            {

                                          $file=time().'.'.$ext;

                                          $m=move_uploaded_file ($_FILES['filename']['tmp_name'], TE_DIR.'/upload/user/'.$file);

                                          if ($m) $mes='Файл загружен.';

                                          else $mes='Ошибка. Возможно не хватает прав доступа.';

                            }

                            else $mes='Ошибка. Тип файла не поддерживается или его размер больше допустимого.';

              }

              return $mes;

}

?>

У функции upload_file() всего один необязательный параметр – максимальный размер загружаемого файла в байтах. Функция возвращает сообщение об успешности выполнения загрузки. Глобальный массив $_FILES содержит информацию о загружаемых файлах, далее проверяем тип файла. 

Информация о работе Система CMS