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

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


Lera

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

Есть такой мод для форума. Кто сегодня читал топик. А можно ли это как-то пристроить в дневники?

 

http://mods.invisionize.com/db/index.php/f/5629

 

Пользователям интересно, кто читает их дневник. Если у кого-то уже стоит, поделитесь, пожалуйста. Помню был уже такой вопрос, но в общей теме, которая сейчас разбита на части :D

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

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

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

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

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

  • 4 недели спустя...

Может и коряво, но работает)

100% работает)

 

Если кто адаптирует или есть другая мысль, готов выслушать.

 

А у меня вот уже давно работает вот так:

 

добавляем в базу

CREATE TABLE `ibf_jvizitors` (

`mem_id` int(10) NOT NULL default '0',

`journal` int(10) NOT NULL default '0',

`date` int(10) NOT NULL default '0',

UNIQUE KEY `mem_id` (`mem_id`,`journal`)

) TYPE=MyISAM;

 

в dosetup.php

в функции function do_panel()

Найти:

		$key_check = array( 'j_info_pos','j_block_friends','j_block_ufriends','j_block_favorite',
						'j_block_ufavorite','j_block_comments','j_block_calendar','j_block_interest',
						'j_block_anterest','j_block_info');

Заменить на

		$key_check = array( 'j_info_pos','j_block_friends','j_block_ufriends','j_block_favorite',
						'j_block_ufavorite','j_block_comments','j_block_calendar','j_block_interest',
						'j_block_anterest','j_block_info','j_block_vizitors');

Найти:

		$block_order = array('j_block_links','j_block_votes','j_block_interest','j_block_anterest','j_block_friends','j_block_ufriends','j_block_favorite','j_block_ufavorite','j_block_calendar','j_block_comments','j_block_counter','j_block_search');

заменить на:

		$block_order = array('j_block_links','j_block_votes','j_block_interest','j_block_anterest','j_block_friends','j_block_ufriends','j_block_favorite','j_block_ufavorite','j_block_calendar','j_block_comments','j_block_counter','j_block_search','j_block_vizitors');

Найти:

		if ( !preg_match( "/^\d+$/", $ibforums->input['j_block_search'] ) )
	{
		$ibforums->input['j_block_search'] = 0;
	}

После добавить:

		if ( !preg_match( "/^\d+$/", $ibforums->input['j_block_vizitors'] ) )
	{
		$ibforums->input['j_block_vizitors'] = 0;
	}

 

Найти:

		$do_setting = $do_setting | (($ibforums->input['j_block_search'] & 1) << 24);
После добавить:

		$do_setting = $do_setting | (($ibforums->input['j_block_vizitors'] & 1) << 26);

В setup.php

Найти:

		// no-yes
	$blocks = array('j_block_votes','j_block_links','j_block_counter','j_block_search');

 

Заменить на:

		// no-yes
	$blocks = array('j_block_votes','j_block_links','j_block_counter','j_block_search','j_block_vizitors');

Найти:

		if (!$ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_allow_search'])
	{
		unset($p_list['j_block_search']);
	}

После добавить:

		if ($ibforums->cache['group_cache'][$journal->users['mgroup']]['g_j_allow_vizitors'])
	{
		unset($p_list['j_block_vizitors']);
	}

Нати:

		$block_order = array('j_block_links','j_block_votes','j_block_interest','j_block_anterest','j_block_friends','j_block_ufriends','j_block_favorite','j_block_ufavorite','j_block_calendar','j_block_comments','j_block_counter','j_block_search');

Заменить на:

		$block_order = array('j_block_links','j_block_votes','j_block_interest','j_block_anterest','j_block_friends','j_block_ufriends','j_block_favorite','j_block_ufavorite','j_block_calendar','j_block_comments','j_block_counter','j_block_search','j_block_vizitors');

В user_blocks.php

 

Найти:

$blocks[11] = $this->block_search();

После добавить:

$blocks[12] = $this->block_vizitors();

Найти:

}
?>

 

Добавить перед:

	function block_vizitors()
{
	global $ibforums, $DB, $journal;

	$time = time();
	$time_24 = (time() - 86400);

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

	if ($journal->users['j_block_vizitors'] < 1) return '';

	{

	$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");
		while ($row = $DB->fetch_row())
		{
		$member = $journal->txt_truncate($row['name'],13);
		$time_viz = $journal->get_date( $row['date'],"H:i:s d.m");;
		$who.= "<tr><td class='row' width='50%'><a href='".$journal->base_url."user=".$row['id']."'>".$member."</a></td><td class='row' width='50%'>".$time_viz."</td></tr>";
		}

		return $journal->skin->html['blocks']->block_vizitors($who);
	}

}

 

В journal.php (class_journal.php)

Найти:

$this->users['j_header_use'] = ($this->users['j_settings']   >> 25) & 1;

Добавить после:

$this->users['j_block_vizitors'] = ($this->users['j_settings']   >> 26) & 3;

 

В skin_blocks.php

 

Найти:

}
?>

Добавить перед:

 

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


$IPBHTML .= <<<EOF
<nobr>
<div class='mainhead'>Визиты за 24 часа</div>
<table cellpadding='0' cellspacing='1'>
{$who}
</table>
</nobr>
EOF;

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

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

можно.

не делал, но сделать можно..)

думал об этом, но придется тогда делать страницу с списком

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

Всё работает, только почему-то никак не названо. То есть пустая строчка у меня получилась после блока поиска, в настройках самих. То есть настройки дневника- панель информации - и последняя строчка пустая, но работает. Где бы ей название дать ?

А так пашет всё как часики, спасибо тебе огромное.

 

Спасибо ещё раз. Вопрос снят. Я нашла где добавить.

 

'j_block_vizitors' => "<b>Кто читал ваш дневник за последние 24 часа</b>", в файле lang_jsetup.php

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

Похоже что в запросе создания таблицы

 

CREATE TABLE `ibf_jvizitors` (

`mem_id` int(10) NOT NULL default '0',

`journal` int(10) NOT NULL default '0',

`mem_name` varchar(255) NOT NULL default '', - эта строка лишняя!

`date` int(10) NOT NULL default '0',

UNIQUE KEY `mem_id` (`mem_id`,`journal`,`mem_name`)

) TYPE=MyISAM;

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

`mem_name` varchar(255) NOT NULL default '', - эта строка лишняя!

сорри

запрос остался старый, так как несколько вариантов было.

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

vzport, а нет ли у тебя в планах вынести этот блок в отдельную страницу, а на главной в модулях оставить только ссылку? А то у меня например более 1200 просмотров блога в день и эта штука уезжает на много страниц вниз.
Ссылка на комментарий
Поделиться на других сайтах

vzport, а нет ли у тебя в планах вынести этот блок в отдельную страницу, а на главной в модулях оставить только ссылку? А то у меня например более 1200 просмотров блога в день и эта штука уезжает на много страниц вниз.
уже начал делать... скоро выкину, может быть и сегодня даже.
Ссылка на комментарий
Поделиться на других сайтах

накидал по быстрому, вроде работает и удобно)

в journal.php (class_journal.php)

находим

												'postfriend'	=> 'misc/list_post',
											'postfavorite'	=> 'misc/list_post',
											'interest'	=> 'misc/list_interest',
											'anterest'	=> 'misc/list_interest',

после добавим:

												'vizitors'	=> 'misc/list_vizitors',

создаем файлик в /misc

list_vizitors.php

с таким вот содержанием:

<?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 j_list_vizitors();

class j_list_vizitors {

var $output	 = array();

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

	$journal->skin->add_to_list('listing');
	$journal->skin->load_template();

	$this->list_vizitors();

	$journal->do_output($journal->skin->html['listing']->page_tpl($this->output));
}


function list_vizitors()
{
	global $ibforums, $journal, $DB;

	$time = time();
	$time_24 = (time() - 86400);

	$DB->query("SELECT COUNT(*) as num FROM ibf_jvizitors WHERE journal = '".$journal->users['id']."' AND date > '".$time_24."'");

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

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

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

	$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.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");;

		$who .= $journal->skin->html['listing']->vlist_row($rows);
		}
	}
		$html = $journal->skin->html['listing']->vlist($who);
	$journal->title = array($title,$journal->users['name']);
	$journal->nav[] = '<a href="'.$journal->base_url.'&user='.$journal->users['id'].'">'.$journal->users['name'].'</a>';
	$journal->nav[] = "Кто смотрел дневник ".$journal->users['name'];

	$this->output['CONTENT'] = $journal->skin->html['listing']->vizitors($html,$who);

}

}
?>

