• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Хак ПМ как на Однокласниках

Статус
В этой теме нельзя размещать новые ответы.

bumer3

Постоялец
Регистрация
10 Янв 2008
Сообщения
291
Реакции
155
Хак позволяет выводить сообщение в меню пользователя и при просмотре ПМ пишет само сообщение.

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся

Открываем файл шаблона login.tpl
И в место куда хотим выводить последний ПМ вставляем
{$new_post_tpl}

Отрываем файл engine/init.php
Коментируем строку
PHP:
// include_once ENGINE_DIR.'/modules/pm_alert.php';
Если не хотим всплывающего окна....

Ищем
PHP:
include_once $tpl->dir.'/login.tpl';
Над ним ставляем
PHP:
if ($member_id['pm_unread'] > 0)
{
	$row = $db->super_query("SELECT subj, text, user_from FROM " . USERPREFIX . "_pm WHERE user = '$member_id[user_id]' AND folder = 'inbox' ORDER BY pm_read ASC, date DESC LIMIT 0,1");
	$row['subj'] = substr(stripslashes($row['subj']),0,45)." ...";
	$row['text'] = substr(strip_tags (stripslashes($row['text']), '<br>'),0,340)." ...";
	$row1 = $db->super_query("SELECT * FROM " . USERPREFIX . "_users where name = '{$row['user_from']}'");
	if ($row1['foto'] AND (file_exists(ROOT_DIR."/uploads/fotos/".$row1['foto'])))  
	$avatar = $config['http_home_url']."uploads/fotos/".$row1['foto'];
	else $avatar = "{THEME}/images/noavatar.png";

$new_post_tpl = <<<HTML
<tr>
 <td style="padding:2px;">
 Вам пришло личных сообщение: <b>{$member_id['pm_unread']}</b><br>
 <b>Последнее:</b><br>
{$lang['pm_asub']}: <b>{$row['subj']}</b><br /><img src="{$avatar}"><br>
{$lang['pm_from']}: <b>{$row['user_from']}</b><br /><div>{$row['text']}</div>
<div align="left"><a href="{$PHP_SELF}?do=pm"><b>Читать остальные</b></a>
</td>
<tr>
HTML;
}
$new_post_tpl содержит шаблон вывода. Правим по вкусу и шаблону.

Открываем файл engine/modules/pm.php
Находим
PHP:
$pmlist .= "<table class=\"pm\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td width=\"20\">&nbsp;</td><td class=\"pm_head\">".$lang['pm_subj']."</td><td width=\"150\" class=\"pm_head\">".$lang['pm_from']."</td><td width=\"150\" class=\"pm_head\" align=\"center\">".$lang['pm_date']."</td><td width=\"50\" class=\"pm_head\" align=\"center\"><input type=\"checkbox\" name=\"master_box\" title=\"{$lang['pm_selall']}\" onclick=\"javascript:ckeck_uncheck_all()\"></td>";


	$db->query($sql);

	while($row = $db->get_row()){
Добавляем дальше
PHP:
$row1 = $db->super_query("SELECT * FROM " . USERPREFIX . "_users where name = '{$row['user_from']}'");
    if ($row1['foto'] AND (file_exists(ROOT_DIR."/uploads/fotos/".$row1['foto'])))  
    $avatar = $config['http_home_url']."uploads/fotos/".$row1['foto'];
    else $avatar = "{THEME}/images/noavatar.png";
Находим:
PHP:
if ($doaction == "outbox") 
	{
		$lang['pm_from'] = $lang['pm_to'];
		$sql = "SELECT id, subj, name as user_from, date, pm_read FROM " . USERPREFIX . "_pm LEFT JOIN " . USERPREFIX . "_users ON " . USERPREFIX . "_pm.user=" . USERPREFIX . "_users.user_id WHERE user_from = '{$member_id['name']}' AND folder = 'outbox' order by date desc";
	} 
	else $sql = "SELECT id, subj, user_from, date, pm_read, reply FROM " . USERPREFIX . "_pm where user = '{$member_id['user_id']}' AND folder = 'inbox' order by date desc";
после
PHP:
subj,
дописываем
PHP:
text,
для обоих запросов

В конце файла есть

PHP:
if ($row['reply']) $icon = "{THEME}/dleimages/send.gif";

	$pmlist .= {код};

	}

	$db->free();

Переменная $pmlist имеет список сообщение там в ее значение можно добавить само сообщение
PHP:
{$row[text]}
или аватарку автора.

