Webseiten und ZubehörProgrammierung UmsetzungPflege Backups BetreuungJoomla-Spezialist

JoomlaSchnipsel

Whoi is online im Frontend anzeigen
Whoi is online im Frontend anzeigen

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.

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);

Verbesserungsvorschläge 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.

PHP Joomla Frontend SQL