Переписка на сайте (внутренняя почта)
Для отправки сообщений администратору сайта созданы программы переписки на сайте. Пользователь может:
отправлять сообщения администратору;
получать сообщения;
смотреть сообщения списком и по отдельности;
удалять сообщения.
Просмотр сообщений пользователя списком
При выборе пункта меню Сообщения, открывается постраничный список сообщений (рис. 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 — (Профессиональное программирование)
Похожие посты:
- Поиск веб-страниц (0)
- Создание блока с закругленными краями (0)
- Создание выпадающего меню исключительно средствами CSS (0)
- Изменение фонового цвета строки при наведении на нее указателя мыши (0)
- Интернационализация Django - ЧАСТЬ 2 (0)
- Управление отображением элемента (0)
- Первая программа на JavaScript (0)