Переписка на сайте (внутренняя почта)

Опубликовал: Sunday, December 23, 2023 в категории AJAX, PHP | Пока нет комментариев

Для отправки сообщений администратору сайта созданы программы переписки на сайте. Пользователь может:

отправлять сообщения администратору;

получать сообщения;

смотреть сообщения списком и по отдельности;

удалять сообщения.

Просмотр сообщений пользователя списком

При выборе пункта меню Сообщения, открывается постраничный список сообщений (рис. 3.56) по фильтру Входящие/Исходящие. При нажатии ссылки Входящие вызывается xajax-функция View_All_Messages_In, расположенная в файле prgmessage/view_all_messages_in.php (листинг 3.86). При нажатии ссылки Исходящие вызывается xajax-функция View_All_Messages_Out, расположенная в файле prgmessage/view_all_messages_out.php (листинг 3.87). Для каждого сообщения выводим следующие данные:

дата сообщения;

отправитель;

тема;

ссылки Просмотр и Удаление.

Листинг 3.86

<?php

// Просмотр всех входящих сообщений постранично

// $Id номер страницы

function View_All_Messages_In($Id)

{

$objResponse = new xajaxResponse();

$objResponse->assign("flag_ajax","value",’yes’);

// функция формирования контента

$content=f_view_all_messages_in($Id);

// вывод контента

$objResponse->assign("center3","innerHTML",$content[0]);

// навигатор страниц

$objResponse->assign("center4","innerHTML",$content[1]);

// блок center3 в зону видимости

$objResponse->script("document.getElementById (‘center3’).scrollIntoView();");

$objResponse->assign("flag_ajax","value",’no’); return $objResponse();

}

?>

Листинг 3.87

<?php

// Просмотр всех исходящих сообщений постранично

// $Id номер страницы

function View_All_Messages_Out($Id)

{

$objResponse = new xajaxResponse();

$objResponse->assign("flag_ajax","value",’yes’);

// функция формирования контента

$content=f_view_all_messages_out($Id);

// вывод контента

$objResponse->assign("center3","innerHTML",$content[0]);

// навигатор страниц

$objResponse->assign("center4","innerHTML",$content[1]);

// блок center3 в зону видимости

$objResponse->script("document.getElementById (‘center3’).scrollIntoView();");

$objResponse->assign("flag_ajax","value",’no’); return $objResponse;

}

?>

Рис. 3.56. Список сообщений пользователя (входящие)

Функции формирования контента для входящих и исходящих сообщений f_view_all_messages_in и f_view_all_messages_out расположены в файлах prgmessage/function_view_all_messages_in.php (листинг 3.88) и prgmessage/function_ view_all_ messages_out.php (листинг 3.89) соответственно. Вывод происходит по-

странично, количество сообщений на странице — константа NN3 в файле настроек

my.php.

Листинг 3.88

<?php

// Просмотр входящих сообщений пользователя постранично

// $Id номер страницы для показа

// id пользователя = $_SESSION[user] function f_view_all_messages_in($Id)

