Система CMS

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

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

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

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

Записка CMS.doc

— 1.70 Мб (Скачать)

5.      ЧПУ

Для статей:

http://sait/?id=XX
http://sait/article/чпу-для-статьи

Для страниц:

http://sait/?s=XX
http://sait/чпу-для-страницы

Для Компонентов:

http://sait/?page=component_name
http://sait/component_name

Вся информация о записях храниться в массиве, полученном какой-то функцией, скажем в $article_list, тогда идентификатор – это ключ “id”, ЧПУ – “sef”.

6.      Многоязычность

В библиотеку [lib/lang] складываем скрипты, в которых объявлен массив ответов ядра на нужном языке. В этой же библиотеке лежит файл func.php, в котором объявлены необходимые функции для работы с языками:

<?php

 

$lang_list = array();

$lang_list[0] = 'russian';

$lang_list[1] = 'english';

 

 

## Получаем массив из языкового файла.

function get_lang_array() {

global $lang_list;

 

              if (!isset($_SESSION['lang'])) $lang = 0;

              else $lang = intval($_SESSION['lang']);

 

              if (isset($_REQUEST['lang'])) {

                            $lang = intval($_REQUEST['lang']);

                            $_SESSION['lang'] = $lang;

              }

              $path = TE_DIR.'/lib/lang/'.$lang_list[$lang].'.php';

              if (file_exists($path)) include ($path);

              else include (TE_DIR.'/lib/lang/'.$lang_list[0].'.php');

 

              return $_LANG;

}

 

## Возвращаем строку языкового массива.

function my_lang($p) {

              $_LANG = get_lang_array();

              return $_LANG[$p];

}

 

?>

Задаем список нужных языков, первый в списке стоит по умолчанию. Далее нам нужна функция, которая вернет массив $_LANG из языкового файла. Проверяем наличие элемента “lang” в суперглобальных массивах $_Session и $_Reguest для того, чтобы можно было изменить язык во время сессии, перейдя по ссылке. Если поставить значение land=0 соответственно русский и 1 – английский, цифры используются для безопасности. Intval() превратит то, что передано в ссылке в тип integer, после чего мы уже спокойно подключаем файл из имеющегося списка. Функция my_lang($p), используется в компонентах, она возвращает один элемент из языкового списка $_LANG. Эта функция для начала получает нужный список, строку выбирает по ключу, заданному как параметр $p.

4.2 Разработка интерфейса пользователя

Структура Админ-панели выглядит примерно так (рис.4.5):

Рис.4.5 Стурктура панели управления CMS

 

Головной файл index.php при необходимости подключает либо скрипт вывода списка статей list.php (с выбором действий над ними), либо редактор отдельной записи editor.php. Оба эти компонента используют библиотеку lib.php, в которой, мы объявляем функции общего назначения. Кроме того, для администрирования есть отдельная микро библиотека admin_lib.php, где будут храниться функции Админ-панели. Листинг скрипта admin.php находится в приложении 1.

Внешний вид формируется за счет пассивных шаблонов, за их действия отвечает модуль SkinParser (рис.4.6). Основную страницу меняем следующим образом, заменяя код страницы спец. тегами:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>

    <link href="<%path%>style.css" rel="stylesheet" type="text/css"/>

              <%header%>

  </head>

<body>

  <div id="main">

 

    <div id="topmenu">

      <%menu%>

    </div>

 

    <div id="header">

      <span class="title">Tractor <span class="darktitle">Engine</span> 013</span><br/>

    </div>

 

  <div id="lefty">

    <div class="menu">

      <a href="/?page=article">Статьи</a>

      <a href="http://codegust.com/te2/?page=download_module">Модули</a>

      <a href="http://codegust.com/te2/?page=download_theme">Шаблоны</a>

    </div>

  </div>

 

  <div id="righty">

    <div class="menu">

      <a href="http://codegust.com">Блог</a>

      <a href="http://codegust.com/te2">Сайт движка</a>

    </div>

              <form class="menu" method="post" action="index.php?page=subscription" name="avtor">              <p>

              Рассылка:<br>

 

              <input class="comment" name="email"><br/>

              <input class="but" name="mail_reg" value="OK" type="submit">

 

              </p>

  </div></form>

 

    <div id="content">

      <div id="breadcrumb">

       <%crumbs%>

      </div> 

 

      <h3><%title%></h3>

              <%content%> 

 

     <div id="footer">

       CMS: <a href="http://codegust.com">Tractor Engine.</a> Design by <a href="http://www.sprout.in">Ganesh Gunasegaran</a>

     </div>

    </div>

 

