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

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


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 я не менял и вроде бы все работает.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

Зарузка...

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

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

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