Ako zistit cim je uzivatel online?
- CZechBoY
- Člen | 3608
Technicky vzato uživatel je online když vykazuje nějakou aktivitu a
offline když žádnou nevykazuje.
Je jen na tobě jakej timeout mu dáš při nic nedělání a uznání že je
asi už offline…
Takže si můžeš ukládat uživatelovu poslední aktivitu a porovnávat
s aktuálním časem a nějakým tvým definovaným timeoutem. Jako berličku
si můžeš zkusit poznačit že uživatel zavřel okno nebo tak něco. Pro
přesnější metriku můžeš použít nějaký heartbeaty – na stránce
každých 30s volat ajax „ano, ještě jsem online, neodpojuj mě“.
- CZechBoY
- Člen | 3608
udělej to kde chceš :-) jestli s mvc začínáš tak si to klidně všechno dej do presenteru, ničemu to nevadí, pro výuku to je dostačující… pokud tě zajímá nějaká lepší architektura aplikace tak můžeš udělat další třídu, která bude obstarávat nějaký tyhle online stavy uživatele. tu pak registruješ do dependency injection containeru a v presenteru vyžádáš přes konstruktor. je mi jasný, že teď nechápeš skoro nic a odkážu tě do dokumentace dependency injection, případně použití di.
- Martk
- Člen | 661
Nudil jsem se, tak jsem ti vytvořil šablonu jak na to.
Služba
class OnlineUserService {
public function __construct(Context $db) {
$this->db = $db;
}
public function getAll(): array {
return $this->db->...
}
public function isOnline(int $userId): bool {
return (bool) $this->db->...;
}
}
Komponenta pro výpis všech uživatelů online
class OnlineUsersComponent extends Control {
public function __construct(OnlineUserService $service) {
$this->service = $service;
}
public function render() {
$template = $this->getTemplate();
$template->setFile(__DIR__ . '/templates/onlineUsers.latte');
$template->users = $this->service->getAll();
$template->render();
}
}
onlineUsers.latte
<div n:foreach="$users as $row">{$row->name}</div> {* Když dám $user, tak latte zahlásí chybu, protože přepisuji proměnnou *}
config
services:
- OnlineUserService
- OnlineUsersComponent
presenter
class HomepagePresenter extends BasePresenter {
/** @var OnlineUsersComponent @inject */
public $onlineUsersComponent;
protected function createComponentOnlineUsers() {
return $this->onlineUsersComponent;
}
}
Šablona Homepage/default.latte
{control onlineUsers}
Editoval Martk (27. 10. 2017 22:25)