- •Розробка системи управління контентом веб-сайту пп «Віконера»
- •Кафедра ______________________________________________________________________
- •1. Тема роботи______________________________________________________________
- •2. Термін здачі закінченої роботи на кафедру ____________________________________
- •3. Вихідні дані до роботи_____________________________________________________
- •4. Зміст розрахунково-пояснювальної записки (перелік питань, які підлягають розробці)
- •Анотація
- •Abstract
- •1. Технічне завдання
- •2. Аналіз аналогічних розробок
- •3. Вибір архітектури
- •4. Вибір інструментальних засобів розробки
- •5. Вимоги до технічних засобів
- •6. Керівництво користувачу
- •6.1. Клієнтська частина сайту
- •4. Посилання «Карта сайту».
- •При перегляді фотоальбому відображаються зменшені варіанти зображень. Якщо клікнути по зменшеному зображенню, то зможемо побачити його у реальному розмірі.
- •Сторінка перегляду повнорозмірних зображень містить кнопки для «перелистування» зображень. Кожне збільшене зображення маркується копірайтом «(с) viconera.Com.Ua».
- •6.2. Система адміністрування
- •7. Керівництво програмісту
- •7.1. Допоміжні плагіни для верстки у Mozilla FireFox
- •7.2. Структура бази даних
- •7.4. Передача даних між сторінками
- •7.5. Структура розробленої системи
- •7.6. Опис ядра портальної системи
- •7.7. Структура модуля портальної системи
- •7.8. Використанняmod_rewrite
- •7.9. ДіаграмаUse case
- •Висновки
- •Список літератури
- •Додаток №1 «Охорона праці»
- •Правила охорони праці при експлуатації еом Загальні положення
- •Вимоги до виробничих приміщень Загальні вимоги
- •Санітарно-гігієнічні вимоги
- •Вимоги електробезпеки
- •Вимоги до устаткування
- •Вимоги до розміщення устаткування й організації робочих місць
- •Вимоги до безпеки при експлуатації, обслуговуванні, ремонті і налагодженні еом Вимоги безпеки при експлуатації еом
- •Вимоги безпеки при обслуговуванні, ремонті і налагодженні еом
- •Режим праці і відпочинку
- •Вимоги до виробничого персоналу
- •Обов'язки, права і відповідальність за порушення правил
7.7. Структура модуля портальної системи
Всі модулі портальної системи зберігаються у каталозі /modules/.
Кожний модуль має таку структуру:
module.php – скрипт, який містить усі класи, які реалізують модуль;
config.php – конфігураційний файл, у якому розміщується інформація, яка необхідна для реєстрації модуля у портальній системі;
/admin– каталог, який містить шаблони html-файлів, у яких зберігаються форми, що використовуються системою адміністрування при виконанні операцій по роботі з даними.
/user– каталог, який містить шаблони html-файлів, що використовуються при відображення даних для відвідувачів сайту у користувацькій частині сайту.
Конфігураційний файл config.php призначений для реєстрації модуля у портальній системі. У ньому міститься інформація про автора модуля, дата його створення тощо.
Для усіх модулів системи діють одні й ті самі правила написання конфігураційного файла. У ньому визначається асоціативний двовимірний масив. Перший індекс цього масиву представляє собою абревіатуру модуля, а другий – назву пераметра. Присовоєння значення параметру здійснюється таким чином:
$Modules[‘Абревіатура’][‘Назва параметра’] = “Значення”;
Для кожного модуля в обов’язковому порядку мають бути визначені такі параметри:
CodeName – кодове ім’я модуля. Використовується при зв’язуванні модуля з іншими модулями системи (наприклад, модуля «Новини» з модулем «Пошук по сайту»);
Name – назва модуля. Відображається у системі адміністрування разом з піктограмою модуля;
Version – версія модуля;
Date – дата релізу модуля;
Author – інформація про автора;
Directory – назва підкаталогу у каталозі /modules/, у якому зберігаються програмні скрипти модуля;
Admin– визначає, чи потрібно реєструвати модуль у (деякі модулі можуть використовуються лише у користувацькій частині сайту).
User – визначає, чи потрібно реєструвати модуль у користувацькій частині сайту (деякі модулі можуть використовуються лише у системі адміністрування сайту).
Class – ім’я головного класу модуля. Кожний модуль складається як мінімум з одного класу, який будемо називати головним класом модуля, який, в свою чергу, може використовувати інші допоміжні класи.
Головний клас модуля повинен містити набір функцій, які реалізовують функції-обробники подій Form() та Handler() та функції, які здійснюють відображення даних та організацію діалогів з користувачем.
Приведемо приклад реалізації модуля на прикладі «Контактної форми».
<?
class Guestbook
{
// видалення повідомлення з бази даних
function MessageDelete($id)
{
$query = "DELETE FROM guestbook WHERE message_id = '{$id}'";
mysql_query($query) or die(mysql_error());
}
// виведення списку повідомлень з можливістю вибору повідомлення для редагування
// або видалення
function GuestbookAdminTable()
{
$query = "SELECT * FROM guestbook ORDER BY message_id DESC";
$query_result = mysql_query($query);
$adminTable = new CAdminTable();
if (mysql_affected_rows() > 0)
{
for ($i = 0; $i < mysql_affected_rows(); $i++)
{
$row = mysql_fetch_array($query_result);
$editlink = "admin.php?mod=Guestbook&message_id={$row['message_id']}&Edit=1";
$deletelink =
"admin.php?mod=Guestbook&ListMessages=1&message_id={$row['message_id']}&DelMessage=1";
$adminTable->AddDeleteLink("видалити", $deletelink, "Видалити повідомлення?");
$adminTable->AddEditLink("редагувати", $editlink);
$adminTable->AddDataField($row['message_date']);
$adminTable->AddDataField($row['message_author_name']);
$adminTable->NextRow();
}
}
$adminTable->Show();
echo "<br><br>";
}
// Читання повідомлення з бази даних
function MessageSelect($id)
{
$query = "SELECT * FROM guestbook WHERE message_id = '{$id}'";
$query_result = mysql_query($query);
if (mysql_affected_rows() > 0)
{
$row = mysql_fetch_array($query_result);
return $row;
}
}
// Відображення форми редагування повідомлення
function MessageEditHandler()
{
if (isset($_POST['messageeditform']))
{
$this->MessageUpdate($_POST['message_text'], $_POST['message_answer'], $_POST['message_author_name'], $_POST['message_author_email'], $_POST['message_author_homepage'], $_POST['message_author_ip'], $_POST['message_date'], isset($_POST['message_visible']) ? 'Y' : 'N', $_GET['message_id']);
header("Location: admin.php?mod=Guestbook&ListMessages=1&person_id={$_POST['person_id']}");
}
}
// Запис результатів редагування повідомлення
function MessageUpdate($message_text, $message_answer, $message_author_name, $message_author_email, $message_author_homepage, $message_author_ip, $message_date, $message_visible, $id)
{
$message_text = addslashes($message_text);
$message_answer = addslashes($message_answer);
$message_author_name = addslashes($message_author_name);
$message_author_email = addslashes($message_author_email);
$message_author_homepage = addslashes($message_author_homepage);
$message_author_ip = addslashes($message_author_ip);
$message_date = addslashes($message_date);
$query = "UPDATE guestbook SET message_text = '{$message_text}', message_answer = '{$message_answer}', message_author_name = '{$message_author_name}', message_author_email = '{$message_author_email}', message_author_homepage = '{$message_author_homepage}', message_author_ip = '{$message_author_ip}', message_date = '{$message_date}', message_visible='{$message_visible}' WHERE message_id = '{$id}'";
mysql_query($query) or die(mysql_error());
if (strlen($message_author_email) > 5)
mail($message_author_email, "Re ".$message_author_homepage, nl2br($message_answer));
}
// Виведення форми редагування повідомлення
function MessageEditForm()
{
if (isset($_GET['message_id']) && isset($_GET['Edit']))
{
$row = $this->MessageSelect($_GET['message_id']);
$Page = new CTemplate("modules/guestbook/admin/messageedit.html");
$Page->SetParam("%%NAME%%", $row['message_author_name']);
$Page->SetParam("%%EMAIL%%", $row['message_author_email']);
$Page->SetParam("%%HOMEPAGE%%", $row['message_author_homepage']);
$Page->SetParam("%%DATE%%", $row['message_date']);
$Page->SetParam("%%IP%%", $row['message_author_ip']);
$Page->SetParam("%%QUESTION%%", $row['message_text']);
$Page->SetParam("%%ANSWER%%", $row['message_answer']);
$Page->SetParam("%%MESSAGE_VISIBLE%%", $row['message_visible'] == "Y" ? "checked=\"checked\"" : "");
$Page->ShowPage();
}
}
// Виведення форми додавання повідомлення
function MessageAddForm()
{
if (isset($_GET['AddMessage']))
{
$Page = new CTemplate("modules/guestbook/admin/messageadd.html");
$Page->ShowPage();
}
}
// Запис повідомлення у базу даних
function MessageInsert($message_text, $message_answer, $message_author_name, $message_author_email, $message_author_homepage)
{
$message_text = addslashes($message_text);
$message_answer = addslashes($message_answer);
$message_author_name = addslashes($message_author_name);
$message_author_email = addslashes($message_author_email);
$message_author_homepage = addslashes($message_author_homepage);
$ip = $_SERVER['REMOTE_ADDR'];
$date = GetCurrentDate();
$query = "INSERT INTO guestbook (message_text, message_answer, message_author_name, message_author_email, message_author_homepage, message_author_ip, message_date) VALUES ('{$message_text}', '{$message_answer}', '{$message_author_name}', '{$message_author_email}', '{$message_author_homepage}', '{$ip}', '{$date}')";
mysql_query($query) or die(mysql_error());
$id = mysql_insert_id();
return $id;
}
// Обробка форми додавання повідомлення
function MessageAddHandler()
{
if (isset($_POST['messageaddform']))
{
$this->MessageInsert($_POST['message_text'], $_POST['message_answer'], $_POST['message_author_name'], $_POST['message_author_email'], $_POST['message_author_homepage']);
header("Location: admin.php?mod=Guestbook&ListMessages=1");
}
}
//- Обробники подій -//
function Handler()
{
if (isset($_GET['mod']) && ($_GET['mod'] == "Guestbook"))
{
$this->MessageAddHandler();
$this->MessageDeleteHandler();
$this->MessageEditHandler();
$this->MessageVisibleHandler();
$this->DescriptionEditHandler();
}
}
// Виклик функцій відображення форм
function Form()
{
if (isset($_GET['mod']) && ($_GET['mod'] == "Guestbook"))
{
$this->AdminMenu();
$this->MessageAddForm();
$this->MessageListForm();
$this->MessageEditForm();
$this->DescriptionEditForm(); } }
// Обробка подій у режимі користувача
function UserHandler()
{
global $language, $LANG;
$result = null;
if (isset($_POST['messageform']))
{
$ok = true;
if (!spamtest($_POST['message_text']))
{
global $error;
$error = 1;
$ok = false;
}
if (strlen($_POST['message_author_name']) < 5
|| strlen($_POST['message_text']) < 10)
{
global $error;
$error = 2;
$ok = false;
}
if ($ok)
{
$this->MessageInsert($_POST['message_text'],
$_POST['message_answer'], $_POST['message_author_name'],
$_POST['message_author_email'],
$_POST['message_author_homepage']);
header("Location: http://".$_SERVER['HTTP_HOST']."/index.php?guestbook=1&ok=1");
}
}
if (isset($_GET['guestbook']))
{
$GuestbookPage = new CTemplate("modules/guestbook/user/messageform.html");
$GuestbookPage->SetParam("%%MESSAGE_AUTHOR_NAME%%", $LANG['Guestbook']['AuthorName']);
$GuestbookPage->SetParam("%%MESSAGE_AUTHOR_HOMEPAGE%%", $LANG['Guestbook']['AuthorHomepage']);
$GuestbookPage->SetParam("%%MESSAGE_AUTHOR_EMAIL%%", $LANG['Guestbook']['AuthorEmail']);
$GuestbookPage->SetParam("%%MESSAGE_TEXT%%", $LANG['Guestbook']['Text']);
$GuestbookPage->SetParam("%%SUBMIT%%", $LANG['Guestbook']['Submit']);
$GuestbookPage->SetParam("%%DESCRIPTION%%",
$this->ReadDescription($language));
$message = "";
$message_class = "";
if (isset($_GET['ok']))
{
$message_class = "QuestionSent";
$message = $LANG['Guestbook']['Sent'];
}
if (isset($error) && $error == 1)
{
$message_class = "QuestionNotSent";
$message = $LANG['Guestbook']['BadSymbols'];
}
if (isset($error) && $error == 2)
{
$message_class = "QuestionNotSent";
$message = $LANG['Guestbook']['NotSent'];
}
$GuestbookPage->SetParam("%%MESSAGE%%", $message);
$GuestbookPage->SetParam("%%CLASS%%", $message_class);
if (isset($_POST['message_author_name']))
$GuestbookPage->SetParam("%%NAME%%",
$_POST['message_author_name']);
else
$GuestbookPage->SetParam("%%NAME%%", "");
if (isset($_POST['message_author_homepage']))
$GuestbookPage->SetParam("%%HOMEPAGE%%",
$_POST['message_author_homepage']);
else
$GuestbookPage->SetParam("%%HOMEPAGE%%", "");
if (isset($_POST['message_author_email']))
$GuestbookPage->SetParam("%%EMAIL%%",
$_POST['message_author_email']);
else
$GuestbookPage->SetParam("%%EMAIL%%", "");
if (isset($_POST['message_text']))
$GuestbookPage->SetParam("%%TEXT%%", $_POST['message_text']);
else
$GuestbookPage->SetParam("%%TEXT%%", "");
$GuestbookPage->SetParam("%%CLASS%%", $message_class);
$result['PageName'] = $LANG['Guestbook']['Name'];
$result['PageTitle'] = $LANG['Guestbook']['Name'];
$result['PageHTML'] = $GuestbookPage->GetPage();
$navigator = new CNavigator();
$navigator->AddLink($LANG['Main']['SiteTitle'], "index.php");
$navigator->AddLink($LANG['Guestbook']['Name'],
"index.php?guestbook=1");
$result['Navigator'] = $navigator;
}
return $result;
}
}
$Classes['Guestbook'] = new Guestbook();
?>