OlijO
18/12/2009, 22h49
Ce Gadget ou Widget vous permet d'afficher un cadre avec les utilisateurs en ligne sur votre page d'accueil CMS.
Hack mis à jour en version 1.1 le 10/10/2010.
Remerciements et support
Ce Hack a été traduit en français pour vBulletin-Ressources avec l'autorisation explicite de son auteur. / This Hack was translated into French for vBulletin-Ressources with the explicit authorization of its author.
vBulletin-Ressources et son équipe offrira du support vis à vis des hacks traduits, bien sûr, dans la mesure du possible de chacun, autant en terme de temps que de connaissances/ vBulletin-Ressources and its team will offer support for the translated hacks, of course, as far as possible for everyone, as much in term of time that knowledge.
vBulletin-Ressources remercie l'auteur du hack pour avoir fourni son autorisation. / vBulletin-Ressources thanks the author for the hack to have provided its authorization.
Conception
Auteur du Hack / Author Of Hack : Lynne (http://www.vbulletin.org/forum/member.php?u=65230)
Source / Link of Thread : Widget - Users Online (http://www.vbulletin.org/forum/showthread.php?t=230428)
Version du hack / Hack version : 1.1
Version vBulletin Requise / Version vBulletin Required : vB 4.x
Testé / Tested: oui sur 4.0 RC2
Traducteur / Translator: OlijO
Copyright © 2006-2009 vBulletin-Ressources.com - Tous droits réservés Uniquement pour nos traductions / Copyright © 2006-2009 vBulletin-Ressources.com - All Rights Reserved Only for ours translations
Installation
Création d'un nouveau Template :
Aller dans votre AdminCP et dans gestion de style, choisir le style pour lequel vous désirez ajouter le Widget et dans le menu de droite choisir l'option ajouter un template.
-Titre : vbcms_widget_execphp_activeusers
-Code à ajouter :
<vb:if condition="$show['loggedinusers']"> <div class="cms_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"> <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> <ol class="commalist" id="wgo_onlineusers_list"> {vb:raw activeusers} </ol> </div> </div> </div> </div> </vb:if>
Créer un nouveau Plugin : Dans votre AdminCP, Modules et Produits, choisir "ajouter un module"
-Produit : vBulletin
-Emplacement du crochet : cache_templates
-Titre : Cache template for Users Online Widget
-Code :
if (THIS_SCRIPT == 'vbcms')
{
$cache[] = 'forumhome_loggedinuser';
}
-Plugin actif : Oui
Créer un nouveau Widget : Dans votre AdminCP menu vBulletin CMS choisir Widget (Gadget).
-Créer un nouveau Widget (gadget).
-Type de Widget : PHP Direct Execution
-Titre : Users Online
-Sauver.
Une fois sauver cliquer sur le lien pour le configurer.
-Changer le nom du template par : vbcms_widget_execphp_activeusers
-Ajouter au code déjà présent le code suivant :
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;
$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++;
}
foreach ($userinfos AS $userid => $loggedin)
{
$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);
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_act iveusers', 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_act iveusers', $statsarray);
}
-Enregistrer.
Optionnel, si votre nouveau Widget ne s'affiche pas il faut le configurer dans le gestionnaire de mise en page pour qu'il s'affiche. il faut donc éditer (modifier) la mise en page par défaut.
Là, les Widget s'affiche à gauche, sélectionner le widget à ajouter et un clic sur la flèche le fait passer à droite dans la mise en page. Il suffit ensuite de le sélectionner avec la souris pour pouvoir le placer où on le souhaite. Sauvegardez et c'est ok.
Démonstration/Captures
et en pièces jointes des screenshots explicatifs
Hack mis à jour en version 1.1 le 10/10/2010.
Remerciements et support
Ce Hack a été traduit en français pour vBulletin-Ressources avec l'autorisation explicite de son auteur. / This Hack was translated into French for vBulletin-Ressources with the explicit authorization of its author.
vBulletin-Ressources et son équipe offrira du support vis à vis des hacks traduits, bien sûr, dans la mesure du possible de chacun, autant en terme de temps que de connaissances/ vBulletin-Ressources and its team will offer support for the translated hacks, of course, as far as possible for everyone, as much in term of time that knowledge.
vBulletin-Ressources remercie l'auteur du hack pour avoir fourni son autorisation. / vBulletin-Ressources thanks the author for the hack to have provided its authorization.
Conception
Auteur du Hack / Author Of Hack : Lynne (http://www.vbulletin.org/forum/member.php?u=65230)
Source / Link of Thread : Widget - Users Online (http://www.vbulletin.org/forum/showthread.php?t=230428)
Version du hack / Hack version : 1.1
Version vBulletin Requise / Version vBulletin Required : vB 4.x
Testé / Tested: oui sur 4.0 RC2
Traducteur / Translator: OlijO
Copyright © 2006-2009 vBulletin-Ressources.com - Tous droits réservés Uniquement pour nos traductions / Copyright © 2006-2009 vBulletin-Ressources.com - All Rights Reserved Only for ours translations
Installation
Création d'un nouveau Template :
Aller dans votre AdminCP et dans gestion de style, choisir le style pour lequel vous désirez ajouter le Widget et dans le menu de droite choisir l'option ajouter un template.
-Titre : vbcms_widget_execphp_activeusers
-Code à ajouter :
<vb:if condition="$show['loggedinusers']"> <div class="cms_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"> <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> <ol class="commalist" id="wgo_onlineusers_list"> {vb:raw activeusers} </ol> </div> </div> </div> </div> </vb:if>
Créer un nouveau Plugin : Dans votre AdminCP, Modules et Produits, choisir "ajouter un module"
-Produit : vBulletin
-Emplacement du crochet : cache_templates
-Titre : Cache template for Users Online Widget
-Code :
if (THIS_SCRIPT == 'vbcms')
{
$cache[] = 'forumhome_loggedinuser';
}
-Plugin actif : Oui
Créer un nouveau Widget : Dans votre AdminCP menu vBulletin CMS choisir Widget (Gadget).
-Créer un nouveau Widget (gadget).
-Type de Widget : PHP Direct Execution
-Titre : Users Online
-Sauver.
Une fois sauver cliquer sur le lien pour le configurer.
-Changer le nom du template par : vbcms_widget_execphp_activeusers
-Ajouter au code déjà présent le code suivant :
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;
$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++;
}
foreach ($userinfos AS $userid => $loggedin)
{
$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);
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_act iveusers', 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_act iveusers', $statsarray);
}
-Enregistrer.
Optionnel, si votre nouveau Widget ne s'affiche pas il faut le configurer dans le gestionnaire de mise en page pour qu'il s'affiche. il faut donc éditer (modifier) la mise en page par défaut.
Là, les Widget s'affiche à gauche, sélectionner le widget à ajouter et un clic sur la flèche le fait passer à droite dans la mise en page. Il suffit ensuite de le sélectionner avec la souris pour pouvoir le placer où on le souhaite. Sauvegardez et c'est ok.
Démonstration/Captures
et en pièces jointes des screenshots explicatifs