сохраняем это все)

 

далее в скинах

skin_listing.php

добавляем шаблоны

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


$IPBHTML .= <<<EOF
<div class='tableborder'>
<table cellpadding='0' cellspacing='1'>
<div class='mainhead'>Ваш дневник сегодня посмотрели</div>
{$who}
</table>
</div>
EOF;

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

//===========================================================================
// 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></td>
<td class='row'>{$rows['j_posts']}</td>
<td class='row' width='100'>{$rows['date']}</td>
<td class='row'>{$rows['j_title']}</td>
</tr>
EOF;

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

и все готово..

 

теперь подрезаем список в блоке

в файле (user_blocks.php)

находим запрос

		$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.date > '".$time_24."'
				ORDER BY v.date DESC
				LIMIT 0, 25");

добавили LIMIT 0, 25 (25 - колличество, можно поставить на свое усмотрение)

 

далее в скине блока

после

<div class='mainhead'>Визиты за 24 часа</div>
<table cellpadding='0' cellspacing='1'>
{$who}

добавим

<tr>
<td class='row' colspan='2' style='text-align:center;'>
<a href="{$journal->base_url}user={$journal->users['id']}&list=vizitors"><b>далее..</b></a>
</td>
</tr>

 

теперь вроде все.

 

В скинах я думаю все понятно, красатульки навести не трудно :D

 

Все, всем спокойной ночи!

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

Все отлично, спасибо!

 

Несколько поправок:

 

У меня заработало только после того как в файле list_vizitors.php заменил эту строку

 

$this->output['CONTENT'] = $journal->skin->html['listing']->vizitors($html,$who);

 

на эту

$this->output['CONTENT'] = $journal->skin->html['listing']->vlist($who,$html);

 

Чтобы не видеть гостей там же заменим эту строку

WHERE v.journal = '".$journal->users['id']."' AND v.date > '".$time_24."'

на эту

WHERE v.journal = '".$journal->users['id']."' AND v.mem_id != '0' AND v.date > '".$time_24."'

 

Названия колонок в skin_listing.php

 

<div class='tableborder'>
<table cellpadding='0' cellspacing='1'>
<div class='mainhead'><b>Ваш дневник сегодня посмотрели</b></div>
<tr>
<td class='mainhead'>Кто</td>
<td class='mainhead'>Постов</td>
<td class='mainhead'>Когда смотрел(а)</td>
<td class='mainhead'>Название дневника</td>
</tr>
{$who}
</table>
</div>

 

Чтобы сделать list=visitors доступным только автору дневника необходимо в list_vizitors.php после этого

 function list_vizitors()
{
	global $ibforums, $journal, $DB;

добавить это

		// Only for journal owner

	 if (!$ibforums->member['is_j_owner'])
	{
		 $journal->err_journal($ibforums->lang['j_err_closed']);
	}

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

О, спасиб.. огромное за поправички.

Делал ночью, да еще и на скорую руку..

 

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

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

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

Я вот копался и думал как сделать сам блок доступным только автору дневника, но у меня было всего 15 минут свободных на работу с кодом, увы не успел. Что нашел уже опубликовал выше в комментарии.

 

Может быть вечером будет время посмотреть.

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

Я вот копался и думал как сделать сам блок доступным только автору дневника, но у меня было всего 15 минут свободных на работу с кодом, увы не успел. Что нашел уже опубликовал выше в комментарии.

 

Может быть вечером будет время посмотреть.

В самой функции после этого:

if ($journal->users['j_block_vizitors'] < 1) return '';

добавить:

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

А после этого:

			 return $journal->skin->html['blocks']->block_vizitors($who);
	}

добавить это:

		}
	return '';

У меня доступ в блок посетителей вообще настраивает сам хозяин дневника, как с доступом к списку друзей и избранных. :D

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

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

 

Но местоположения блока не после block_search, а после block_ufriends я не менял и вроде бы все работает.

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

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

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

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

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

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

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

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

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

Зарузка...

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

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

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