{

// подключение файла настроек

require_once("my.php");

// подключение к базе данных

require_once("mybaza.php");

$text=array();

$text1="";

// выбор входящих сообщений

$query0="SELECT COUNT(id) FROM messages WHERE id_to=’".$_SESSION[user]."’ && visible_to=’yes’ ORDER BY data DESC ";

$rez0=mysql_query($query0);

$count=mysql_result($rez0,0);

$pages=ceil($count/NN3);

$page=min($Id,$pages);$poz=($page-1)*NN3;

// формируем ссылку на исходящие

$text1.="<table><tr><td align=center><b>Входящие</b>

</td><td align=center>

<a href=’javascript:void();’ onclick=’ xajax_View_All_Messages_Out(1);’> Исходящие</a></td></tr></table>";

$text1.="<div class=’zag_view_messages’>"; if($count>0) // есть сообщения

{

$query1="SELECT * FROM messages WHERE id_to=’".$_SESSION[user]."’

&& visible_to=’yes’ ORDER BY data DESC LIMIT ".$poz.", ".NN3."";

$rez1=mysql_query($query1);

// шапка таблицы списка

$text1.="<table>";

$text1.="<tr><td class=’str0′></td>";

$text1.="<td class=’str0′>Дата</td>";

$text1.="<td class=’str0′>От</td>";

$text1.="<td class=’str0′>Тема</td>";

$text1.="<td class=’str0′></td></tr>";

$i=0; // для раскраски в зебру

while($row1=mysql_fetch_assoc($rez1))

{

$i++; if($row1[view_to]==’no’)

// иконка для непрочтенных

$text1.="<tr><td class=’str".($i%2+1)."’><img src=’img/new_message.gif’></td>";

else

$text1.="<tr><td class=’str".($i%2+1)."’ width=5%></td>";

// дата

$text1.="<td class=’str".($i%2+1)."’>".$row1[data]."</td>";

$query2="SELECT login FROM users WHERE id=’".$row1[id_from]."’ ";

$rez2=mysql_query($query2);

$login=mysql_result($rez2,0);

$login=(strlen($login)<13)?($login):(substr($login,0,12)."…");

$text1.="<td class=’str".($i%2+1)."’>".$login."</td>";

// тема

$text1.="<td class=’str".($i%2+1)."’>".$row1[theme]."</td>";

// иконки-ссылки Смотреть и Удалить

$text1.="<td class=’str".($i%2+1)."’><a href=’javascript:void();’ onclick=’xajax_View_Message(".$row1[id].");’ title=’Смотреть’><img src=’img/view.gif’></a>";

$text1.="<a href=’javascript:void();’ onclick=’ xajax_Delete_Message_In(".$row1[id].");’ title=’Удалить’><img src=’img/delete.png’></a>";

$text1.="</td></tr>";

}

$text1.="</table>";

// список ссылок перехода по страницам

$text2=""; if($pages>1)

{

if($page != 1)

{$i=$page-1;

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".($page-1).";

xajax_View_All_Messages_In(x);’> <<</a>";

}

$x=array();

$x=doarray1($page,$pages,5); for($i=0;$i < count($x);$i++)

{ if($x[$i]==$page)

$text2.="<a> ".$x[$i]."</a>";

else

{

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".$x[$i]."; xajax_View_All_Messages_In(x);’> ".$x[$i]."</a>";

}

}

if($page != $pages)

{$i=$page+1;

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".($page+1).";

xajax_View_All_Messages_In(x);’> >></a>";

}

if($pages != 1)

{$text2.="<br><br>Всего ".$count." Страниц ".$pages."

<br> </center>";}

else

{$text2.="</center>";}

}

} else

{

$text1.="<center><br>Входящих сообщений нет<br></center>";

}

// ссылка на создание сообщения

if($_SESSION[type]>7)

$text1.="<center><br><br><a href=’javascript:void();’ onclick=’ xajax_Form_New_Message_Admin(0);’> Написать сообщение</a></center>";

else

$text1.="<center><br><br><a href=’javascript:void();’ onclick=’ xajax_Form_New_Message();’> Написать администратору</a></center>";

$text[0]=$text1;

$text[1]=$text2; return $text;

}

?>

Листинг 3.89

<?php

// Просмотр исх сообщений пользователя постранично (дата по убыванию)

// $Id номер страницы для показа

// id пользователя = $_SESSION[user]

function f_view_all_messages_out($Id)

{

// подключение файла настроек

require_once("my.php");

// подключение к базе данных

require_once("mybaza.php");

$text=array();

$text1="";

// выбор исходящих сообщений

$query0="SELECT COUNT(id) FROM messages WHERE id_from=’".$_SESSION[user]."’ && visible_from=’yes’ ORDER BY data DESC ";

$rez0=mysql_query($query0);

$count=mysql_result($rez0,0);

$pages=ceil($count/NN3);

$page=min($Id,$pages);$poz=($page-1)*NN3;

// формируем ссылку на входящие

$text1.="<table><tr><td align=center><a href=’javascript:void()’ onclick=’xajax_View_All_Messages_In(1);’>Входящие</a></td>

<td align=center><b>Исходящие</b></td></tr></table>";

$text1.="<div class=’zag_view_messages’>"; if($count>0)

{

// есть сообщения

$query1="SELECT * FROM messages WHERE id_from=’".$_SESSION[user]."’

&& visible_from=’yes’ ORDER BY data DESC LIMIT ".$poz.", ".NN3."";

$rez1=mysql_query($query1);

// шапка списка исходящие

$text1.="<table>";

$text1.="<tr><td class=’str0′></td>";

$text1.="<td class=’str0′>Дата</td>";

$text1.="<td class=’str0′>Кому</td>";

$text1.="<td class=’str0′>Тема</td>";

$text1.="<td class=’str0′></td></tr>";

$i=0; //для раскраски в зебру

while($row1=mysql_fetch_assoc($rez1))

{$i++; if($row1[view_out]==’no’)

// иконка для непрочтенных

$text1.="<tr><td class=’str".($i%2+1)."’><img src=’img/noview_message.gif’></td>";

else

$text1.="<tr><td class=’str".($i%2+1)."’ width=5%></td>";

// дата

$text1.="<td class=’str".($i%2+1)."’>".$row1[data]."</td>";

$query2="SELECT login FROM users WHERE id=’".$row1[id_to]."’ ";

$rez2=mysql_query($query2);

$login=mysql_result($rez2,0);

$login=(strlen($login)<13)?($login):(substr($login,0,12)."…");

$text1.="<td class=’str".($i%2+1)."’>".$login."</td>";

// тема

$text1.="<td class=’str".($i%2+1)."’>".$row1[theme]."</td>";

// иконки-ссылки Смотреть и Удалить

$text1.="<td class=’str".($i%2+1)."’><a href=’javascript:void();’ onclick=’xajax_View_Message(".$row1[id].");’ title=’Смотреть’><img src=’img/view.gif’></a>";

$text1.="<a href=’javascript:void();’

onclick=’xajax_Delete_Message_Out(".$row1[id].");’ title=’Удалить’><img src=’img/delete.png’></a>";

$text1.="</td></tr>";

}

$text1.="</table>";

// список ссылок перехода по страницам

$text2=""; if($pages>1)

{

if($page != 1)

{$i=$page-1;

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".($page-1)."; xajax_View_All_Messages_Out(x);’> <<</a>";

}

$x=array();

$x=doarray1($page,$pages,5); for($i=0;$i < count($x);$i++)

{ if($x[$i]==$page)

$text2.="<a> ".$x[$i]."</a>"; else

{

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".$x[$i].";

xajax_View_All_Messages_Out(x);’> ".$x[$i]."</a>";

}

}

if($page != $pages)

{$i=$page+1;

$text2.="<a href=’javascript:void(null);’ onclick=’ var x=new Array();x=".($page+1).";

xajax_View_All_Messages_Out(x);’> >></a>";

}

if($pages != 1)

{$text2.="<br><br>Всего ".$count." Страниц ".$pages."<br>

</center>";}

else

{$text2.="</center>";}

}

} else

{

$text1.="<center><br>Входящих сообщений нет<br></center>";

}

$text1.="<center><br><br><a href=’javascript:void();’ onclick=’ xajax_Form_New_Message();’> Написать администратору</a></center>";

$text[0]=$text1;

$text[1]=$text2; return $text;

}

?>

Источник: Петин В. А., Сайт на AJAX под ключ. Готовое решение для интернет-магазина. — СПб.: БХВ-Петербург, 2011. — 432 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *