Ein einfach gehaltenes Who-is-online-Skript, mit dem man den aktuellen Anmelde-Status der registrierten Besucher im Frontend anzeigen lassen kann. Ich binde ihn mit dieser Technik in diesen Beitrag ein: Mit Modulstil eigene PHP-Dateien einbinden. Der Code funktioniert natürlich auch in eigenen Erweiterungen, Overrides oder mit einer der Joomla-Erweiterungen zum Einbinden von PHP.

Whoi is online im Frontend anzeigen
Bild in größter Auflösung öffnen (Popup)
Whoi is online im Frontend anzeigen

Es handelt sich um ein simples Basis-Skript. Wer mehr will, sollte noch Fehlerroutinen einprogrammieren. Auch lässt sich der Ausgabeblock sicherlich optimieren.

Es zeigt auch Backend-Anmeldungen an und immer alle in der Datenbank befindlichen Benutzer, ggf. mit einem "OFF". Also bitte überlegen, ob man das wirklich will. Im deaktivierten Code Block //Optionale Filter gibt es dafür ein paar Steuerungsmöglichkeiten.

Am Ende des Artikels wird der von Joomla generierte SQL-Code angezeigt, passend zum verwendeten Server mit dem der Code ausgeführt wird, falls Sie ihn direkt einsetzen wollen. Zum Entfernen dieses Outputs den Block //DEBUG aus dem Code entfernen.

Welche Benutzer sind gerade online?

Re:Later

OFF

Richardt Rösepöse

OFF

Volkmar Volli Schlothauer (GHSVS)

OFF

SQL-Query-String

SELECT `u`.`name`, `u`.`id`, `s`.`client_id` FROM `#__users` AS `u` LEFT JOIN `#__session` AS `s` ON `s`.`userid` = `u`.`id` ORDER BY `u`.`name`

<?php
/* user-online.php */
defined('_JEXEC') or die;
$debug = array();

// Datenbankabfrage
$db = JFactory::getDbo();

$selects = $db->qn(array(
 'u.name',
 'u.id',
 's.client_id',
));
$selects = implode(', ', $selects);

$on = ' ON ' . $db->qn('s.userid') . ' = ' . $db->qn('u.id');

$query = $db->getQuery(true)
->select($selects)
->from($db->qn('#__users', 'u'))
->join('LEFT', $db->qn('#__session', 's') . $on)
->order($db->qn('u.name'))
;


// OPTIONALE FILTER - START
$client = $db->qn('s.client_id');

// Nur jeweils 1 where-Zeile verwenden (Gatterzeichen # entfernen)!

// Nur Frontendanmeldungen anzeigen, keine Abgemeldeten:
#$query->where($client . ' = "0"');

// Nur Backendanmeldungen anzeigen, keine Abgemeldeten:
#$query->where($client . ' = "1"');

// Nur Angemeldete anzeigen
#$query->where($client . ' IN ("0", "1")');

// OPTIONALE FILTER - ENDE


$db->setQuery($query);
$results = $db->loadObjectList();


//DEBUG - START
$debug[] = '<h4>SQL-Query-String</h4>';
$debug[] = '<p><code>'.(string) $query.'</code></p>';
//DEBUG - ENDE


// Ggf. Anmeldung über mehrere Browser raushauen.
// Andererseits berücksichtigen, dass dort FE, da BE möglich.
// Plumpes Überschreiben mittels ID.
$users = array();
foreach ($results as $result)
{
 $users[$result->id]['name'] = $result->name;
 if ($result->client_id === '0')
 {
  $users[$result->id]['fe'] = true;
 }
 elseif ($result->client_id === '1')
 {
  $users[$result->id]['be'] = true;
 }
}

// CSS
echo '<style>
.showOnline span{
 display: inline-block;
 text-align: center;
 border-radius: 50%;
 height:50px;
 width:50px;
 font-size:20px;
 line-height:50px;
 font-weight:bold;
 color: white;
}
.useronlineFE{
 background-color: green;
}
.useronlineBE{
 background-color: blue;
}
.usernotonline{
 background-color: gray;
}
</style>';

// Ausgabe
$html = array();

if (empty($users))
{
 $html[] = '<p>Keine gefunden.</p>';
}

foreach ($users as $result)
{
 $html[] = '<h5>' . $result['name'] . '</h5>';
 $html[] = '<p class="showOnline">';

 if (isset($result['fe']))
 {
  $html[] = '<span class="useronlineFE">';
  $html[] = 'FE';
  $html[] = '</span>';
 }
 if (isset($result['be']))
 {
  $html[] = '<span class="useronlineBE">';
  $html[] = 'BE';
  $html[] = '</span>';
 }
 if (!isset($result['fe']) && !isset($result['be']))
 {
  $html[] = '<span class="usernotonline">';
  $html[] = 'OFF';
  $html[] = '</span>';
 }

 $html[] = '</p>';
}
echo implode('', $html);
echo implode('', $debug);

Allgemeiner Hinweis zu Erweiterungen und Code-Schnipseln

Verbesserungsvorschläge, Fragen und Feature-Wünsche sind willkommen.

Alle nicht explizit als fertige Erweiterung markierten Skripte und Codes von www.ghsvs.de dienen als Ansätze / Ideen für eigene Ausarbeitung. GHSVS bzw. die jeweiligen Autoren übernehmen keinerlei Garantien beim Einsatz Ihrer kostenlosen Erweiterungen, Programme, Codes und Skripte, helfen aber gerne bei Rückfragen, soweit zeitlich möglich.