راکت

نمایش کاربران آنلاین در لاراول

16 پاسخ

سلام دوستان عزیز
اگه راهی برای نمایش کاربران آنلاین وبسایت رو میدونید یا منبعی برای این کار میشناسید معرفی کنید.

ثبت پرسش جدید

پاسخ‌ها

16
محمدرضا قمی اویلی
محمدرضا قمی اویلی
@ghomi

تخصص: لاراول

طرز ایجاد همچین سیستمی پیدا کردم دوستان کسی اگه احتیاج داشت قرار بدم

علی باقری
علی باقری
@alibagheri

تخصص: برنامه نویس وب

سلام .
اگه قرار بدید بد نیست شاید یجا بدردمون بخوره .
تشکر

شاید پاسخ شما همین‌جا باشد

محمدرضا قمی اویلی
محمدرضا قمی اویلی
@ghomi

تخصص: لاراول

ابتدا یک Middleware با نام دلخواه ایجاد میکنیم

به فرض مثال اسمش UserActivity قرار میدیم

بعد وارد اون Middleware میشیم و کد زیر رو بهش اضافه میکنیم

public function handle($request, Closure $next)  
{  
if (Auth::check())  
{  
$expiresAt = Carbon::now()->addMinutes(1);  
Cache::put('user-is-online-' . Auth::user()->id, true,$expiresAt);  
}  
return $next($request);  
}  

بعدش باید این فایل به قسمت $middlewareGroups درون فایل Kernel.php اضافه کنیم

به شکل زیر:

protected $middlewareGroups = \[  
'web' => \[  
\\App\\Http\\Middleware\\EncryptCookies::class,  
\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,  
\\Illuminate\\Session\\Middleware\\StartSession::class,  
// \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,  
\\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,  
\\App\\Http\\Middleware\\VerifyCsrfToken::class,  
\\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,  
\\App\\Http\\Middleware\\UserActivity::class,  
\],  

بعد وارد مدل user میشیم و کد زیر بهش اضافه میکنیم

public function isOnline(){
    return Cache::has('user-is-online-' . $this->id);
}

بعد از این مراحل وارد کنترلر مورد نظر خودمون میشیم و اطلاعات user به ویو مورد نظر خودمون ارسال میکنیم

حالا کافیه در ویو با شرط if به شکل زیر کاربری که آنلاین هست نمایش بدیم

@foreach($users as $user)
                        @if($user->isOnline())

                                <button class="btn-success btn" style="cursor: default; "  > Online </button>

                        @else

                                <button class="btn-dark btn" style="cursor:default;"> Offline </button>

                        @endif

@endforeach  

بازم هم سوالی بود در خدمتم

علی باقری
علی باقری
@alibagheri

تخصص: برنامه نویس وب

بسیار عالی . تشکر

abbas133
abbas133
@133jafari

سلام ممنون بابت پستتون مفید بود
روی همه کاربرا حلقه گذاشتین؟؟
اگه جواب بله هست > مشکلی پیش نمیاد ؟

Mobin Yazdanparast
Mobin Yazdanparast
@mobinyazdanparast9

تخصص: برنامه نویس اندروید ، وب

میتونید از این اموزش استفاده کنید.
https://www.youtube.com/watch?v=BVlDG0OLbVE

محمدرضا قمی اویلی
محمدرضا قمی اویلی
@ghomi

تخصص: لاراول

@133jafari
بله روی همه حلقه زدم تا آنلاین و آفلاین هارو نشون بده

sss
sss
@sedighegggg

سلام
من تمام مراحلی که گفتین رو انجام دادم ورو همه ی کاربرا حلقه زدم تا آنلاین و آفلاین بودنشون رو نشون بده اما وقتی با یه کاربر لاگین میشم و صفحه نمایش وضعیت آنلاین بودن کاربرا رو لود میکنم همه ی کاربرا رو آنلاین نشون میده باید چکار کنم؟

sss
sss
@sedighegggg

ممنون میشم راهنماییم کنید

امین
امین
@aminem95

@ghomi2018
میشه بگی چطور میشه با این روش تعداد کاربران آنلاین رو گرفت؟؟

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

سلام
شما میتونین از پکیج زیر استفاده کنین
https://github.com/shetabit/visitor

کاربران انلاین

User::online()->get();
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

اگر چه روش اشاره شده هم به نوعی کار راه انداز هست ولی به نظرم روش اصولی تر و حرفه ای ترش استفاده از websocket هاست. در حالت قبلی شما بعد از لود شدن صفحه اگر کاربر آفلاین بشه یا افراد جدیدی آنلاین بشن ازشون بی خبر هستی. ولی با استفاده از web socket ها بصورت real-time هر اتفاقی که بیفته (آنلاین شدن افراد جدید یا آفلاین شدن افراد قدیم) در سمت فرانت اند بدون reload متوجهش خواهی شد.

در لاراول هم که استفاده از ابزار pusher این کارو بشدت راحت و سریع میکنه.

مطالعه بیشتر:
https://devmarketer.io/learn/websockets-laravel-part-0-websockets/

علیرضا
علیرضا
@AliRezaa

@ghomi2018
@mhyeganeh
@juza66

سلام.. فکر میکنم سوالم کمی به سوال (یا مطلب) این دوستمون شبیه باشه..

من در یکی از اولین پروژه هام (تمرینی) برای اینکه بگم کاربر "چقدر قبل" آنلاین بوده، اول در مدل یوزر یک تابع تعریف کردم که با هربار فراخوانی، زمان now رو به دیتابیس رکورد میکنه. بعد در بلید master (که در همه پیجها include شده و همه جا هست) اون تابع رو برای کاربر لاگین شده فراخوانی کردم! اینطوری با لود هر صفحه اون تابع فراخوانی و اجرا میشه و هر جا هم همون رکورد (مربوط به هر یوزر) رو از دیتابیس فراخوانی کنید (مثلا در پروفایل کاربر) طبعاً آخرین زمان لود یک پیج توسط کاربر رو نشون میده. (از پکیج Verta برای تبدیلات تایم و تاریخ و .. استفاده کردم) .

خیلی روش داغونی استفاده کردم عایا؟ :/

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

@AliRezaa

مجددا با اینکه با این مدل روش ها ممکن هست که کار راه بیافته ولی قطعا روش اصولی و قابل پیشنهادی نیست. چون اقدامات زیادی باید با هر بار ریکوئست رفتن سمت سرور انجام بشه که زائد هستند و جمع همه این ها در کنار هم ضربدر تعداد مراجعات بالای مخاطبان میشه سربار سرور که میتونه حائز اهمیت باشه.

ضمن اینکه ایراد روش قبلی باز هم به این روش وارد هست و اون هم اینکه بعد از لود صفحه هیچ گونه اطلاعات جدیدی دریافت نمیکنید. مگر اینکه مجددا صفحه رو رفرش کنید. ولی با وب سوکت ها یک ارتباط پایدار ایجاد میشه که باعث میشه هر اتفاقی می افته بصورت real-time در سمت فرانت اند هم ازش مطلع بشیم.

مجید
مجید
@kashefymajid1992

تخصص: برنامه‌نویس

@AliRezaa
اموزش کاربری از وبسوکتها ذر لاراول رو میتونید معرفی کنید؟

علیرضا
علیرضا
@AliRezaa

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام