Neuigkeiten:

Want to get involved in developing SMF, then why not lend a hand on our github!

Hauptmenü
Advertisement:

How to count the number of members currently viewing an action of your choice

Begonnen von Biology Forums, September 05, 2014, 12:19:51 VORMITTAG

Vorheriges Thema - Nächstes Thema

Biology Forums

I'm sharing this script upon request from this thread.

The script was developed with SMFHacks - respect goes to him for helping me put this idea together.



Note: This has only been tested on SMF 1.x, it will not work on 2.x, so feel free to alter it and share it below.



I placed this script inside load.php, specifically  inside the function loadUserSettings(), just before the }.



if (($context['gal_users'] = cache_get_data('gal_users', 15)) == null)
{
$context['view_members2'] = array();
$context['view_num_hidden'] = 0;

// Search for members who are in the gallery
   $request = db_query("
  SELECT lo.ID_MEMBER, lo.logTime, mem.showOnline
  FROM {$db_prefix}log_online AS lo
  LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = lo.ID_MEMBER)
  WHERE lo.url like '%s:7:\"gallery\"%'", __FILE__, __LINE__);

while ($row = mysql_fetch_assoc($request))
   {
  if (empty($row['ID_MEMBER']))
continue;

  $context['view_members2'][$row['logTime']] = array(
'id' => $row['ID_MEMBER'],
'hidden' => empty($row['showOnline']),
  );
 
  if (empty($row['showOnline']))
$context['view_num_hidden']++;
   }
// Sort the list.
krsort($context['view_members2']);

// The number of guests is equal to the rows minus the ones we actually used.
$context['view_num_guests2'] = mysql_num_rows($request) - count($context['view_members2']);
mysql_free_result($request);
$context['gal_users'] = $context['view_num_guests2'] + count($context['view_members2']);
cache_put_data('gal_users', $context['gal_users'], 15);
}



If you want another action besides action=gallery, change:

%s:7:\"gallery\"%

to something else, like stats:

%s:5:\"stats\"%

Notice how s:7 became s:5 and gallery became stats.

Enjoy!

Hj Ahmad Rasyid Hj Ismail


Biology Forums

Zitat von: ahrasis in Oktober 03, 2014, 09:44:13 VORMITTAG
Thank you for sharing this Shuban. Can't wait to test it.

You're welcome. This will also work best if a caching system has been put in place.

Arantor

Yeah because this is going to suck in performance terms :( There's no way the query can be optimised at all, so it ends up being a complete table scan of the log_online table, which is also full-blocking unless you're using InnoDB (which means if you have a large online list, it blocks everything else updating it while it fetches the data)
Holder of controversial views, all of which my own.


Hj Ahmad Rasyid Hj Ismail

Hah... That is a nice catch. Will bear it in mind while attempting this idea.

Advertisement: