Приветствую всех! В преддверии нового хочется сделать маааааленький, но полезный презент. Напомню суть проблемы: надо было сделать так, чтобы когда приходят новые сообщения, пользователь мог прочитать одно из них… побродить по сайту и вернуться к другим, т.к. в пользовательском меню будет висеть количество непрочитанных сообщений. Предыдущая версия этой штуковины была не совсем удачная, возможно и эта не совсем доработана, но она лучше той:) Теперь у каждого сообщения появилась кнопка "отметить как прочитанное" и убран казус при входящем сообщении от служб рассылки и обновлений.
Итак, сначала....
Открываем /components/users/messages.php и находим строку примерно 130
и заменяем ее на
далее идем в /components/users/fronted.php и находим там строку примерно 1862
сразу после этой скобки вставляем
затем идем в /components/users/router.php и находим там вот эти строки
и сразу после них вставляем
затем открываем шаблон/components/com_users_messages.tpl находим строки
после них идет одна таблица, заменяем ее на эту
после нее сразу вторая таблица, заменяем ее на эту
Вроде все… теперь когда приходят сообщение от юзера, его можно прочитать нажав на само сообщение (т.к. теперь оно кликабельно), а можно нажать "отметить как прочитанное" и не читать. Когда приходит служебное сообщение, оно становится прочитанным после перезагрузки страницы (как раньше вобщем). Шаблон делал под себя, лучше сами переделаете как вам нужно.
Я не знаю насколько правильно все сделано, но у меня все работает-это факт!
Пробуем! С наступающим! Удачи всем!
P.S. удобнее сделать все через чекбоксы, но это как-нибудь в другой раз.
Итак, сначала....
Открываем /components/users/messages.php и находим строку примерно 130
//erase new mark $inDB->query("UPDATE cms_user_msg SET is_new = 0 WHERE id = ".$record['id']);
//erase new mark if($record['sender_id']>0){ $inDB->query("UPDATE cms_user_msg SET is_new = 1 WHERE id = ".$record['id']); } else { $inDB->query("UPDATE cms_user_msg SET is_new = 0 WHERE id = ".$record['id']); }
$is_reply_user = true; $msg = $inDB->fetch_assoc($result); $msg['senddate'] = $inCore->dateFormat($msg['senddate'], true, true); $update_sql = "UPDATE cms_user_msg SET is_new = 0 WHERE id = '{$msg['id']}' LIMIT 1"; $inDB->query($update_sql); }
// // Отметить как прочитанное // $readid = $inCore->request('readid', 'int', 0); $is_read_user = false; if ($readid){ $sql = "SELECT m.id as id, m.senddate, m.message, u.login, u.nickname FROM cms_user_msg m LEFT JOIN cms_users u ON u.id = m.from_id WHERE m.id = '$readid' AND m.to_id = '$from_id'"; $result = $inDB->query($sql) ; $msg = $inDB->fetch_assoc($result); $update_sql = "UPDATE cms_user_msg SET is_new = 0 WHERE id = '{$msg['id']}' LIMIT 1"; $inDB->query($update_sql); $inCore->redirectBack(); }
'_uri' => '/^users\/([0-9]+)\/messages\-history([0-9]+)\-([0-9]+).html$/i', 'do' => 'messages', 1 => 'id', 2 => 'with_id', 'opt' => 'history', 3 => 'cpage' );
'_uri' => '/^users\/([0-9]+)\/read([0-9]+).html$/i', 'do' => 'sendmessage', 1 => 'id', 2 => 'readid' );
{if $is_mes} <div> <div class="usr_msg_entry">
<table style="width:100%" cellspacing="0"> <tr> <td class="usr_msg_title" width=""><strong>{$record.authorlink}</strong>, <span class="usr_msg_date">{$record.fpubdate}</span></td> {if $record.is_new} {if $opt=='in'} <td class="usr_msg_title" width="90" align="right"><span class="msg_new">{$LANG.NEW}!</span></td> {else} <td class="usr_msg_title" width="90" align="right"><a class="msg_delete" href="/users/delmsg{$record.id}.html">{$LANG.CANCEL_MESS}</a></td> {/if} {else} <td class="usr_msg_title" width="14" align="right"> </td> <td class="usr_msg_title" width="20" align="right"> </td> {/if} {if $opt=='in'} {if $record.sender_id>0} <td class="usr_msg_title" width="80" align="right"><a class="msg_reply" href="/users/{$record.from_id}/reply{$record.id}.html">{$LANG.REPLY}</a></td> <td class="usr_msg_title" width="80" align="right"><a class="msg_history" href="/users/{$id}/messages-history{$record.from_id}.html">{$LANG.HISTORY}</a></td> <td class="usr_msg_title" width="190" align="right"><a class="msg_reply" href="/users/{$record.from_id}/read{$record.id}.html">отметить как прочитанное</a></td> {/if} {/if} {if $opt=='in' || ($opt=='out' && !$record.is_new)} <td class="usr_msg_title" width="70" align="right"><a class="msg_delete" href="/users/delmsg{$record.id}.html">{$LANG.DELETE}</a></td> {/if} </tr> </table>
<table cellspacing="4"> <tr> <td width="70" height="70" valign="middle" align="center" style="border:solid 1px #C3D6DF"> {$record.user_img} {if $record.is_online} <span class="online" style="font-size:10px;">{$LANG.ONLINE}</span> {/if} </td> {if $opt=='in'} {if $record.sender_id<0} <td width="" valign="top"><div style="padding:6px">{$record.message}</div></td> {/if} {/if} {if $opt=='in'} {if $record.sender_id>0} <td width="" valign="top"><div style="padding:6px"><a style="text-decoration:none;" href="/users/{$record.from_id}/reply{$record.id}.html">{$record.message|truncate:200}</div></td> {/if} {/if} {if $opt=='history' || $opt=='out'} <td width="" valign="top"><div style="padding:6px">{$record.message}</div></td> {/if} </tr> </table>
Я не знаю насколько правильно все сделано, но у меня все работает-это факт!
Пробуем! С наступающим! Удачи всем!
P.S. удобнее сделать все через чекбоксы, но это как-нибудь в другой раз.
Реклама #
Anubis 12 лет назад #
PrazdNik 12 лет назад #
Pantsakov 12 лет назад #
Ищем в файле шаблон/components/com_users_messages.tpl строку
PrazdNik 12 лет назад #
Tarhun 12 лет назад #
Tarhun 12 лет назад #
PrazdNik 12 лет назад #