Для получение результата как на картинке
PHP:
$pmlist .= "<tr><td><img src=\"{$icon}\" border=\"0\"></td><td class=\"pm_list\">{$subj}<br />{$row[text]}</td><td class=\"pm_list\"><img src=\"{$avatar}\" /><br /><center>{$user_from}</center></td><td class=\"pm_list\" align=\"center\">".langdate("j.m.Y H:i", $row['date'])."</td><td class=\"pm_list\" align=\"center\"><input name=\"selected_pm[]\" value=\"{$row['id']}\" type=\"checkbox\"></td></tr>";
 
Открываем файл шаблона login.tpl
И в место куда хотим выводить последний ПМ вставляем
{$new_post_tpl}

а мона не в login.tpl а в main.tpl ? если нет, то как переделать ? просто хочу чтобы это всплывало не там, где логин а в другом месте шаблона )
 
и в своей теме про реализацию данного хака я приводил скриншот

f0115a43b37c.jpg


и там видно что есть возможность закрыть сообщение или переход в ответ на это сообщение ))
 
Я думаю дальше сам справишся.... из login.tpl убери $new_post_tpl и добавь в main.tpl допустим {new_pm} и потом в index.php поставь замену {new_pm} на $new_post_tpl

Как сделать кнопочку закрыть я потом придумаю:)
 
s vstrojennym JS show_hide
 
замени
$row = $db->super_query("SELECT subj, text, user_from FROM " . USERPREFIX . "_pm WHERE user = '$member_id[user_id]' AND folder = 'inbox' ORDER BY pm_read ASC, date DESC LIMIT 0,1");
на
$row = $db->super_query("SELECT id, subj, text, user_from FROM " . USERPREFIX . "_pm WHERE user = '$member_id[user_id]' AND folder = 'inbox' ORDER BY pm_read ASC, date DESC LIMIT 0,1");

и
<a href="{$PHP_SELF}?do=pm">
на
<a href="{$PHP_SELF}?do=pm&doaction=readpm&pmid={$row['id']}">

и будет при нажатии на "прочитать" открываться именно это сообщение.

а что бы было в main.tpl
пропиши в index.php

$tpl->set('{new_post_tpl}',$new_post_tpl);
а чтобы кнопку "закрыть" сделать, можно это сообщение в див спрятать и скрипт highslide-html.js использовать.

А в двиге есть глюк, когда открываешь личку для просмотра - счетчик непрочтенных сообщений остается прежним, а должен по логике на 1 стать меньше..
 
неразобрался нифига, можно немного подробнее и без глюков

Всё расписанно достаточно подробно. лучше тетируй на денвере, пробуй. обязательно получится!
Спасибо за хороший мод!:ay:
 
все хорошо, все работает тоько при заходе в index.php?do=pm

сверху ошибка высвечивается

Warning: mysql_fetch_assoc(:( 30 is not a valid MySQL result resource in /public_html/engine/classes/mysql.class.php on line 100

и в index.php?do=pm выводится только 1 сообщение

и как сделать чтобы при нажатии читать сообщение как только загрузилась страница с сообщением оно уже считалось прочитаным и не отображалось в блоке новых сообщений а то получается я читаюю новое сообщение а оно в блоке висит что для меня есть новое сообщение и оно тоже самое а при обновлении страницы оно пропадает
 
1. проверяй что намудрил в pm.php (или у тебя действительно только 1 личка)
2. Этот вопрос задавали на поддержке, ответа нет. Только самостоятельно ручками доделывать :)
 
1. проверяй что намудрил в pm.php (или у тебя действительно только 1 личка)
2. Этот вопрос задавали на поддержке, ответа нет. Только самостоятельно ручками доделывать :)


это я как понял про

и как сделать чтобы при нажатии читать сообщение как только загрузилась страница с сообщением оно уже считалось прочитаным и не отображалось в блоке новых сообщений а то получается я читаюю новое сообщение а оно в блоке висит что для меня есть новое сообщение и оно тоже самое а при обновлении страницы оно пропадает
а помочь с этим реально ? )

1. проверяй что намудрил в pm.php (или у тебя действительно только 1 личка)

неее - делал, как все описано в первом посте, несколько раз повторял - не спеша ))

по моему

PHP:
$row = $db->super_query("SELECT subj, text, user_from FROM " . USERPREFIX . "_pm WHERE user = '$member_id[user_id]' AND folder = 'inbox' ORDER BY pm_read ASC, date DESC LIMIT 0,1");
LIMIT 0,1 как раз ограничивает вывод одного последнего сообщения ) но тогда и в самом пм (index.php?do=pm) выводится 1 сообщение

Редактируй сообщения, а не флуди.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху