Перейти к контенту

Кто читал дневник


Lera

Рекомендуемые сообщения

  • Ответы 60
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

Я тут на основе этого сделал еще такую фигну:

Какие дневники посмотрел пользователь))) (мини слежки)

код в студию :D

Ссылка на комментарий
Поделиться на других сайтах

в class_journal.php (journal.php)

			$action_list = array(
			'list'	=> array(0,'main','list',
								array(	'calendar' => 'misc/main_calendar',
										'allpost'  => 'misc/main_calendar',
										'allcomm'  => 'misc/main_calendar',
										'mycomm'  => 'misc/main_calendar',
										'ucomm'  => 'misc/main_calendar',
										'interest' => 'misc/main_interest',
										'anterest' => 'misc/main_interest',
										'vizitors' => 'misc/main_vizitors',
									),
								),

 

создаем main_vizitors.php в /misc

содержание:

<?php

/*
============================================================================
mJournal 2.1 Public Beta 1

Copyright (C) 2003-2007 UriSoft. All rights reserved;)
E-Mail: urisoft2002@yandex.ru
WWW:	http://www.urisoft.ru
============================================================================
*/


if (!defined('IN_JOURNAL'))
{
print '<h1>Incorrect access</h1>You cannot access this file directly.';
exit();
}


$idx = new main_vizitors();

class main_vizitors {

function main_vizitors()
{
	global $ibforums, $journal;

	$journal->skin->add_to_list('main_vizitors');
	$journal->skin->load_template();
	switch ($ibforums->input['list'])
	{
		case 'all':
				$output = $this->show_main_all();
				break;

		case 'vizitors':
		default:
				$output = $this->show_main_vizitors();
				break;
	}

	$journal->do_output($output);

}

function show_main_vizitors()
{
	global $ibforums, $DB, $std, $journal;

	$output = '';

	if (isset($ibforums->input['id']))
	{
	$id = intval($ibforums->input['id']);
		 	}else{
	$id = $ibforums->member['id'];
	}

	$time = time();
	$time_24 = (time() - 86400);
	$DB->query("SELECT COUNT(*) as num FROM ibf_jvizitors WHERE journal = '".$id."' AND mem_id != '0' AND date > '".$time_24."'");

	$max = $DB->fetch_row();
	$max = $max['num'];
	$DB->free_result();

	if ($ibforums->input['st'] >= $max) $ibforums->input['st'] = (floor($max / 75) * 75);
	if ($ibforums->input['st'] < 0) $ibforums->input['st'] = 0;

	if ($max)
	{
		// ----------------------------------------------
		$journal->build_pagelinks(array(
								'TOTAL_POSS'  => $max,
								'PER_PAGE'	=> 75,
								'CUR_ST_VAL'  => $ibforums->input['st'],
								'L_MULTI'	  => $ibforums->lang['pages'],
								'BASE_URL'	 => $journal->base_url.'list='.$ibforums->input['list'].'&id='.intval($ibforums->input['id']),
								  )		);

	$DB->query("SELECT v.*, m.*, jm.*
				FROM ibf_jvizitors v
				LEFT JOIN ibf_members m ON (m.id=v.mem_id)
				LEFT JOIN ibf_jmembers jm ON (jm.id=v.journal)
				WHERE v.mem_id = '".$id."' AND v.date > '".$time_24."'
				ORDER BY v.date DESC
				LIMIT ".$ibforums->input['st'].", 75");
		while ($rows = $DB->fetch_row())
		{
		$rows['date'] = $journal->get_date( $rows['date'],"H:i:s");;
		$html .= $journal->skin->html['main_vizitors']->main_table_row($rows);
		}


	}
	$journal->nav[] = "Визиты в дневники";
	$journal->title[] = "Визиты в дневники";

	return $journal->skin->html['main_vizitors']->main_table($html);

}

}
?>

			case 'all':
				$output = $this->show_main_all();
				break;

Это не обязательно, это я для себя сделал, на будующее)

с цифрами надеюсь поняли, сколько выводись список (у меня 75)

 

в основном journal.php (в корне форума)

находим:

$journal->skin->add_to_list('blocks');

добавляем после

$journal->skin->add_to_list('main_vizitors');

создаем новый skin_main_vizitors.php

с содержанием:

<?php

//=====================================================
// mJournal 2.1 Public Beta 1									
// CACHE FILE: skin_main.php					   
// GENERATED : Fri, 17 Mar 2006 15:40:18 GMT   
//=====================================================


class skin_main_vizitors {


//===========================================================================
// main_table
//===========================================================================
function main_table($who="",$info="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF
<div class='tableborder'>
<table cellpadding='0' cellspacing='1' width='100%'>
<div class='maintitle'>{$info['name']} посетил дневники:</div>
<tr>
<td class='subtitle'>Дневник</td>
<td class='subtitle'>Постов</td>
<td class='subtitle' nowrap='nowrap'>Когда смотрел(а)</td>
<td class='subtitle'>Название дневника</td>
</tr>
{$who}
</table>
</div>
EOF;

//--endhtml--//
return $IPBHTML;
}

//===========================================================================
// main_table_row
//===========================================================================
function main_table_row($rows="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF

<tr>
<td class='row1'><a href="{$journal->base_url}user={$rows['journal']}">{$rows['name']}</a> [<a href="{$journal->base_url}list=vizitors&id={$rows['journal']}">?</a>]</td>
<td class='row1' style='text-align:center;'>{$rows['j_posts']}</td>
<td class='row1' style='text-align:center;'>{$rows['date']}</td>
<td class='row1'>{$rows['j_title']}</td>
</tr>
EOF;

//--endhtml--//
return $IPBHTML;
}

}
?>

*замечание!!! У меня главная дневников использует css форума. Вам придется стиль переделать под свой.

в шаблоне вывода полного списка посетивших дневника сделайте так:

//===========================================================================
// vlist_row
//===========================================================================
function vlist_row($rows="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//


$IPBHTML .= <<<EOF

<tr>
<td class='row'><a href="{$journal->base_url}user={$rows['id']}">{$rows['name']}</a> [<a href="{$journal->base_url}list=vizitors&id={$rows['id']}">?</a>]</td>
<td class='row' style='text-align:center;'>{$rows['j_posts']}</td>
<td class='row' style='text-align:center;'>{$rows['date']}</td>
<td class='row'>{$rows['j_title']}</td>
</tr>
EOF;

//--endhtml--//
return $IPBHTML;
}

 

вроде все..

Ссылка на комментарий
Поделиться на других сайтах

в паре мест отличается расстановка скобок и добавлена возможность админу видеть блок.
кинь, что сделал?! буду благодарен.
Ссылка на комментарий
Поделиться на других сайтах

vzport и replicant спасибо за мод. Поставила, работает. Одна проблемка, если у человека нет дневника, он отображается пустым местом без ника, когда нажимаешь далее :D А так всё замечательно.
Ссылка на комментарий
Поделиться на других сайтах

vzport и replicant спасибо за мод. Поставила, работает. Одна проблемка, если у человека нет дневника, он отображается пустым местом без ника, когда нажимаешь далее :D А так всё замечательно.

 

Да мне-то за что? Я вообще мимо проходил. Это vzport спасибо!

 

ИМХО это гость, а не тот у кого нет дневника. Вобщем у меня те у кого нет дневника идут по ссылке далее с 0 постов. А у гостя id = 0 и ника нет. Чуть выше я писал как исключается ID = 0.

Ссылка на комментарий
Поделиться на других сайтах

Нет нет, это не гость. Гостей я вообще исключила. Это люди форума, у которых нет дневников. Я ставила мод Архара, который таков: не у всех при регистрации есть дневник, чтобы базу не грузить, кто хочет, тот заводит. А то изначально у всех были дневники при регистрации, а многим они не нужны и не хотят вести. Вот и получается, что если человек не завёл дневник, то отображается пустым местом. Но это не гость, это человек форума. У меня гости не могут писать вообще :D

Сейчас попробуй найти, как исключается ID 0 ;) Спасибо большое.

 

Не нахожу, совсем я кипятильник(((

Изменено пользователем Lera
Ссылка на комментарий
Поделиться на других сайтах

кхм, не должно быть пустого при любом раскладе..

запись в базу идет имя пользователя форума а не дневников, а так же идет чтение сопоставляя ID с именем с форума.

поесть, с дневников берется только id самого дневника, остальное все форумное.

 

можно поподробней, где выводится пустое место, в блоке или в листе?

если в листе, то поправить не составит труда

Ссылка на комментарий
Поделиться на других сайтах

В листе при нажатии далее. А сам блок как часики работает. Все ники там стоят, в листе вот пустым местом, если нет дневника. Изменено пользователем Lera
Ссылка на комментарий
Поделиться на других сайтах

В листе при нажатии далее. А сам блок как часики работает. Все ники там стоят, в листе вот пустым местом, если нет дневника.
)))все просто...

возми и укажи выбираемые поля жестко а не m.* и jm.*

проблема в том, что имена пользователей он читает получается из jmembers.

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

в list_vizitors.php

 

v.*, m.id, m.name, jm.j_posts, jm.j_title

 

и все)

для красоты можно добавить

if (!$rows['j_posts']){

$rows['j_posts'] = "-";

$rows['j_title'] = "---";

}

 

вудет выглядеть так

post-14366-1190594158_thumb.jpg

Ссылка на комментарий
Поделиться на других сайтах

Сделал сегодня днем так же как предлагает Allure, только в паре мест отличается расстановка скобок и добавлена возможность админу видеть блок.
Ой, со скобочкой (с одной) - это я промахнулась. Надо не
 if ($ibforums->member['is_j_owner']

а

 if ($ibforums->member['is_j_owner'])

Чтобы добавить возможность админам видеть блок, заменить эту строчку на:

if ($ibforums->member['is_j_owner'] or $ibforums->member['g_j_modview'])

Изменено пользователем Allure
Ссылка на комментарий
Поделиться на других сайтах

Просмотр IP-шек я бы только админам оставил ну максимум мождераторам дневников, но ни как не обычным юзверям.
Ссылка на комментарий
Поделиться на других сайтах

vzport, спасибо огромное. Только вот не соображу куда поставить правильно. Попробовала, ошибку выдаёт, ясно дело, что не туда запихнула. Ты не мог бы привести кусочек кода, а то ведь один знак не так, и у меня может не работать, не программер я. Подобные перечисления нашла только тут $DB->query("SELECT v.*, m.*, jm.* Не знаю,ч то за что отвечает, поэтому впихиваю, видимо, неправильно.

 

Allure, вот обидно то, делаю как ты говоришь, меняю как пишешь, а не могу просматривать, то ошибку выдаёт, то просто пишет, что закрыто для просмотра. Весь список не вижу у человека.

Ссылка на комментарий
Поделиться на других сайтах

$DB->query("SELECT v.*, m.id, m.name, jm.id, jm.j_posts, jm.j_title
				FROM ibf_jvizitors v
				LEFT JOIN ibf_members m ON (m.id=v.mem_id)
				LEFT JOIN ibf_jmembers jm ON (jm.id=v.mem_id)
				WHERE v.journal = '".$journal->users['id']."' AND v.date > '".$time_24."'
				ORDER BY v.date DESC
				LIMIT ".$ibforums->input['st'].", 50");
		while ($rows = $DB->fetch_row())
		{
		$rows['date'] = $journal->get_date( $rows['date'],"H:i:s");;
if (!$rows['j_posts']){
$rows['j_posts'] = "-";
$rows['j_title'] = "---";
}
		$who .= $journal->skin->html['listing']->vlist_row($rows);
		}
	}

 

Просмотр IP-шек я бы только админам оставил ну максимум мождераторам дневников, но ни как не обычным юзверям.

 

у меня так и стоит)

//===========================================================================
// vlist
//===========================================================================
function vlist($who="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//

if ($ibforums->member['g_j_modview'])
{
$ip = "<td class='subhead' style='text-align:center;'>IP</td>";
}else{
$ip = "";
}
$IPBHTML .= <<<EOF
<br />
<div class='tableborder'>
<table cellpadding='0' cellspacing='1'>
<div class='mainhead'><b>Ваш дневник сегодня посмотрели</b></div>
<tr>
<td class='subhead'>Кто</td>
{$ip}
<td class='subhead'>Постов</td>
<td class='subhead' nowrap='nowrap'>Когда смотрел(а)</td>
<td class='subhead'>Название дневника</td>
</tr>
{$who}
</table>
</div>
EOF;

//--endhtml--//
return $IPBHTML;
}

//===========================================================================
// vlist_row
//===========================================================================
function vlist_row($rows="") {
global $ibforums, $journal;
$IPBHTML = "";
//--starthtml--//

if ($ibforums->member['g_j_modview'])
{
$ip = "<td class='row' style='text-align:center;'>".$rows['ip']."</td>";
}else{
$ip = "";
}
$IPBHTML .= <<<EOF

<tr>
<td class='row'><a href="{$journal->base_url}user={$rows['id']}">{$rows['name']}</a> [<a href='{$journal->base_url}list=vizitors&id={$rows['id']}' title='Какие дневники смотрел'>w</a>]</td>
{$ip}
<td class='row' style='text-align:center;'>{$rows['j_posts']}</td>
<td class='row' style='text-align:center;'>{$rows['date']}</td>
<td class='row'>{$rows['j_title']}</td>
</tr>
EOF;

//--endhtml--//
return $IPBHTML;
}

 

и

		$DB->query("SELECT v.*, m.id, m.name, jm.id, jm.j_posts, jm.j_title
				FROM ibf_jvizitors v
				LEFT JOIN ibf_members m ON (m.id=v.mem_id)
				LEFT JOIN ibf_jmembers jm ON (jm.id=v.mem_id)
				WHERE v.journal = '".$journal->users['id']."' AND v.mem_id != '0' AND v.date > '".$time_24."'
				ORDER BY v.date DESC
				LIMIT ".$ibforums->input['st'].", 50");
		while ($rows = $DB->fetch_row())
		{
		$rows['date'] = $journal->get_date( $rows['date'],"H:i:s");
		$rows['ip'] = long2ip($rows['ip_jaddress']);
			if (!$rows['j_posts']){
			$rows['j_posts'] = "-";
			$rows['j_title'] = "---";
			}
		$who .= $journal->skin->html['listing']->vlist_row($rows);
		}

Ссылка на комментарий
Поделиться на других сайтах

Спасибо большое, vzport, всё заработало. А можно ещё вопрос? А как сделать, чтобы отображалось отображаемое имя? То есть ник, а не имя для входа? В каком файлике заменить?

 

Ещё раз спасибо.

Ссылка на комментарий
Поделиться на других сайтах

если по списку, то замени везде где обращается к "name" на "members_display_name", тоесть во всех изменениях

 

Вся инфа берется с таблицы ibf_members , вроде там храниться отображаемое имя.

Пример {$rows['name']} меняем на {$rows['members_display_name']}

 

Аналогично

$DB->query("SELECT v.*, m.id, m.members_display_name,

 

ну и так далее..

Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Заметил небольшой косяк:

отображаются только те пользователи, у которых есть дневник.

неплохо было бы добавить отображение и просто форумных пользователей... имхо

Ссылка на комментарий
Поделиться на других сайтах

Заметил небольшой косяк:

отображаются только те пользователи, у которых есть дневник.

неплохо было бы добавить отображение и просто форумных пользователей... имхо

 

не может такого быть)

запись и обновление базы происходить по ID форума

$DB->query("REPLACE INTO ibf_jvizitors (mem_id, journal, date) VALUES (" .$ibforums->member['id']. ", ".$journal->users['id'].", ".$time.") ");

а так же читается имя пользователя по ID из таблицы форума

$DB->query("SELECT v.*, m.*
				FROM ibf_jvizitors v
				LEFT JOIN ibf_members m ON (m.id=v.mem_id)
				WHERE v.journal = '".$journal->users['id']."' AND v.mem_id != '0' AND v.date > '".$time_24."'
				ORDER BY v.date DESC");

 

из этого следует, что никакого значения нет, есть дневник или нет у пользователя.

Ссылка на комментарий
Поделиться на других сайтах

не может такого быть)

Может.

 

Итак, косяк заключается в "исправлении" от Allure

В user_bloks.php вставить его не после $blocks[12] = $this->block_search(); а после $blocks[9] = $this->block_ufavorite(); (цифры в прямых скобках у вас свои, у меня просто блоков больше и у них сортировка другая).

Т.е. добавлении блока в условие

		if ($ibforums->member['is_j_owner'])
	{
		$blocks[5] = $this->block_ufriend();
		$blocks[7] = $this->block_ufavorite();
	}

в этом случае, блок показывается только хозяину и считает соответственно только его. =)

Как только перенёс в обычный ряд. Косяк скурился...

 

з.ы.

Остальные изменения в посте от Allure имхо можно оставлять. Блок остается не виден для посетителя, но считает его.

 

з.ы.ы.

От себя ещё добавлю, вот такую мелочь:

заменить в user_blocks.php

			$DB->query("REPLACE INTO ibf_jvizitors (mem_id, journal, date) VALUES (" .$ibforums->member['id']. ", ".$journal->users['id'].", ".$time.") ");

на

		if(!empty($ibforums->member['id'])){
		$DB->query("REPLACE INTO ibf_jvizitors (mem_id, journal, date) VALUES (" .$ibforums->member['id']. ", ".$journal->users['id'].", ".$time.") ");
	}

Это не даст забивать базу нулевыми юзерами (тобишь гостями). :D

Ссылка на комментарий
Поделиться на других сайтах

В user_bloks.php вставить его не после $blocks[12] = $this->block_search(); а после $blocks[9] = $this->block_ufavorite(); (цифры в прямых скобках у вас свои, у меня просто блоков больше и у них сортировка другая).

Т.е. добавлении блока в условие

		if ($ibforums->member['is_j_owner'])
	{
		$blocks[5] = $this->block_ufriend();
		$blocks[7] = $this->block_ufavorite();
	}

в этом случае, блок показывается только хозяину и считает соответственно только его. =)

Как только перенёс в обычный ряд. Косяк скурился...

 

Я тоже на это натыкался, но

 

Но местоположения блока не после block_search, а после block_ufriends я не менял и вроде бы все работает.
Ссылка на комментарий
Поделиться на других сайтах

Итак, косяк заключается в "исправлении" от Allure
В user_bloks.php вставить его не после $blocks[12] = $this->block_search(); а после $blocks[9] = $this->block_ufavorite(); (цифры в прямых скобках у вас свои, у меня просто блоков больше и у них сортировка другая).
Дык там же в скобках написано:
(цифры в прямых скобках у вас свои, у меня просто блоков больше и у них сортировка другая)
:D
Ссылка на комментарий
Поделиться на других сайтах

Дык там же в скобках написано:

Причём тут цифры? Блоки ufriend и ufavorite НЕ отображаются посетителям никогда, следовательно функция (а точнее запрос в этой функции) добавления посетителя НЕ происходит (если он не является владельцем дневника естественно).

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.