</div>

</body>

</html>

Рис.4.6 Блок-схема работы шаблонизатора

 

Модуль SkinParser, который будет производить замену <%спец. теги%>:

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

 

function sp_get_skin($file, $macros){

   $tmpl = file_get_contents($file);

   foreach($macros as $key=>$value)

   {

           $tmpl = str_replace("<%$key%>", $value, $tmpl);

   }

   $tmpl = ereg_replace("<%[a-zA-Z0-9_-]*%>", "", $tmpl);

   return $tmpl;

}

Задаем массив $tmpl_list. Далее, в зависимости от Компонента (статья, статичная страница и пр.) присваиваем то или иное значение заголовка (title) и текста (content). После чего запускаем функцию - шаблонизатор, которая заменяет в шаблоне спец. теги на соответствующие значения.

Внешний вид Админ-панели представлен на рис.4.7

Рис.4.7 Внешний вид Админ-панели

 

Редактор записей, я воспользовался готовым бесплатным решением CKEditor. Это функциональный html-редактор на JavaScript. Поключаем его следующим образом:

<textarea name="my_text"><?=$db_content?></textarea>

              <script type="text/javascript">

                            CKEDITOR.replace( 'my_text' );

              </script>

 

Листинг editor.php:

<?php

 

//Формируем список категорий

$cat = get_cat_list ();

 

//Если заполнено поле с названием новой категории

if (@$_REQUEST['my_cat_name'] !== "" && (isset($_REQUEST['sub']))) {

              creat_cat ();//создаем

              }

 

//Если нажата кнопка + обновление,

if ((isset($_REQUEST['sub'])) && $_REQUEST['action'] == "upd")

{

              upd_artcl ();//обновляем запись

              //и тут же переходим к редактированию.

              $_REQUEST['action'] = "edit";

}             

 

//Новая статья.

if ((@$_REQUEST['action'] == "new") )

{

              //Если нажата кнопка, создаем запись

              if (isset($_REQUEST['sub'])) { creat_artcl (); }

 

              //значения для формы

              $db_title="";

              $db_description="";

              $db_content="";

              $db_meta_key_words="";

              $db_meta_description="";             

}

 

elseif (@$_REQUEST['action'] == "edit") //Редактор записи

{

//Запись получаем.

              $sql = mysql_query("SELECT * FROM te_article WHERE id='".$_REQUEST['id']."'");

              $article = mysql_fetch_assoc($sql);

 

//Параметры записи вставим в форму редактора.

              $db_title=$article['title'];

              $db_category_id=$article['category_id'];

              $db_description=$article['description'];

              $db_content=$article['content'];

              $db_meta_key_words=$article['meta_key_words'];

              $db_meta_description=$article['meta_description'];

}

 

echo '

<body>

<form action="index.php" method="post">';

 

if (@$_REQUEST['action'] == "edit") {

              echo '

              <INPUT TYPE="hidden" NAME="id" VALUE="'.@$_REQUEST['id'].'">

              <INPUT TYPE="hidden" NAME="action" VALUE="upd">

              <INPUT TYPE="hidden" NAME="old_cat" VALUE="'.$db_category_id.'">';

}

 

elseif (@$_REQUEST['action'] == "new") {

              echo '

              <INPUT TYPE="hidden" NAME="action" VALUE="new">';

}

echo '

<p>Заголовок: <input name="my_title" type="text" size="60" value="'.$db_title.'"/></p><p>

Поместить в: <SELECT NAME="my_category_id">';

 

foreach ($cat as $category) {

              echo '<OPTION VALUE='.$category['category_id'].'>';echo $category['name'];

}

echo '

</SELECT>

Новая категория: <input name="my_cat_name" type="text" size="25" /></p>

 

<p>Описание:<br><textarea name="my_description" cols="96" rows="3" >'.$db_description.'</textarea></p>

<p>';

?>

Текст:<br /><table width="800"><tr><td>

              <textarea name="my_text"><?=$db_content?></textarea>

              <script type="text/javascript">

                            CKEDITOR.replace( 'my_text' );

              </script>

</td></tr></table>

</p>

 

<p>Key words: <input name="my_meta_key_words" type="text" size="40" value="<?=$db_meta_key_words?>"/></p>

<p>Description: <input name="my_meta_description" type="text" size="40" value="<?=$db_meta_description?>"/></p>

 

<input name="sub" type="submit" value="Отправить" />

</form>

Если нужно создать новую статью, то оставляем поля формы пустыми. Если выбрано редактирование и указан id статьи, то берем из БД статью и вставляем в форму для редактирования. Функция удаление происходит в скрипте admin_lib.php:

