Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 25. April 2014 11:56
- Tranquillius
- probiert CMS/ms aus
- Ort: Leipzig
- Registriert: 10. September 2013
- Beiträge: 52
[GELÖST] FEU - Aktuell eingeloggte User abfragen!
Scheinbar hat das letzte Update auf FEU 1.23.2 die Funktion $feu_smarty->get_users_by_groupname zuerlegt (Habs bereits als Bug gemeldet). Nun suche ich eine Möglichkeit an die mittels FEU eingeloggten User zu kommen.
Bisher habe ich das so gelöst:
{$feu_smarty->get_users_by_groupname('group1','group1list')}
{foreach from=$group1list item=username}
{$feu_smarty->get_userinfo($username.id,'uinfo')}
{if $uinfo.loggedin == 1}
<span class="label label-primary">{$username.username}</span>
{/if}
{/foreach}
Es handelt sich um eine Funktion, die anzeigt, welche Nutzer ebenfalls derzeit eingeloggt sind.
Offline
#2 03. Mai 2014 21:05
- Tranquillius
- probiert CMS/ms aus
- Ort: Leipzig
- Registriert: 10. September 2013
- Beiträge: 52
Re: [GELÖST] FEU - Aktuell eingeloggte User abfragen!
Da die Funktion wohl nicht gefixed wird, habe ich mir ein UDT gebastelt, welches die eingeloggten User aus der DB abfragt.
$gCms=cmsms();
$db = $gCms->GetDb();
$queryactive = $db->GetAll('select userid from '.cms_db_prefix().'module_feusers_loggedin');
$smarty->assign('activeusers', $queryactive);
Im Template löse ich derzeit den Benutzernamen aus der UserId wie folgt auf:
{active_users}
{foreach from=$activeusers item=userid}
{$feu_smarty->get_userinfo($userid.userid,'uinfo')}
{$uinfo.username}
{/foreach}
Damit bekomme ich alle eingeloggten User angezeigt. Nun möchte ich das ganze soweit elegant lösen, dass er aus der DB sich den Username holt und ich auf das die Smarty-Funktion $feu_smarty->get_userinfo($uid, 'uinfo') verzichten kann.
Meine Fragen jetzt:
Wie verhindere ich mit meinem UDT, dass ein Assoziatives Array entsteht. Ein einfaches Array mit den User-IDs würde ja eigentlich reichen?
Wie kann ich den Usernamen bereits mit einer zweiten DB-Abfrage auflösen? So ungefähr habe ich es gedacht, aber nicht zum laufen gebraucht:
'SELECT username FROM '.cms_db_prefix().'module_feusers_users' where id=queryactive'
Offline
#3 04. Mai 2014 09:31
- Tranquillius
- probiert CMS/ms aus
- Ort: Leipzig
- Registriert: 10. September 2013
- Beiträge: 52
Re: [GELÖST] FEU - Aktuell eingeloggte User abfragen!
Ich habs hinbekommen. Bin aber für Kritik und Verbesserungsvorschläge offen!
$gCms=cmsms();
$db = $gCms->GetDb();
$queryactive = $db->GetAll('SELECT userid, lastused FROM '.cms_db_prefix().'module_feusers_loggedin');
foreach ($queryactive as $entry) {
$queryname = 'SELECT username FROM '.cms_db_prefix().'module_feusers_users WHERE id=?';
$user = array(
'userid' => $entry['userid'],
'lastused' => $entry['lastused'],
'username' => $db->GetOne($queryname, array($entry['userid']))
);
$users[] = $user;
}
$smarty->assign('activeusers', $users);
Offline
#4 05. Mai 2014 09:53
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FEU - Aktuell eingeloggte User abfragen!
Da die Funktion wohl nicht gefixed wird
Das sollte sie aber. Denn so wie sie jetzt aussieht, ist sie nicht zu gebrauchen. Sie würde nämlich nur dann eine Liste mit Usern zurückgeben, wenn das Modul nicht installiert/geladen ist. Und das ergibt keinen Sinn. Aber möglicherweise wird sie ja demnächst durch eine andere Funktion ersetzt. Denn im PHP Code steht für die Funktion GetUsersInGroup(), dass sie "deprecated" ist. Evtl. soll das generell über eine einzige Funktion und einen Filter gelöst werden. (so à la "lade user mit folgenden kriterien ... ")
Zu Deinem UDT: Du kannst Tabellen auch kombinieren und somit alles in einer einzigen Abfrage auslesen:
$db = &cmsms()->GetDb();
$activeusers = $db->GetArray(
"SELECT L.userid, L.lastused, U.username
FROM ".cms_db_prefix()."module_feusers_loggedin L, ".cms_db_prefix()."module_feusers_users U
WHERE L.userid = U.id"
);
$smarty->assign('activeusers', !$activeusers ? array() : $activeusers);
Ist in diesem Fall wesentlich performanter als mehrere SQL Abfragen.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#5 05. Mai 2014 13:02
- Tranquillius
- probiert CMS/ms aus
- Ort: Leipzig
- Registriert: 10. September 2013
- Beiträge: 52
Re: [GELÖST] FEU - Aktuell eingeloggte User abfragen!
Cool danke! Das mit der Einzelabfrage war mein Ziel, ich wusste nur nicht wie. Die Syntax muss ich mir mal verinnerlichen.
Das mit dem FEU-Bug ist halt komisch. Calgul hat einfach das Ticket geschlossen, ohne Kommentar oder Fix. Da ich mich sowieso mal an die DB-Geschichte heranführen wollte und das mir eine einfache Einstiegsaufgabe erschien, ist die Lösung sowieso performanter und eleganter. Jetzt habe ich richtig Blut geleckt.
Offline
#6 05. Mai 2014 13:30
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] FEU - Aktuell eingeloggte User abfragen!
Calgul hat einfach das Ticket geschlossen, ohne Kommentar oder Fix.
CG ist manchmal etwas ... komplizert. Vor allem wenn die Fehlermeldung aus DE kommt...
Es macht nicht viel Sinn etwas zu beheben bzw. dazu zu verleiten etwas zu nutzen, was sowieso geändert werden soll. Da die Funktion get_users_by_groupname() von der Funktion GetUsersInGroups() gebrauch macht, und diese wiederum aber als "veraltet" markiert ist, vermute ich eben, dass diese Funktion ohnehin bald rausfliegt/ersetzt wird. Das wäre zumindest eine rationale Erklärung. Aber komplizierte Personen agieren mitunter leider nicht immer rational...
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
Seiten: 1