Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
diplom_specialist ФІКТ.doc
Скачиваний:
45
Добавлен:
19.02.2016
Размер:
8.81 Mб
Скачать

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

?>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]