function del_artcl ($artcl_id)

{

              $sql_del = mysql_query("DELETE FROM  te_article WHERE id='".$artcl_id."'")  or die(mysql_error());

              update_cat_count ($_REQUEST['old_cat']);

 

              echo '<i>Запись <b>id='.$artcl_id.'</b> удалена</i>';

}

При добавлении, редактировании и удалении обновляем счетчики статей в категориях.

4.3 Разработка мер по информационной безопасности продукта

Безопасность информации — состояние защищенности информации (данных), при котором обеспечены её (их) конфиденциальность, доступность и целостность.

Информационная безопасность — защита конфиденциальности, целостности и доступности информации.

Основные пункты безопасности которые поддерживает система:

●        Конфиденциальность: свойство информационных ресурсов, в том числе информации, связанное с тем, что они не станут доступными и не будут раскрыты для неуполномоченных лиц.

●        Целостность: неизменность информации в процессе ее передачи или хранения.

●        Доступность: свойство информационных ресурсов, в том числе информации, определяющее возможность их получения и использования по требованию уполномоченных лиц.

При каждом входе на сайт создается новая сессия, и при этом пароль шифруется с помощью MD5 шифрования:

$_REQUEST['pass'] = md5($_REQUEST['pass']);

Целостность базы данных осуществляется путём создания резервных копий.

Резервное копирование — процесс создания копии данных на носителе (жёстком диске, дискете и т. д.), предназначенном для восстановления данных в оригинальном месте их расположения в случае их повреждения или разрушения.

Для защиты от спама в комментариях на сайте используется Capthca. CAPTCHA - полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей. В Рунете часто транскрибируется как «капча». Термин появился в 2000 году. Основная идея теста, предложить пользователю такую задачу, которую с лёгкостью может решить человек, но которую несоизмеримо сложнее решить компьютеру. В основном это задачи на распознавание символов.

Варианты реализации:

–                   В наиболее распространённом варианте CAPTCHA от пользователя требуется ввести символы, изображённые на предлагаемом ему рисунке (как правило, в искажённом виде, иногда с добавлением помех или полупрозрачности);

–                   Реже применяются CAPTCHA, основанные на распознавании речи (в основном — как альтернатива первому варианту для людей с нарушениями зрения);

–                   Встречаются CAPTCHA, где предлагается ввести ответ на простое арифметическое действие;

–                   Разработана технология Video-CAPTCHA, в которой фон и символы, которые необходимо распознать, постоянно двигаются;

Я использовал третий вариант, то есть арифметическое действие. Принцип работы:

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

–                   капча записывается в сессию, а чтобы значения были уникальны для каждой статьи, в сессии формируется целый список;

Файл captcha.php:

<?php

 

ini_set("session.use_trans_sid", true);

ini_set("session.gc_maxlifetime","3600");

session_start();

 

 

include ('../config.php');//Чтобы узнать SITE_URL

$tractor != true.

 

$a = rand (1, 4);

$b = rand (1, 4);

 

$string = $a.' + '.$b.' =';

$im=imageCreateFromPng(TE_DIR.'/themes/'.THEME.'/img/captcha.png');

              $color = imageColorAllocate($im, 0, 0, 0);

              $px = (imageSX($im)-6.5*strlen($string))/2;

              imageString($im, 3, $px+12, 5, $string, $color);

              Header("Content-type: image/png");

              imagePng($im);

              imageDestroy($im);

 

if (!isset($_REQUEST['id'])) $_REQUEST['id'] = 'null';

 

$_SESSION['captcha'][$_REQUEST['id']] = $a+$b;

?>

Внешне это выглядит примерно так (рис4.8)

Рис.4.8 Комментарий

4.4 Разработка инструкции по применению программного продукта

Системные требования для установки:

–             PHP5.2, mod_rewrite(для поддержки ЧПУ) и модуль GD(для поддержки капчи);

–             MySQL выше 5 версии;

–             Текстовый редактор с поддержкой “UTF без BOM”, оптимальный вариант NotePad++;

Процесс установки системы на сервер:

–             Скопировать все файлы в корневой каталог на хостинге (рис.4.9);

Рис.4.9 Структура корневого каталога

 

–             Выставить права (777) для корневого каталога;

–             Запустить в браузере ссылку http://ваш сайт/index.php (рис.4.10);

 

Рис.4.10 index.php

–             Выбрать язык установки, либо русский, либо английский, и нажать на ссылку install.php. В открывшемся окне заполнить все поля:

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