Làm sao để đưa thống kê thành viên trực tuyến ra ngoài trang chủ CMS, hiện tại nó chỉ hiện ở trang forum home mà thôi...
Nếu đây là lần đầu tiên bạn tham gia diễn đàn, xin mời bạn xem phần Hỏi/Ðáp để biết cách dùng diễn đàn. Để có thể tham gia thảo luận bạn phải đăng ký làm thành viên, click vào đây để đăng ký.
Làm sao để đưa thống kê thành viên trực tuyến ra ngoài trang chủ CMS, hiện tại nó chỉ hiện ở trang forum home mà thôi...
ai bít xin giúp mình. Cần gấp, thanks.
INSTALL INSTRUCTIONS:
1) Create a new Template
Styles & Templates > select style (I like to do this in the MASTER STYLE) > Add Template
Title - vbcms_widget_execphp_activeusers
Template code -
PHP Code:
2) Create a new PluginPHP Code:
<vb:if condition="$show['loggedinusers']">
<div class="cms_widget category_widget">
<div class="block">
<div class="cms_widget_header">
<h3><img src="{vb:stylevar imgdir_misc}/users_online.png" alt="{vb:rawphrase currently_active_users}" />{vb:rawphrase currently_active_users}</h3>
</div>
<div class="cms_widget_content widget_content">
<div>
<p>{vb:rawphrase there_are_x_online, {vb:raw totalonline}} <span class="shade">{vb:rawphrase x_members_and_y_guests, {vb:raw numberregistered}, {vb:raw numberguest}}</span></p>
<p>{vb:rawphrase most_users_ever_online_was_x_y_at_z, {vb:raw recordusers}, {vb:raw recorddate}, {vb:raw recordtime}}</p>
<ol class="commalist" id="wgo_onlineusers_list">
{vb:raw activeusers}
</ol>
</div>
</div>
</div>
</div>
</vb:if>
Plugins & Products > Add New Plugin > leave everything default except:
Hook Location - cache_templates
Title - Cache template for Users Online Widget
Plugin PHP code
Plugin is Active - YesPHP Code:
if (THIS_SCRIPT == 'vbcms')
{
$cache[] = 'forumhome_loggedinuser';
}
3) Create a new Widget
vBulletin CMS > Widgets > Create New Widget
Widget Type - PHP Direct Execution
Title - Users Online
SAVE
4) Configure the Widget
Now go to vBulletin CMS > Widgets > Users Online > Configure
Change the Template Name to -
vbcms_widget_execphp_activeusers
Add the following code
PHP Code:
require_once(DIR . '/includes/functions_bigthree.php');
$activeusers = '';
if ((vB::$vbulletin->options['displayloggedin'] == 1 OR vB::$vbulletin->options['displayloggedin'] == 2 OR (vB::$vbulletin->options['displayloggedin'] > 2 AND vB::$vbulletin->userinfo['userid'])) AND !$show['search_engine'])
{
$datecut = TIMENOW - vB::$vbulletin->options['cookietimeout'];
$numbervisible = 0;
$numberregistered = 0;
$numberguest = 0;
$hook_query_fields = $hook_query_joins = $hook_query_where = '';
($hook = vBulletinHook::fetch_hook('forumhome_loggedinuser_query')) ? eval($hook) : false;
$forumusers = vB::$db->query_read_slave("
SELECT
user.username, (user.options & " . vB::$vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid, user.lastvisit,
session.userid, session.inforum, session.lastactivity, session.badlocation,
IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
$hook_query_fields
FROM " . TABLE_PREFIX . "session AS session
LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
$hook_query_joins
WHERE session.lastactivity > $datecut
$hook_query_where
" . iif(vB::$vbulletin->options['displayloggedin'] == 1 OR vB::$vbulletin->options['displayloggedin'] == 3, "ORDER BY username ASC") . "
");
if (vB::$vbulletin->userinfo['userid'])
{
// fakes the user being online for an initial page view of index.php
vB::$vbulletin->userinfo['joingroupid'] = iif(vB::$vbulletin->userinfo['displaygroupid'], vB::$vbulletin->userinfo['displaygroupid'], vB::$vbulletin->userinfo['usergroupid']);
$userinfos = array
(
vB::$vbulletin->userinfo['userid'] => array
(
'userid' =>& vB::$vbulletin->userinfo['userid'],
'username' =>& vB::$vbulletin->userinfo['username'],
'invisible' =>& vB::$vbulletin->userinfo['invisible'],
'inforum' => 0,
'lastactivity' => TIMENOW,
'lastvisit' =>& vB::$vbulletin->userinfo['lastvisit'],
'usergroupid' =>& vB::$vbulletin->userinfo['usergroupid'],
'displaygroupid' =>& vB::$vbulletin->userinfo['displaygroupid'],
'infractiongroupid' =>& vB::$vbulletin->userinfo['infractiongroupid'],
)
);
}
else
{
$userinfos = array();
}
$inforum = array();
while ($loggedin = vB::$db->fetch_array($forumusers))
{
$userid = $loggedin['userid'];
if (!$userid)
{ // Guest
$numberguest++;
if (!isset($inforum["$loggedin[inforum]"]))
{
$inforum["$loggedin[inforum]"] = 0;
}
if (!$loggedin['badlocation'])
{
$inforum["$loggedin[inforum]"]++;
}
}
else if (empty($userinfos["$userid"]) OR ($userinfos["$userid"]['lastactivity'] < $loggedin['lastactivity']))
{
$userinfos["$userid"] = $loggedin;
}
}
if (!vB::$vbulletin->userinfo['userid'] AND $numberguest == 0)
{
$numberguest++;
}
$skipgroups = array(3,4);
foreach ($userinfos AS $userid => $loggedin)
{
if (in_array($loggedin['usergroupid'], $skipgroups))
{
$numberguest++;
}
else
{
$numberregistered++;
if ($userid != vB::$vbulletin->userinfo['userid'] AND !$loggedin['badlocation'])
{
if (!isset($inforum["$loggedin[inforum]"]))
{
$inforum["$loggedin[inforum]"] = 0;
}
$inforum["$loggedin[inforum]"]++;
}
fetch_musername($loggedin);
($hook = vBulletinHook::fetch_hook('forumhome_loggedinuser')) ? eval($hook) : false;
if (fetch_online_status($loggedin))
{
$numbervisible++;
$show['comma_leader'] = ($activeusers != '');
$templater = vB_Template::create('forumhome_loggedinuser');
$templater->register('loggedin', $loggedin);
$activeusers .= $templater->render();
vB_Template::preRegister('vbcms_widget_execphp_activeusers', array('activeusers' => $activeusers));
}
}
}
// memory saving
unset($userinfos, $loggedin);
vB::$db->free_result($forumusers);
$totalonline = $numberregistered + $numberguest;
$numberinvisible = $numberregistered - $numbervisible;
vB::$vbulletin->datastore->fetch(array('maxloggedin'));
if (vB::$vbulletin->maxloggedin === NULL)
{
vB::$vbulletin->maxloggedin = array();
}
if (intval(vB::$vbulletin->maxloggedin['maxonline']) <= $totalonline)
{
vB::$vbulletin->maxloggedin['maxonline'] = $totalonline;
vB::$vbulletin->maxloggedin['maxonlinedate'] = TIMENOW;
build_datastore('maxloggedin', serialize(vB::$vbulletin->maxloggedin), 1);
}
$recordusers = vb_number_format(vB::$vbulletin->maxloggedin['maxonline']);
$recorddate = vbdate(vB::$vbulletin->options['dateformat'], vB::$vbulletin->maxloggedin['maxonlinedate'], true);
$recordtime = vbdate(vB::$vbulletin->options['timeformat'], vB::$vbulletin->maxloggedin['maxonlinedate']);
$show['loggedinusers'] = true;
$statsarray = array('onlinestats' => $onlinestats,
'totalonline' => $totalonline,
'numberregistered' => $numberregistered,
'numberguest' => $numberguest,
'show' => $show,
'recordusers' => $recordusers,
'recorddate' => $recorddate,
'recordtime' => $recordtime,
);
vB_Template::preRegister('vbcms_widget_execphp_activeusers', $statsarray);
}
Trích từ: http://daklak.org
minhthai (04-09-2011)
Thanks. Nhưng khi dùng fake user thì nó k hiện ra ở ngoài CMS, Bên trong forum thì vẫn hiện. Có code nào đếm lượt truy cập web k bạn.
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks